gtk3 3.0.9-x86-mingw32 → 3.1.0-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/gtk3/rb-gtk3-private.h +1 -0
- data/ext/gtk3/rb-gtk3-spin-button.c +85 -0
- data/ext/gtk3/rb-gtk3.c +3 -0
- data/lib/2.2/gtk3.so +0 -0
- data/lib/2.3/gtk3.so +0 -0
- data/lib/gtk3/deprecated.rb +0 -8
- data/lib/gtk3/loader.rb +1 -7
- data/lib/gtk3/tree-model.rb +2 -0
- data/sample/gtk-demo/TODO +10 -10
- data/sample/gtk-demo/assistant.rb +44 -39
- data/sample/gtk-demo/builder.rb +71 -50
- data/sample/gtk-demo/button_box.rb +39 -28
- data/sample/gtk-demo/clipboard.rb +139 -46
- data/sample/gtk-demo/colorsel.rb +50 -36
- data/sample/gtk-demo/css_accordion.rb +18 -17
- data/sample/gtk-demo/css_basics.rb +60 -47
- data/sample/gtk-demo/css_multiplebgs.rb +92 -71
- data/sample/gtk-demo/css_pixbufs.rb +61 -48
- data/sample/gtk-demo/css_shadows.rb +63 -50
- data/sample/gtk-demo/cursors.rb +95 -64
- data/sample/gtk-demo/dialog.rb +95 -78
- data/sample/gtk-demo/drawingarea.rb +138 -171
- data/sample/gtk-demo/editable_cells.rb +169 -130
- data/sample/gtk-demo/entry_buffer.rb +15 -13
- data/sample/gtk-demo/entry_completion.rb +22 -17
- data/sample/gtk-demo/expander.rb +39 -31
- data/sample/gtk-demo/filtermodel.rb +67 -63
- data/sample/gtk-demo/font_features.rb +91 -60
- data/sample/gtk-demo/glarea.rb +277 -0
- data/sample/gtk-demo/headerbar.rb +17 -15
- data/sample/gtk-demo/hypertext.rb +146 -167
- data/sample/gtk-demo/iconview.rb +132 -91
- data/sample/gtk-demo/iconview_edit.rb +49 -38
- data/sample/gtk-demo/infobar.rb +81 -62
- data/sample/gtk-demo/links.rb +35 -30
- data/sample/gtk-demo/list_store.rb +169 -114
- data/sample/gtk-demo/listbox.rb +183 -0
- data/sample/gtk-demo/main.rb +32 -21
- data/sample/gtk-demo/markup.rb +65 -52
- data/sample/gtk-demo/menus.rb +57 -58
- data/sample/gtk-demo/modelbutton.rb +11 -9
- data/sample/gtk-demo/modelbutton.ui +3 -0
- data/sample/gtk-demo/overlay.rb +39 -32
- data/sample/gtk-demo/overlay2.rb +68 -54
- data/sample/gtk-demo/panes.rb +56 -68
- data/sample/gtk-demo/pickers.rb +46 -45
- data/sample/gtk-demo/pixbufs.rb +27 -25
- data/sample/gtk-demo/popover.rb +70 -63
- data/sample/gtk-demo/printing.rb +94 -69
- data/sample/gtk-demo/revealer.rb +46 -38
- data/sample/gtk-demo/rotated_text.rb +75 -54
- data/sample/gtk-demo/scale.rb +10 -8
- data/sample/gtk-demo/search_entry.rb +195 -0
- data/sample/gtk-demo/search_entry2.rb +71 -59
- data/sample/gtk-demo/sidebar.rb +20 -19
- data/sample/gtk-demo/sizegroup.rb +36 -35
- data/sample/gtk-demo/spinbutton.rb +128 -0
- data/sample/gtk-demo/spinner.rb +55 -40
- data/sample/gtk-demo/stack.rb +11 -8
- data/sample/gtk-demo/textmask.rb +14 -13
- data/sample/gtk-demo/textscroll.rb +16 -12
- data/sample/gtk-demo/theming_style_classes.rb +14 -12
- data/sample/gtk-demo/transparent.rb +17 -13
- data/sample/misc/treemodelfilter.rb +1 -1
- metadata +24 -19
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Copyright (c) 2008- | 
| 1 | 
            +
            # Copyright (c) 2008-2016 Ruby-GNOME2 Project Team
         | 
| 2 2 | 
             
            # This program is licenced under the same licence as Ruby-GNOME2.
         | 
| 3 3 | 
             
            #
         | 
| 4 4 | 
             
            =begin
         | 
| @@ -8,20 +8,20 @@ Gtk::EntryBuffer provides the text content in a Gtk::Entry. | |
| 8 8 | 
             
            Applications can provide their own buffer implementation,
         | 
| 9 9 | 
             
            e.g. to provide secure handling for passwords in memory.
         | 
| 10 10 | 
             
            =end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
                window =  | 
| 15 | 
            -
                window. | 
| 16 | 
            -
                window. | 
| 17 | 
            -
                window.set_resizable(false)
         | 
| 11 | 
            +
            class EntryBufferDemo
         | 
| 12 | 
            +
              def initialize(main_window)
         | 
| 13 | 
            +
                @window = Gtk::Window.new(:toplevel)
         | 
| 14 | 
            +
                @window.screen = main_window.screen
         | 
| 15 | 
            +
                @window.title = "Entry Buffer"
         | 
| 16 | 
            +
                @window.resizable = false
         | 
| 18 17 |  | 
| 19 18 | 
             
                vbox = Gtk::Box.new(:vertical, 5)
         | 
| 20 | 
            -
                window.add(vbox)
         | 
| 19 | 
            +
                @window.add(vbox)
         | 
| 21 20 | 
             
                vbox.set_border_width(5)
         | 
| 22 21 |  | 
| 23 22 | 
             
                label = Gtk::Label.new
         | 
| 24 | 
            -
                 | 
| 23 | 
            +
                markup = "Entries share a buffer. Typing in one is reflected in the other."
         | 
| 24 | 
            +
                label.markup = markup
         | 
| 25 25 | 
             
                vbox.pack_start(label, :expand => false, :fill => false, :padding => 0)
         | 
| 26 26 |  | 
| 27 27 | 
             
                # Create the buffer that will be shared
         | 
| @@ -34,11 +34,13 @@ module EntryBufferDemo | |
| 34 34 | 
             
                # second entry
         | 
| 35 35 | 
             
                entry = Gtk::Entry.new(buffer)
         | 
| 36 36 | 
             
                vbox.pack_start(entry, :expand => false, :fill => false, :padding => 0)
         | 
| 37 | 
            +
              end
         | 
| 37 38 |  | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 39 | 
            +
              def run
         | 
| 40 | 
            +
                if !@window.visible?
         | 
| 41 | 
            +
                  @window.show_all
         | 
| 40 42 | 
             
                else
         | 
| 41 | 
            -
                  window.destroy
         | 
| 43 | 
            +
                  @window.destroy
         | 
| 42 44 | 
             
                end
         | 
| 43 45 | 
             
              end
         | 
| 44 46 | 
             
            end
         | 
| @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Copyright (c) 2015 Ruby-GNOME2 Project Team
         | 
| 1 | 
            +
            # Copyright (c) 2015-2016 Ruby-GNOME2 Project Team
         | 
| 2 2 | 
             
            # This program is licenced under the same licence as Ruby-GNOME2.
         | 
| 3 3 | 
             
            #
         | 
| 4 4 | 
             
            =begin
         | 
| @@ -7,19 +7,20 @@ | |
| 7 7 | 
             
            GtkEntryCompletion provides a mechanism for adding support for
         | 
| 8 8 | 
             
            completion in GtkEntry.
         | 
| 9 9 | 
             
            =end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              def  | 
| 12 | 
            -
                window = Gtk::Window.new(:toplevel)
         | 
| 13 | 
            -
                window.screen = main_window.screen
         | 
| 14 | 
            -
                window. | 
| 15 | 
            -
                window. | 
| 10 | 
            +
            class EntryCompletionDemo
         | 
| 11 | 
            +
              def initialize(main_window)
         | 
| 12 | 
            +
                @window = Gtk::Window.new(:toplevel)
         | 
| 13 | 
            +
                @window.screen = main_window.screen
         | 
| 14 | 
            +
                @window.title = "Entry Completion"
         | 
| 15 | 
            +
                @window.resizable = true
         | 
| 16 16 |  | 
| 17 17 | 
             
                vbox = Gtk::Box.new(:vertical, 5)
         | 
| 18 | 
            -
                window.add(vbox)
         | 
| 19 | 
            -
                vbox. | 
| 18 | 
            +
                @window.add(vbox)
         | 
| 19 | 
            +
                vbox.border_width = 5
         | 
| 20 20 |  | 
| 21 21 | 
             
                label = Gtk::Label.new
         | 
| 22 | 
            -
                 | 
| 22 | 
            +
                markup = "Completion demo, try writing <b>total</b> or <b>gnome</b> for example."
         | 
| 23 | 
            +
                label.markup = markup
         | 
| 23 24 | 
             
                vbox.pack_start(label, :expand => false, :fill => false, :padding => 0)
         | 
| 24 25 |  | 
| 25 26 | 
             
                entry = Gtk::Entry.new
         | 
| @@ -28,18 +29,22 @@ module EntryCompletionDemo | |
| 28 29 | 
             
                completion = Gtk::EntryCompletion.new
         | 
| 29 30 | 
             
                entry.completion = completion
         | 
| 30 31 |  | 
| 31 | 
            -
                completion. | 
| 32 | 
            -
                completion. | 
| 32 | 
            +
                completion.model = create_completion_model
         | 
| 33 | 
            +
                completion.text_column = 0
         | 
| 34 | 
            +
              end
         | 
| 33 35 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            +
              def run
         | 
| 37 | 
            +
                if !@window.visible?
         | 
| 38 | 
            +
                  @window.show_all
         | 
| 36 39 | 
             
                else
         | 
| 37 | 
            -
                  window.destroy
         | 
| 40 | 
            +
                  @window.destroy
         | 
| 38 41 | 
             
                end
         | 
| 39 | 
            -
                window
         | 
| 42 | 
            +
                @window
         | 
| 40 43 | 
             
              end
         | 
| 41 44 |  | 
| 42 | 
            -
               | 
| 45 | 
            +
              private
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              def create_completion_model
         | 
| 43 48 | 
             
                store = Gtk::ListStore.new(String)
         | 
| 44 49 | 
             
                %w(GNOME total totally).each do |word|
         | 
| 45 50 | 
             
                  iter = store.append
         | 
    
        data/sample/gtk-demo/expander.rb
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Copyright (c) 2015 Ruby-GNOME2 Project Team
         | 
| 1 | 
            +
            # Copyright (c) 2015-2016 Ruby-GNOME2 Project Team
         | 
| 2 2 | 
             
            # This program is licenced under the same licence as Ruby-GNOME2.
         | 
| 3 3 | 
             
            #
         | 
| 4 4 | 
             
            =begin
         | 
| @@ -9,22 +9,22 @@ This is also known as "disclosure triangle". | |
| 9 9 |  | 
| 10 10 | 
             
            This example also shows how to make the window resizable only if the expander is expanded.
         | 
| 11 11 | 
             
            =end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
              def  | 
| 12 | 
            +
            class ExpanderDemo
         | 
| 13 | 
            +
              def initialize(main_window)
         | 
| 14 14 | 
             
                toplevel = main_window.toplevel
         | 
| 15 15 | 
             
                message = "<big><b>Something went wrong</b></big>"
         | 
| 16 | 
            -
                window = Gtk::MessageDialog.new(:parent => toplevel,
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 16 | 
            +
                @window = Gtk::MessageDialog.new(:parent => toplevel,
         | 
| 17 | 
            +
                                                 :flags  => :destroy_with_parent,
         | 
| 18 | 
            +
                                                 :type   => :error,
         | 
| 19 | 
            +
                                                 :buttons_type => :close,
         | 
| 20 | 
            +
                                                 :message      => message)
         | 
| 21 21 |  | 
| 22 | 
            -
                window. | 
| 22 | 
            +
                @window.use_markup = true
         | 
| 23 23 |  | 
| 24 24 | 
             
                message = "Here are some more details but not the full story."
         | 
| 25 | 
            -
                window. | 
| 25 | 
            +
                @window.secondary_text = message
         | 
| 26 26 |  | 
| 27 | 
            -
                area = window.message_area
         | 
| 27 | 
            +
                area = @window.message_area
         | 
| 28 28 | 
             
                box = area.parent
         | 
| 29 29 | 
             
                box.parent.child_set_property(box, "expand", true)
         | 
| 30 30 | 
             
                box.parent.child_set_property(box, "fill", true)
         | 
| @@ -39,38 +39,46 @@ module ExpanderDemo | |
| 39 39 | 
             
                sw.set_shadow_type(:in)
         | 
| 40 40 | 
             
                sw.set_policy(:never, :automatic)
         | 
| 41 41 |  | 
| 42 | 
            -
                tv =  | 
| 43 | 
            -
                tv.set_editable(false)
         | 
| 44 | 
            -
                tv.set_wrap_mode(:word)
         | 
| 45 | 
            -
                tv.buffer.text = <<TEXT
         | 
| 46 | 
            -
            Finally, the full story with all details.
         | 
| 47 | 
            -
            And all the inside information, including
         | 
| 48 | 
            -
            error codes, etc etc. Pages of information,
         | 
| 49 | 
            -
            you might have to scroll down to read it all,
         | 
| 50 | 
            -
            or even resize the window - it works !
         | 
| 51 | 
            -
             | 
| 52 | 
            -
            A second paragraph will contain even more
         | 
| 53 | 
            -
            innuendo, just to make you scroll down or
         | 
| 54 | 
            -
            resize the window. Do it already !"
         | 
| 55 | 
            -
            TEXT
         | 
| 56 | 
            -
             | 
| 42 | 
            +
                tv = initialize_text_view
         | 
| 57 43 | 
             
                sw.add(tv)
         | 
| 58 44 | 
             
                expander.add(sw)
         | 
| 59 45 | 
             
                area.pack_end(expander, :expand => true, :fill => true, :padding => 0)
         | 
| 60 46 | 
             
                expander.show_all
         | 
| 61 47 |  | 
| 62 48 | 
             
                expander.signal_connect "notify::expanded" do
         | 
| 63 | 
            -
                  window. | 
| 49 | 
            +
                  @window.resizable = expander.expanded?
         | 
| 64 50 | 
             
                end
         | 
| 65 51 |  | 
| 66 | 
            -
                window.signal_connect "response" do |dialog, _response_id|
         | 
| 52 | 
            +
                @window.signal_connect "response" do |dialog, _response_id|
         | 
| 67 53 | 
             
                  dialog.destroy
         | 
| 68 54 | 
             
                end
         | 
| 55 | 
            +
              end
         | 
| 69 56 |  | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 57 | 
            +
              def run
         | 
| 58 | 
            +
                if !@window.visible?
         | 
| 59 | 
            +
                  @window.show_all
         | 
| 72 60 | 
             
                else
         | 
| 73 | 
            -
                  window.destroy
         | 
| 61 | 
            +
                  @window.destroy
         | 
| 74 62 | 
             
                end
         | 
| 75 63 | 
             
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              private
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              def initialize_text_view
         | 
| 68 | 
            +
                tv = Gtk::TextView.new
         | 
| 69 | 
            +
                tv.editable  = false
         | 
| 70 | 
            +
                tv.wrap_mode = :word
         | 
| 71 | 
            +
                tv.buffer.text = <<TEXT
         | 
| 72 | 
            +
            Finally, the full story with all details.
         | 
| 73 | 
            +
            And all the inside information, including
         | 
| 74 | 
            +
            error codes, etc etc. Pages of information,
         | 
| 75 | 
            +
            you might have to scroll down to read it all,
         | 
| 76 | 
            +
            or even resize the window - it works !
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            A second paragraph will contain even more
         | 
| 79 | 
            +
            innuendo, just to make you scroll down or
         | 
| 80 | 
            +
            resize the window. Do it already !"
         | 
| 81 | 
            +
            TEXT
         | 
| 82 | 
            +
                tv
         | 
| 83 | 
            +
              end
         | 
| 76 84 | 
             
            end
         | 
| @@ -8,64 +8,87 @@ | |
| 8 8 | 
             
             just to show a subset of the rows, but also to compute columns
         | 
| 9 9 | 
             
             that are not actually present in the underlying model.
         | 
| 10 10 | 
             
            =end
         | 
| 11 | 
            -
             | 
| 11 | 
            +
            class FiltermodelDemo
         | 
| 12 12 | 
             
              WIDTH_COLUMN = 0
         | 
| 13 13 | 
             
              HEIGHT_COLUMN = 1
         | 
| 14 14 | 
             
              AREA_COLUMN = 2
         | 
| 15 15 | 
             
              SQUARE_COLUMN = 3
         | 
| 16 16 |  | 
| 17 | 
            -
              def  | 
| 18 | 
            -
                 | 
| 19 | 
            -
                builder.connect_signals {}
         | 
| 17 | 
            +
              def initialize(main_window)
         | 
| 18 | 
            +
                initialize_builder
         | 
| 20 19 |  | 
| 21 | 
            -
                window = builder["window1"]
         | 
| 22 | 
            -
                window.screen = main_window.screen
         | 
| 20 | 
            +
                @window = @builder["window1"]
         | 
| 21 | 
            +
                @window.screen = main_window.screen
         | 
| 23 22 |  | 
| 24 | 
            -
                 | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 23 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn1",
         | 
| 24 | 
            +
                                                            "cellrenderertext1",
         | 
| 25 | 
            +
                                                            WIDTH_COLUMN)
         | 
| 26 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn2",
         | 
| 27 | 
            +
                                                            "cellrenderertext2",
         | 
| 28 | 
            +
                                                            HEIGHT_COLUMN)
         | 
| 30 29 |  | 
| 31 | 
            -
                 | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
                  num = current_iter[HEIGHT_COLUMN]
         | 
| 35 | 
            -
                  current_cell.text = num.to_s
         | 
| 36 | 
            -
                end
         | 
| 30 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn3",
         | 
| 31 | 
            +
                                                            "cellrenderertext3",
         | 
| 32 | 
            +
                                                            WIDTH_COLUMN)
         | 
| 37 33 |  | 
| 38 | 
            -
                 | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
                  num = current_iter[WIDTH_COLUMN]
         | 
| 42 | 
            -
                  current_cell.text = num.to_s
         | 
| 43 | 
            -
                end
         | 
| 34 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn4",
         | 
| 35 | 
            +
                                                            "cellrenderertext4",
         | 
| 36 | 
            +
                                                            HEIGHT_COLUMN)
         | 
| 44 37 |  | 
| 45 | 
            -
                 | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 38 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn5",
         | 
| 39 | 
            +
                                                            "cellrenderertext5",
         | 
| 40 | 
            +
                                                            AREA_COLUMN)
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                column = @builder["treeviewcolumn6"]
         | 
| 43 | 
            +
                cell = @builder["cellrendererpixbuf1"]
         | 
| 44 | 
            +
                column.add_attribute(cell, "visible", SQUARE_COLUMN)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                @store = @builder["liststore1"]
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                initialize_tree_model_filter_computed
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn7",
         | 
| 51 | 
            +
                                                            "cellrenderertext6",
         | 
| 52 | 
            +
                                                            WIDTH_COLUMN)
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                set_treeview_column_data_from_int_to_string("treeviewcolumn8",
         | 
| 55 | 
            +
                                                            "cellrenderertext7",
         | 
| 56 | 
            +
                                                            HEIGHT_COLUMN)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                initialize_tree_model_filter_selected
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              def run
         | 
| 62 | 
            +
                if !@window.visible?
         | 
| 63 | 
            +
                  @window.show_all
         | 
| 64 | 
            +
                else
         | 
| 65 | 
            +
                  @window.destroy
         | 
| 50 66 | 
             
                end
         | 
| 67 | 
            +
                @window
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              private
         | 
| 51 71 |  | 
| 52 | 
            -
             | 
| 53 | 
            -
                 | 
| 54 | 
            -
                 | 
| 55 | 
            -
             | 
| 72 | 
            +
              def initialize_builder
         | 
| 73 | 
            +
                @builder = Gtk::Builder.new(:resource => "/filtermodel/filtermodel.ui")
         | 
| 74 | 
            +
                @builder.connect_signals {}
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              def set_treeview_column_data_from_int_to_string(column_name, cell_name, col_index)
         | 
| 78 | 
            +
                column = @builder[column_name]
         | 
| 79 | 
            +
                cell = @builder[cell_name]
         | 
| 80 | 
            +
                column.set_cell_data_func(cell) do |_col, current_cell, _current_model, current_iter|
         | 
| 81 | 
            +
                  num = current_iter[col_index]
         | 
| 56 82 | 
             
                  current_cell.text = num.to_s
         | 
| 57 83 | 
             
                end
         | 
| 84 | 
            +
              end
         | 
| 58 85 |  | 
| 59 | 
            -
             | 
| 60 | 
            -
                 | 
| 61 | 
            -
                column.add_attribute(cell, "visible", SQUARE_COLUMN)
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                store = builder["liststore1"]
         | 
| 64 | 
            -
                tree = builder["treeview2"]
         | 
| 86 | 
            +
              def initialize_tree_model_filter_computed
         | 
| 87 | 
            +
                tree = @builder["treeview2"]
         | 
| 65 88 |  | 
| 66 89 | 
             
                types = [Integer, Integer, Integer, TrueClass]
         | 
| 67 90 |  | 
| 68 | 
            -
                model =  | 
| 91 | 
            +
                model = @store.create_filter
         | 
| 69 92 | 
             
                model.set_modify_func(*types) do |filter_model, filter_iter, filter_column|
         | 
| 70 93 | 
             
                  value = nil
         | 
| 71 94 | 
             
                  child_iter = filter_model.convert_iter_to_child_iter(filter_iter)
         | 
| @@ -85,35 +108,16 @@ module FiltermodelDemo | |
| 85 108 | 
             
                end
         | 
| 86 109 |  | 
| 87 110 | 
             
                tree.model = model
         | 
| 111 | 
            +
              end
         | 
| 88 112 |  | 
| 89 | 
            -
             | 
| 90 | 
            -
                 | 
| 91 | 
            -
                column.set_cell_data_func(cell) do |_column, current_cell, _current_model, current_iter|
         | 
| 92 | 
            -
                  num = current_iter[WIDTH_COLUMN]
         | 
| 93 | 
            -
                  current_cell.text = num.to_s
         | 
| 94 | 
            -
                end
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                column = builder["treeviewcolumn8"]
         | 
| 97 | 
            -
                cell = builder["cellrenderertext7"]
         | 
| 98 | 
            -
                column.set_cell_data_func(cell) do |_column, current_cell, _current_model, current_iter|
         | 
| 99 | 
            -
                  num = current_iter[HEIGHT_COLUMN]
         | 
| 100 | 
            -
                  current_cell.text = num.to_s
         | 
| 101 | 
            -
                end
         | 
| 102 | 
            -
             | 
| 103 | 
            -
                tree = builder["treeview3"]
         | 
| 113 | 
            +
              def initialize_tree_model_filter_selected
         | 
| 114 | 
            +
                tree = @builder["treeview3"]
         | 
| 104 115 |  | 
| 105 | 
            -
                model =  | 
| 116 | 
            +
                model = @store.create_filter
         | 
| 106 117 | 
             
                model.set_visible_func do |_current_model, current_iter|
         | 
| 107 118 | 
             
                  current_iter[WIDTH_COLUMN] < 10
         | 
| 108 119 | 
             
                end
         | 
| 109 120 |  | 
| 110 121 | 
             
                tree.model = model
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                if !window.visible?
         | 
| 113 | 
            -
                  window.show_all
         | 
| 114 | 
            -
                else
         | 
| 115 | 
            -
                  window.destroy
         | 
| 116 | 
            -
                end
         | 
| 117 | 
            -
                window
         | 
| 118 122 | 
             
              end
         | 
| 119 123 | 
             
            end
         | 
| @@ -8,80 +8,115 @@ | |
| 8 8 | 
             
             Pango attributes. The attributes can be used manually or
         | 
| 9 9 | 
             
             via Pango markup.
         | 
| 10 10 | 
             
            =end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
              def  | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
                 | 
| 22 | 
            -
             | 
| 23 | 
            -
                 | 
| 24 | 
            -
             | 
| 11 | 
            +
            class FontFeaturesDemo
         | 
| 12 | 
            +
              def initialize(_main_window)
         | 
| 13 | 
            +
                initialize_builder
         | 
| 14 | 
            +
                initialize_widgets
         | 
| 15 | 
            +
                builder_add_callback_symbols
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                update(@toggle, @entry, @font, @settings, @label)
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def run
         | 
| 21 | 
            +
                if !@window.visible?
         | 
| 22 | 
            +
                  @window.show_all
         | 
| 23 | 
            +
                else
         | 
| 24 | 
            +
                  @window.destroy
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                @window
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              private
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              def initialize_builder
         | 
| 32 | 
            +
                @builder = Gtk::Builder.new(:resource => "/font_features/font-features.ui")
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def initialize_widgets
         | 
| 36 | 
            +
                @window = @builder["window"]
         | 
| 37 | 
            +
                @label = @builder["label"]
         | 
| 38 | 
            +
                @settings = @builder["settings"]
         | 
| 39 | 
            +
                @resetbutton = @builder["reset"]
         | 
| 40 | 
            +
                @font = @builder["font"]
         | 
| 41 | 
            +
                @numcasedefault = @builder["numcasedefault"]
         | 
| 42 | 
            +
                @numspacedefault = @builder["numspacedefault"]
         | 
| 43 | 
            +
                @fractiondefault = @builder["fractiondefault"]
         | 
| 44 | 
            +
                @stack = @builder["stack"]
         | 
| 45 | 
            +
                @entry = @builder["entry"]
         | 
| 46 | 
            +
                @toggle = []
         | 
| 25 47 |  | 
| 26 48 | 
             
                %w(kern liga dlig hlig clig smcp c2sc lnum onum pnum tnum frac afrc zero
         | 
| 27 49 | 
             
                   nalt swsh calt hist salt ss01 ss02 ss03 ss04 ss05).each do |name|
         | 
| 28 | 
            -
                  toggle << builder[name]
         | 
| 50 | 
            +
                  @toggle << @builder[name]
         | 
| 29 51 | 
             
                end
         | 
| 30 | 
            -
                text = nil
         | 
| 52 | 
            +
                @text = nil
         | 
| 53 | 
            +
              end
         | 
| 31 54 |  | 
| 32 | 
            -
             | 
| 55 | 
            +
              def builder_add_callback_symbols
         | 
| 56 | 
            +
                @builder.connect_signals do |name|
         | 
| 33 57 | 
             
                  case name
         | 
| 34 58 | 
             
                  when "reset"
         | 
| 35 | 
            -
                     | 
| 36 | 
            -
                      numcasedefault.active = true
         | 
| 37 | 
            -
                      numspacedefault.active = true
         | 
| 38 | 
            -
                      fractiondefault.active = true
         | 
| 39 | 
            -
                      toggle.each do |widget|
         | 
| 40 | 
            -
                        if widget.class != Gtk::RadioButton
         | 
| 41 | 
            -
                          widget.active = false
         | 
| 42 | 
            -
                          widget.sensitive = false
         | 
| 43 | 
            -
                        end
         | 
| 44 | 
            -
                      end
         | 
| 45 | 
            -
                    end
         | 
| 59 | 
            +
                    reset_callback
         | 
| 46 60 | 
             
                  when "update"
         | 
| 47 | 
            -
                     | 
| 48 | 
            -
                      update(toggle, entry, font, settings, label)
         | 
| 49 | 
            -
                    end
         | 
| 61 | 
            +
                    update_callback
         | 
| 50 62 | 
             
                  when "switch_to_entry"
         | 
| 51 | 
            -
                     | 
| 52 | 
            -
                      text = entry.text
         | 
| 53 | 
            -
                      stack.visible_child_name = "entry"
         | 
| 54 | 
            -
                    end
         | 
| 63 | 
            +
                    switch_to_entry_callback
         | 
| 55 64 | 
             
                  when "switch_to_label"
         | 
| 56 | 
            -
                     | 
| 57 | 
            -
                      text = nil
         | 
| 58 | 
            -
                      stack.set_visible_child_name("label")
         | 
| 59 | 
            -
                      update(toggle, entry, font, settings, label)
         | 
| 60 | 
            -
                    end
         | 
| 65 | 
            +
                    switch_to_label_callback
         | 
| 61 66 | 
             
                  when "entry_key_press"
         | 
| 62 | 
            -
                     | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 67 | 
            +
                    entry_key_press_callback
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              def reset_callback
         | 
| 73 | 
            +
                proc do
         | 
| 74 | 
            +
                  @numcasedefault.active = true
         | 
| 75 | 
            +
                  @numspacedefault.active = true
         | 
| 76 | 
            +
                  @fractiondefault.active = true
         | 
| 77 | 
            +
                  @toggle.each do |widget|
         | 
| 78 | 
            +
                    if widget.class != Gtk::RadioButton
         | 
| 79 | 
            +
                      widget.active = false
         | 
| 80 | 
            +
                      widget.sensitive = false
         | 
| 70 81 | 
             
                    end
         | 
| 71 82 | 
             
                  end
         | 
| 72 83 | 
             
                end
         | 
| 84 | 
            +
              end
         | 
| 73 85 |  | 
| 74 | 
            -
             | 
| 86 | 
            +
              def update_callback
         | 
| 87 | 
            +
                proc do
         | 
| 88 | 
            +
                  update(@toggle, @entry, @font, @settings, @label)
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 75 91 |  | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
                   | 
| 92 | 
            +
              def switch_to_entry_callback
         | 
| 93 | 
            +
                proc do
         | 
| 94 | 
            +
                  @text = @entry.text
         | 
| 95 | 
            +
                  @stack.visible_child_name = "entry"
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
              def switch_to_label_callback
         | 
| 100 | 
            +
                proc do
         | 
| 101 | 
            +
                  @text = nil
         | 
| 102 | 
            +
                  @stack.set_visible_child_name("label")
         | 
| 103 | 
            +
                  update(@toggle, @entry, @font, @settings, @label)
         | 
| 104 | 
            +
                end
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              def entry_key_press_callback
         | 
| 108 | 
            +
                proc do |_entry, event|
         | 
| 109 | 
            +
                  if event.keyval == Gdk::Keyval::KEY_Escape
         | 
| 110 | 
            +
                    @entry.text = @text
         | 
| 111 | 
            +
                    @text = nil
         | 
| 112 | 
            +
                    @stack.set_visible_child_name("label")
         | 
| 113 | 
            +
                    update(@toggle, @entry, @font, @settings, @label)
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                  Gdk::Event::PROPAGATE
         | 
| 80 116 | 
             
                end
         | 
| 81 | 
            -
                window
         | 
| 82 117 | 
             
              end
         | 
| 83 118 |  | 
| 84 | 
            -
              def  | 
| 119 | 
            +
              def update(toggle, entry, font, settings, label)
         | 
| 85 120 | 
             
                text = entry.text
         | 
| 86 121 | 
             
                font_desc = font.font
         | 
| 87 122 | 
             
                s = ""
         | 
| @@ -100,11 +135,7 @@ module FontFeaturesDemo | |
| 100 135 | 
             
                  else
         | 
| 101 136 | 
             
                    s += ", " if has_feature
         | 
| 102 137 | 
             
                    s += widget.builder_name
         | 
| 103 | 
            -
                     | 
| 104 | 
            -
                      s += " 1"
         | 
| 105 | 
            -
                    else
         | 
| 106 | 
            -
                      s += " 0"
         | 
| 107 | 
            -
                    end
         | 
| 138 | 
            +
                    s += widget.active? ? " 1" : " 0"
         | 
| 108 139 | 
             
                    has_feature = true
         | 
| 109 140 | 
             
                  end
         | 
| 110 141 | 
             
                end
         |