diff --git a/src/basic_exports.jl b/src/basic_exports.jl index a3c9aca5..5d8876e8 100644 --- a/src/basic_exports.jl +++ b/src/basic_exports.jl @@ -6,7 +6,7 @@ export new, width, height, #minsize, maxsize selected, hasselection, unselect!, selectall!, unselectall!, pagenumber, present, fullscreen, unfullscreen, maximize, unmaximize, complete, user_action, - keyval, prev, up, down, popup + keyval, prev, up, down, popup, place_cursor!, create_tag, apply_tag #property, margin, padding, align #raise, focus, destroy, enabled diff --git a/src/displays.jl b/src/displays.jl index 64394154..14ede869 100644 --- a/src/displays.jl +++ b/src/displays.jl @@ -16,7 +16,7 @@ convert{U<:Unsigned}(::Type{U},x::RGB) = convert(U,(x.r)|(x.g>>8)|(x.b>>16)) immutable RGBA r::UInt8; g::UInt8; b::UInt8; a::UInt8 - RGBA(r,g,b) = new(r,g,b) + RGBA(r,g,b,a) = new(r,g,b,q) end convert(::Type{RGBA},x::Unsigned) = RGBA(UInt8(x),UInt8(x>>8),UInt8(x>>16),UInt8(x>>24)) convert{U<:Unsigned}(::Type{U},x::RGBA) = convert(U,(x.r)|(x.g>>8)|(x.b>>16)|(x.a>>24)) diff --git a/src/gdk.jl b/src/gdk.jl index 8cfc8f08..65bcf9e8 100644 --- a/src/gdk.jl +++ b/src/gdk.jl @@ -15,6 +15,16 @@ immutable GdkPoint end # GdkPoint is not a GBoxed type +immutable GdkRGBA + red::Cdouble + green::Cdouble + blue::Cdouble + alpha::Cdouble + GdkRGBA(red, green, blue, alpha) = new(red, green, blue, alpha) +end +make_gvalue(GdkRGBA, Ptr{GdkRGBA}, :boxed, (:gdk_rgba,:libgdk)) +convert(::Type{GdkRGBA}, rgba::Ptr{GdkRGBA}) = unsafe_load(rgba) + gdk_window(w::GtkWidget) = ccall((:gtk_widget_get_window,libgtk),Ptr{Void},(Ptr{GObject},),w) baremodule GdkKeySyms diff --git a/src/gtktypes.jl b/src/gtktypes.jl index 6e3edcf5..11c39c28 100644 --- a/src/gtktypes.jl +++ b/src/gtktypes.jl @@ -33,6 +33,7 @@ macro gtktype(name) @gtktype_custom_symname $(esc(name)) $(esc(symname)) end end +@gtktype GdkRGBA @gtktype GtkWidget @gtktype GtkContainer @gtktype GtkBin diff --git a/src/long_exports.jl b/src/long_exports.jl index 23c20e54..8148164d 100644 --- a/src/long_exports.jl +++ b/src/long_exports.jl @@ -1,6 +1,7 @@ # Gtk objects export GObject, GdkPixbuf, + GdkRGBA, GtkAboutDialog, GtkAccelGroup, GtkAdjustment, diff --git a/src/text.jl b/src/text.jl index 2040499b..f3966e01 100644 --- a/src/text.jl +++ b/src/text.jl @@ -30,6 +30,8 @@ GtkTextTagLeaf() = GtkTextTagLeaf( GtkTextTagLeaf(name::AbstractString) = GtkTextTagLeaf( ccall((:gtk_text_tag_new,libgtk),Ptr{GObject},(Ptr{UInt8},),bytestring(name))) + + immutable GtkTextIter dummy1::Ptr{Void} dummy2::Ptr{Void} @@ -87,6 +89,12 @@ end #TODO #end +# setproperty!(w::Gtk.GtkTextTag, name::Symbol, value) = setproperty!(w, string(name), value) +# function setproperty!(w::Gtk.GtkTextTag, name::AbstractStringLike, value) +# println(libgobject) +# ccall((:g_object_set_property, libgobject), Void, +# (Ptr{GObject}, Ptr{UInt8}, Ptr{GdkRGBA}), w, GLib.bytestring(name), Ptr(value)) +# end ##### GtkTextIter ##### #TODO: search @@ -115,25 +123,25 @@ function getproperty(text::TI, key::Symbol, outtype::Type=Any) # elseif key === :child_anchor # convert(GtkTextChildAnchor,ccall((:gtk_text_iter_get_child_anchor,libgtk),Ptr{GtkTextChildAnchor},(Ptr{GtkTextIter},Cint),text,false)) elseif key === :can_insert - bool(ccall((:gtk_text_iter_can_insert,libgtk),Cint,(Ptr{GtkTextIter},Cint),text,true)) + Bool(ccall((:gtk_text_iter_can_insert,libgtk),Cint,(Ptr{GtkTextIter},Cint),text,true)) elseif key === :starts_word - bool(ccall((:gtk_text_iter_starts_word,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_starts_word,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :ends_word - bool(ccall((:gtk_text_iter_ends_word,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_ends_word,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :inside_word - bool(ccall((:gtk_text_iter_inside_word,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_inside_word,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :starts_line - bool(ccall((:gtk_text_iter_starts_line,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_starts_line,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :ends_line - bool(ccall((:gtk_text_iter_ends_line,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_ends_line,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :starts_sentence - bool(ccall((:gtk_text_iter_starts_sentence,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_starts_sentence,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :ends_sentence - bool(ccall((:gtk_text_iter_ends_sentence,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_ends_sentence,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :inside_sentence - bool(ccall((:gtk_text_iter_inside_sentence,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_inside_sentence,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :is_cursor_position - bool(ccall((:gtk_text_iter_is_cursor_position,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_is_cursor_position,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :chars_in_line ccall((:gtk_text_iter_get_chars_in_line,libgtk),Cint,(Ptr{GtkTextIter},),text) elseif key === :bytes_in_line @@ -146,9 +154,9 @@ function getproperty(text::TI, key::Symbol, outtype::Type=Any) # elseif key === :language # ccall((:gtk_text_iter_get_language,libgtk),Ptr{PangoLanguage},(Ptr{GtkTextIter},Ptr{GtkTextAttributes}),text) elseif key === :is_end - bool(ccall((:gtk_text_iter_is_end,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_is_end,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :is_start - bool(ccall((:gtk_text_iter_is_start,libgtk),Cint,(Ptr{GtkTextIter},),text)) + Bool(ccall((:gtk_text_iter_is_start,libgtk),Cint,(Ptr{GtkTextIter},),text)) elseif key === :char convert(Char,ccall((:gtk_text_iter_get_char,libgtk),UInt32,(Ptr{GtkTextIter},),text)) elseif key === :pixbuf @@ -178,7 +186,7 @@ function setproperty!(text::Mutable{GtkTextIter},key::Symbol,value) end return text end -@compat(Base.:(==))(lhs::TI,rhs::TI) = bool(ccall((:gtk_text_iter_equal,libgtk), +@compat(Base.:(==))(lhs::TI,rhs::TI) = Bool(ccall((:gtk_text_iter_equal,libgtk), Cint,(Ptr{GtkTextIter},Ptr{GtkTextIter}),mutable(lhs),mutable(rhs))) @compat(Base.:(!=))(lhs::TI,rhs::TI) = !(lhs == rhs) @compat(Base.:(<))(lhs::TI,rhs::TI) = ccall((:gtk_text_iter_compare,libgtk),Cint, @@ -197,37 +205,37 @@ done(::TI,iter) = getproperty(iter,:is_end)::Bool @compat(Base.:+)(iter::TI, count::Integer) = (iter = mutable(copy(iter)); skip(iter, count); iter) @compat(Base.:-)(iter::TI, count::Integer) = (iter = mutable(copy(iter)); skip(iter, -count); iter) Base.skip(iter::Mutable{GtkTextIter}, count::Integer) = - bool(ccall((:gtk_text_iter_forward_chars,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_chars,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) function Base.skip(iter::Mutable{GtkTextIter}, count::Integer, what::Symbol) if what === :char || what === :chars - bool(ccall((:gtk_text_iter_forward_chars,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_chars,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :line || what === :lines - bool(ccall((:gtk_text_iter_forward_lines,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_lines,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :word || what === :words - bool(ccall((:gtk_text_iter_forward_word_ends,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_word_ends,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :word_cursor_position || what === :word_cursor_positions - bool(ccall((:gtk_text_iter_forward_cursor_positions,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_cursor_positions,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :sentence || what === :sentences - bool(ccall((:gtk_text_iter_forward_sentence_ends,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_sentence_ends,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :visible_word || what === :visible_words - bool(ccall((:gtk_text_iter_forward_visible_word_ends,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_visible_word_ends,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :visible_cursor_position || what === :visible_cursor_positions - bool(ccall((:gtk_text_iter_forward_visible_cursor_positions,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_visible_cursor_positions,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :visible_line || what === :visible_lines - bool(ccall((:gtk_text_iter_forward_visible_lines,libgtk),Cint, + Bool(ccall((:gtk_text_iter_forward_visible_lines,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) elseif what === :line_end || what === :line_ends count >= 0 || error("GtkTextIter cannot iterate line_ends backwards") for i = 1:count - if !bool(ccall((:gtk_text_iter_forward_visible_lines,libgtk),Cint, + if !Bool(ccall((:gtk_text_iter_forward_visible_lines,libgtk),Cint, (Ptr{GtkTextIter},Cint), iter, count)) return false end @@ -302,7 +310,7 @@ function splice!(text::GtkTextBuffer,index::GtkTextRange) (Ptr{GObject},Ptr{GtkTextIter},Ptr{GtkTextIter}),text,first(index),last(index)) text end -in(x::TI, r::GtkTextRange) = bool(ccall((:gtk_text_iter_in_range,libgtk),Cint, +in(x::TI, r::GtkTextRange) = Bool(ccall((:gtk_text_iter_in_range,libgtk),Cint, (Ptr{GtkTextIter},Ptr{GtkTextIter},Ptr{GtkTextIter}),mutable(x),first(r),last(r))) @@ -336,6 +344,11 @@ function splice!(text::GtkTextBuffer) (Ptr{GObject},Cint,Cint),text,false,true) text end +function place_cursor!(text::GtkTextBuffer,index::TI) + ccall((:gtk_text_buffer_place_cursor,libgtk),Void, + (Ptr{GObject},Ptr{GtkTextIter}),text,index) + text +end begin_user_action(buffer::GtkTextBuffer) = ccall((:gtk_text_buffer_begin_user_action,libgtk),Void,(Ptr{GObject},),buffer) @@ -389,7 +402,7 @@ function gtk_text_view_get_buffer(text::GtkTextView) end function gtk_text_view_get_editable(text::GtkTextView) # This is an internal function. Users should use text[:editable,Bool] instead - bool(ccall((:gtk_text_view_get_editable,libgtk),Cint,(Ptr{GObject},),text)) + Bool(ccall((:gtk_text_view_get_editable,libgtk),Cint,(Ptr{GObject},),text)) end function insert!(text::GtkTextView,index::TI,child::GtkWidget) index = mutable(index) @@ -401,13 +414,13 @@ function insert!(text::GtkTextView,index::TI,child::GtkWidget) end function insert!(text::GtkTextView,index::TI,str::AbstractString) - bool(ccall((:gtk_text_buffer_insert_interactive,libgtk),Cint, + Bool(ccall((:gtk_text_buffer_insert_interactive,libgtk),Cint, (Ptr{GObject},Ptr{GtkTextIter},Ptr{UInt8},Cint,Cint), gtk_text_view_get_buffer(text),mutable(index),bytestring(str),sizeof(str),gtk_text_view_get_editable(text))) text end function insert!(text::GtkTextView,str::AbstractString) - bool(ccall((:gtk_text_buffer_insert_interactive_at_cursor,libgtk),Cint, + Bool(ccall((:gtk_text_buffer_insert_interactive_at_cursor,libgtk),Cint, (Ptr{GObject},Ptr{UInt8},Cint,Cint), gtk_text_view_get_buffer(text),bytestring(str),sizeof(str),gtk_text_view_get_editable(text))) text @@ -429,7 +442,7 @@ end #### GtkTextMark #### visible(w::GtkTextMark) = - bool(ccall((:gtk_text_mark_get_visible,libgtk),Cint,(Ptr{GObject},),w)) + Bool(ccall((:gtk_text_mark_get_visible,libgtk),Cint,(Ptr{GObject},),w)) visible(w::GtkTextMark, state::Bool) = ccall((:gtk_text_mark_set_visible,libgtk),Void,(Ptr{GObject},Cint),w,state) show(w::GtkTextMark) = visible(w,true)