gtk3 3.0.8-x86-mingw32 → 3.0.9-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.c +17 -0
- data/lib/2.2/gtk3.so +0 -0
- data/lib/2.3/gtk3.so +0 -0
- data/lib/gtk3/container.rb +0 -7
- data/lib/gtk3/deprecated.rb +3 -3
- data/lib/gtk3/image.rb +7 -7
- data/lib/gtk3/loader.rb +11 -5
- data/lib/gtk3/text-buffer.rb +33 -12
- data/lib/gtk3/text-view.rb +53 -0
- data/lib/gtk3/tree-model.rb +5 -0
- data/lib/gtk3/tree-view.rb +25 -0
- data/lib/gtk3/widget.rb +0 -5
- data/sample/gtk-demo/TODO +10 -6
- data/sample/gtk-demo/application.ui +93 -70
- data/sample/gtk-demo/appmenu.ui +19 -0
- data/sample/gtk-demo/assistant.rb +1 -0
- data/sample/gtk-demo/css_accordion.css +8 -8
- data/sample/gtk-demo/css_accordion.rb +2 -2
- data/sample/gtk-demo/css_basics.css +1 -1
- data/sample/gtk-demo/css_basics.rb +2 -2
- data/sample/gtk-demo/css_multiplebgs.rb +2 -2
- data/sample/gtk-demo/css_pixbufs.css +2 -2
- data/sample/gtk-demo/css_pixbufs.rb +2 -2
- data/sample/gtk-demo/css_shadows.css +5 -5
- data/sample/gtk-demo/css_shadows.rb +2 -2
- data/sample/gtk-demo/cssview.css +5 -5
- data/sample/gtk-demo/data/16x16/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/16x16/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/22x22/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/22x22/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/24x24/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/24x24/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/256x256/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/256x256/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/32x32/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/32x32/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/48x48/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/48x48/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/512x512/gtk3-demo-symbolic.symbolic.png +0 -0
- data/sample/gtk-demo/data/512x512/gtk3-demo.png +0 -0
- data/sample/gtk-demo/data/source.svg +2886 -0
- data/sample/gtk-demo/data/symbolic-source.svg +29 -0
- data/sample/gtk-demo/demo.gresource.xml +16 -5
- data/sample/gtk-demo/demo.ui +1 -0
- data/sample/gtk-demo/font_features.rb +1 -1
- data/sample/gtk-demo/main.rb +2 -2
- data/sample/gtk-demo/main.ui +18 -36
- data/sample/gtk-demo/markup.rb +53 -8
- data/sample/gtk-demo/markup.txt +2 -2
- data/sample/gtk-demo/org.gtk.Demo.gschema.xml +9 -0
- data/sample/gtk-demo/pixbufs.rb +105 -145
- data/sample/gtk-demo/reset.css +1 -58
- data/sample/gtk-demo/rotated_text.rb +119 -55
- data/sample/gtk-demo/shortcuts-boxes.ui +167 -0
- data/sample/gtk-demo/shortcuts-builder.ui +547 -0
- data/sample/gtk-demo/shortcuts-clocks.ui +166 -0
- data/sample/gtk-demo/shortcuts-gedit.ui +172 -0
- data/sample/gtk-demo/shortcuts.ui +65 -0
- data/sample/gtk-demo/stack.ui +5 -5
- data/sample/gtk-demo/textscroll.rb +106 -0
- data/sample/gtk-demo/theming.ui +58 -22
- data/sample/gtk-demo/theming_style_classes.rb +5 -4
- data/sample/gtk-demo/transparent.rb +143 -0
- data/sample/misc/aboutdialog.rb +1 -1
- data/sample/misc/bindings.rb +36 -15
- data/sample/misc/combobox.rb +1 -1
- data/sample/misc/dnd.rb +3 -3
- data/sample/misc/icons-theme-viewer.rb +1 -1
- data/sample/misc/iconview.rb +2 -2
- data/sample/misc/textbuffer-serialize.rb +18 -14
- data/sample/misc/to-drawable.rb +2 -2
- data/sample/misc/tooltips.rb +1 -0
- data/sample/misc/treeview.rb +1 -1
- data/sample/tutorial/README.md +18 -18
- data/test/test-gtk-clipboard.rb +1 -1
- data/test/test-gtk-combo-box.rb +2 -2
- data/test/test-gtk-icon-view.rb +2 -2
- data/test/test-gtk-image.rb +1 -1
- data/test/test-gtk-list-store.rb +9 -3
- data/test/test-gtk-text-view.rb +64 -0
- data/test/test-gtk-tree-path.rb +1 -3
- data/test/test-gtk-tree-view.rb +97 -0
- data/test/test-gtk-window.rb +2 -2
- data/test/test-pango-context.rb +56 -0
- metadata +46 -19
data/sample/tutorial/README.md
CHANGED
@@ -16,7 +16,7 @@ Here is the most basic example that illustrate the principles of widget hierarch
|
|
16
16
|
require "gtk3"
|
17
17
|
|
18
18
|
window = Gtk::Window.new("First example")
|
19
|
-
window.
|
19
|
+
window.set_size_request(400, 400)
|
20
20
|
window.set_border_width(10)
|
21
21
|
|
22
22
|
button = Gtk::Button.new(:label => "Say hello")
|
@@ -157,7 +157,7 @@ app.signal_connect "activate" do |application|
|
|
157
157
|
window.set_title("Window")
|
158
158
|
window.set_border_width(10)
|
159
159
|
|
160
|
-
# Here we construct the container that is going pack our buttons
|
160
|
+
# Here we construct the container that is going pack our buttons
|
161
161
|
grid = Gtk::Grid.new
|
162
162
|
|
163
163
|
# Pack the container in the window
|
@@ -281,7 +281,7 @@ Here is the "builder.ui" file that describes the interface:
|
|
281
281
|
The usage of the `Gtk::Builder` is really easy, we just create an instance from the
|
282
282
|
file "builder.ui" with `Gtk::Builder.new(:file => builder_file)`. Then you can access every widget or part of the interface thanks to its name: `window = builder.get_object("window")`. Note that `Gtk::Builder` can also be used to construct objects that are not widgets, such as tree models, adjustments, etc.
|
283
283
|
|
284
|
-
The XML definition of the interface can be loaded from a file, a string or a path in a gresource binary. More informations related to this XML definition can be found [here](https://developer.gnome.org/gtk3/stable/GtkBuilder.html#BUILDER-UI). Those files are generally built with [glade](https://glade.gnome.org/).
|
284
|
+
The XML definition of the interface can be loaded from a file, a string or a path in a gresource binary. More informations related to this XML definition can be found [here](https://developer.gnome.org/gtk3/stable/GtkBuilder.html#BUILDER-UI). Those files are generally built with [glade](https://glade.gnome.org/).
|
285
285
|
|
286
286
|
|
287
287
|
## Building applications
|
@@ -296,7 +296,7 @@ require "gtk3"
|
|
296
296
|
class ExampleAppWindow < Gtk::ApplicationWindow
|
297
297
|
|
298
298
|
def open(file)
|
299
|
-
|
299
|
+
|
300
300
|
end
|
301
301
|
end
|
302
302
|
|
@@ -318,7 +318,7 @@ class ExampleApp < Gtk::Application
|
|
318
318
|
end
|
319
319
|
|
320
320
|
files.each { |file| win.open(file) }
|
321
|
-
|
321
|
+
|
322
322
|
win.present
|
323
323
|
end
|
324
324
|
end
|
@@ -393,7 +393,7 @@ Here is the "window.ui" file that contains the template of the window:
|
|
393
393
|
```
|
394
394
|
Unlike regular interface descriptions, in template XML descriptions, a`<template>` tag is expected as a direct child of the toplevel `<interface>` tag. Yhe `<template>` tag must specify the "*class*" attribute which must be the class name of the widget. Optionally, the "*parent*" attribute may be specified to indicate the direct parent class (superclass).
|
395
395
|
|
396
|
-
More informations can be found in the part [building composite widgets from template XML](https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget.description) of the `Gtk::Widget` documentation.
|
396
|
+
More informations can be found in the part [building composite widgets from template XML](https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget.description) of the `Gtk::Widget` documentation.
|
397
397
|
|
398
398
|
#### Link a template to a custom class widget.
|
399
399
|
|
@@ -411,7 +411,7 @@ class ExampleAppWindow < Gtk::ApplicationWindow
|
|
411
411
|
end
|
412
412
|
|
413
413
|
def open(file)
|
414
|
-
|
414
|
+
|
415
415
|
end
|
416
416
|
end
|
417
417
|
```
|
@@ -482,7 +482,7 @@ This new way to access the stack widget is used in the following code. We have p
|
|
482
482
|
```ruby
|
483
483
|
class ExampleAppWindow < Gtk::ApplicationWindow
|
484
484
|
def open(file)
|
485
|
-
|
485
|
+
|
486
486
|
end
|
487
487
|
end
|
488
488
|
|
@@ -500,7 +500,7 @@ class ExampleApp < Gtk::Application
|
|
500
500
|
end
|
501
501
|
|
502
502
|
files.each { |file| win.open(file) }
|
503
|
-
|
503
|
+
|
504
504
|
win.present
|
505
505
|
end
|
506
506
|
end
|
@@ -526,14 +526,14 @@ def open(file)
|
|
526
526
|
view.buffer.text = stream.read
|
527
527
|
end
|
528
528
|
```
|
529
|
-
Each file is opened and loaded in a `Gtk::TextView` with
|
529
|
+
Each file is opened and loaded in a `Gtk::TextView` with
|
530
530
|
|
531
531
|
```ruby
|
532
532
|
stream = file.read
|
533
533
|
view.buffer.text = stream.read
|
534
534
|
```
|
535
535
|
|
536
|
-
We get the basename, of the file in argument, that will be used as title for each tab of the stack widget:
|
536
|
+
We get the basename, of the file in argument, that will be used as title for each tab of the stack widget:
|
537
537
|
|
538
538
|
```
|
539
539
|
stack.add_titled(scrolled, basename, basename)
|
@@ -611,7 +611,7 @@ application.add_action(action)
|
|
611
611
|
|
612
612
|
#### Add accelerators for action.
|
613
613
|
|
614
|
-
An accelerator is just a keys combination that acts as a shortcut for an action.
|
614
|
+
An accelerator is just a keys combination that acts as a shortcut for an action.
|
615
615
|
|
616
616
|
```ruby
|
617
617
|
quit_accels = ["<Ctrl>Q"]
|
@@ -655,7 +655,7 @@ We are going to use `Gio::Settings` to store our preferences. `Gio::Settings` re
|
|
655
655
|
</schemalist>
|
656
656
|
```
|
657
657
|
|
658
|
-
Before we can make use of this schema in our application, we need to compile it into the binary form that `Gio::Settings` expects.
|
658
|
+
Before we can make use of this schema in our application, we need to compile it into the binary form that `Gio::Settings` expects.
|
659
659
|
|
660
660
|
```ruby
|
661
661
|
system("glib-compile-schemas", data_path)
|
@@ -670,12 +670,12 @@ Gio::SettingsSchemaSource.new(data_path,
|
|
670
670
|
false)
|
671
671
|
|
672
672
|
```
|
673
|
-
This is the corresponding method to the function [g_settings_schema_source_new_from_directory](https://developer.gnome.org/gio/stable/gio-GSettingsSchema-GSettingsSchemaSource.html#g-settings-schema-source-new-from-directory).
|
673
|
+
This is the corresponding method to the function [g_settings_schema_source_new_from_directory](https://developer.gnome.org/gio/stable/gio-GSettingsSchema-GSettingsSchemaSource.html#g-settings-schema-source-new-from-directory).
|
674
674
|
|
675
675
|
As an alternative, our schema can just be loaded by using the `GSETTINGS_SCHEMA_DIR` environment variable.
|
676
676
|
|
677
677
|
```ruby
|
678
|
-
ENV["GSETTINGS_SCHEMA_DIR"] = data_path
|
678
|
+
ENV["GSETTINGS_SCHEMA_DIR"] = data_path
|
679
679
|
```
|
680
680
|
More informations on the use of gschemas can be found [here](https://developer.gnome.org/gio/stable/gio-GSettingsSchema-GSettingsSchemaSource.html)
|
681
681
|
|
@@ -842,11 +842,11 @@ def open(file)
|
|
842
842
|
stream = file.read
|
843
843
|
buffer = view.buffer
|
844
844
|
buffer.text = stream.read
|
845
|
-
tag = buffer.create_tag()
|
845
|
+
tag = buffer.create_tag()
|
846
846
|
@settings.bind("font", tag, "font", Gio::SettingsBindFlags::DEFAULT)
|
847
847
|
buffer.apply_tag(tag, buffer.start_iter, buffer.end_iter)
|
848
848
|
end
|
849
|
-
```
|
849
|
+
```
|
850
850
|
|
851
851
|
### Adding a search bar
|
852
852
|
https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.10
|
@@ -1297,4 +1297,4 @@ Our application already uses a `Gtk::HeaderBar`, but so far it still gets a 'nor
|
|
1297
1297
|
</interface>
|
1298
1298
|
```
|
1299
1299
|
|
1300
|
-
A small extra bonus of using a header bar is that we get a fallback application menu for free.
|
1300
|
+
A small extra bonus of using a header bar is that we get a fallback application menu for free.
|
data/test/test-gtk-clipboard.rb
CHANGED
@@ -66,7 +66,7 @@ class TestGtkClipboard < Test::Unit::TestCase
|
|
66
66
|
received_image = image
|
67
67
|
loop.quit
|
68
68
|
end
|
69
|
-
image =
|
69
|
+
image = GdkPixbuf::Pixbuf.new(:file => fixture_path("gnome-logo-icon.png"))
|
70
70
|
@clipboard.image = image
|
71
71
|
loop.run
|
72
72
|
|
data/test/test-gtk-combo-box.rb
CHANGED
@@ -27,7 +27,7 @@ class TestGtkComboBox < Test::Unit::TestCase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
test ":model" do
|
30
|
-
model = Gtk::ListStore.new(
|
30
|
+
model = Gtk::ListStore.new(GdkPixbuf::Pixbuf, String)
|
31
31
|
combo_box = Gtk::ComboBox.new(:entry => true, :model => model)
|
32
32
|
assert do
|
33
33
|
combo_box.has_entry?
|
@@ -55,7 +55,7 @@ class TestGtkComboBox < Test::Unit::TestCase
|
|
55
55
|
end
|
56
56
|
|
57
57
|
test ":model" do
|
58
|
-
model = Gtk::ListStore.new(
|
58
|
+
model = Gtk::ListStore.new(GdkPixbuf::Pixbuf, String)
|
59
59
|
combo_box = Gtk::ComboBox.new(:model => model)
|
60
60
|
assert do
|
61
61
|
not combo_box.has_entry?
|
data/test/test-gtk-icon-view.rb
CHANGED
@@ -41,7 +41,7 @@ class TestGtkIconView < Test::Unit::TestCase
|
|
41
41
|
class TestGetCellRect < self
|
42
42
|
def setup
|
43
43
|
only_gtk_version(3, 6, 0)
|
44
|
-
model = Gtk::ListStore.new(String,
|
44
|
+
model = Gtk::ListStore.new(String, GdkPixbuf::Pixbuf)
|
45
45
|
iter = model.append
|
46
46
|
model.set_values(iter, ["label", nil])
|
47
47
|
@path = iter.path
|
@@ -53,7 +53,7 @@ class TestGtkIconView < Test::Unit::TestCase
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def test_not_found
|
56
|
-
indices
|
56
|
+
indices = @path.indices
|
57
57
|
not_found_path = Gtk::TreePath.new
|
58
58
|
not_found_path.append_index(indices.last + 1)
|
59
59
|
assert_nil(@icon_view.get_cell_rect(not_found_path))
|
data/test/test-gtk-image.rb
CHANGED
@@ -40,13 +40,13 @@ class TestGtkImage < Test::Unit::TestCase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
test "resource" do
|
43
|
+
only_gtk_version(3, 18, 0)
|
43
44
|
resource = Gio::Resource.load(fixture_path("image.gresource"))
|
44
45
|
Gio::Resources.register(resource)
|
45
46
|
begin
|
46
47
|
resource_path = "/org/ruby/gnome/gnome-logo-icon.png"
|
47
48
|
image = Gtk::Image.new(:resource => resource_path,
|
48
49
|
:size => :dialog)
|
49
|
-
omit("GTK+ 3.16 doesn't support getting resource path. See GitHub#461.")
|
50
50
|
assert_equal(resource_path,
|
51
51
|
image.resource)
|
52
52
|
ensure
|
data/test/test-gtk-list-store.rb
CHANGED
@@ -194,20 +194,26 @@ class TestGtkListStore < Test::Unit::TestCase
|
|
194
194
|
test "iter" do
|
195
195
|
GC.start
|
196
196
|
n_iterators = count_objects(Gtk::TreeIter)
|
197
|
-
|
197
|
+
n_items = 50
|
198
|
+
n_iterators_created = 100
|
199
|
+
n_iterators_for_remove = 1
|
200
|
+
|
201
|
+
n_items.times do |i|
|
198
202
|
iter = @store.append
|
199
203
|
iter[ID] = i
|
200
204
|
iter[NAME] = i.to_s
|
201
205
|
end
|
202
|
-
|
206
|
+
n_iterators_created.times do
|
203
207
|
@store.iter_first
|
204
208
|
end
|
205
209
|
iter = @store.iter_first
|
206
210
|
while @store.remove(iter); end
|
207
211
|
assert_equal(0, @store.to_enum(:each).to_a.size)
|
212
|
+
|
208
213
|
GC.start
|
209
214
|
assert do
|
210
|
-
count_objects(Gtk::TreeIter)
|
215
|
+
count_objects(Gtk::TreeIter) <
|
216
|
+
(n_iterators + n_items + n_iterators_created + n_iterators_for_remove)
|
211
217
|
end
|
212
218
|
end
|
213
219
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Copyright (C) 2016 Ruby-GNOME2 Project Team
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
class TestGtkTextView < Test::Unit::TestCase
|
18
|
+
include GtkTestUtils
|
19
|
+
|
20
|
+
sub_test_case "instance methods" do
|
21
|
+
def setup
|
22
|
+
only_gtk_version(3, 14)
|
23
|
+
@text_buffer = Gtk::TextBuffer.new
|
24
|
+
@text_buffer.text = "Hello"
|
25
|
+
@text_view = Gtk::TextView.new(@text_buffer)
|
26
|
+
end
|
27
|
+
|
28
|
+
sub_test_case "#get_iter_at" do
|
29
|
+
test ":location" do
|
30
|
+
iter = @text_view.get_iter_at(:location => [0, 0])
|
31
|
+
assert_equal("H", iter.char)
|
32
|
+
end
|
33
|
+
|
34
|
+
test ":position" do
|
35
|
+
iter, trailing = @text_view.get_iter_at(:position => [0, 0])
|
36
|
+
assert_equal(["H", 0],
|
37
|
+
[iter.char, trailing])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
sub_test_case "#get_iter_at_location" do
|
42
|
+
test "found" do
|
43
|
+
iter = @text_view.get_iter_at_location(0, 0)
|
44
|
+
assert_equal("H", iter.char)
|
45
|
+
end
|
46
|
+
|
47
|
+
test "not found" do
|
48
|
+
assert_nil(@text_view.get_iter_at_location(100, 0))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
sub_test_case "#get_iter_at_position" do
|
53
|
+
test "found" do
|
54
|
+
iter, trailing = @text_view.get_iter_at_position(0, 0)
|
55
|
+
assert_equal(["H", 0],
|
56
|
+
[iter.char, trailing])
|
57
|
+
end
|
58
|
+
|
59
|
+
test "not found" do
|
60
|
+
assert_nil(@text_view.get_iter_at_position(100, 0))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/test/test-gtk-tree-path.rb
CHANGED
data/test/test-gtk-tree-view.rb
CHANGED
@@ -87,6 +87,67 @@ class TestGtkTreeView < Test::Unit::TestCase
|
|
87
87
|
normalized_data)
|
88
88
|
end
|
89
89
|
|
90
|
+
sub_test_case "#expand_row" do
|
91
|
+
setup do
|
92
|
+
@parent = @store.append(nil)
|
93
|
+
@parent[0] = "parent"
|
94
|
+
@child = @store.append(@parent)
|
95
|
+
@child[0] = "child"
|
96
|
+
@grand_child = @store.append(@child)
|
97
|
+
@grand_child[0] = "grand child"
|
98
|
+
end
|
99
|
+
|
100
|
+
test "default" do
|
101
|
+
@view.expand_row(@parent.path)
|
102
|
+
assert do
|
103
|
+
@view.row_expanded?(@parent.path)
|
104
|
+
end
|
105
|
+
assert do
|
106
|
+
@view.row_expanded?(@child.path)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
test "true" do
|
111
|
+
@view.expand_row(@parent.path, true)
|
112
|
+
assert do
|
113
|
+
@view.row_expanded?(@parent.path)
|
114
|
+
end
|
115
|
+
assert do
|
116
|
+
@view.row_expanded?(@child.path)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
test "false" do
|
121
|
+
@view.expand_row(@parent.path, false)
|
122
|
+
assert do
|
123
|
+
@view.row_expanded?(@parent.path)
|
124
|
+
end
|
125
|
+
assert do
|
126
|
+
not @view.row_expanded?(@child.path)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
test ":open_all => true" do
|
131
|
+
@view.expand_row(@parent.path, :open_all => true)
|
132
|
+
assert do
|
133
|
+
@view.row_expanded?(@parent.path)
|
134
|
+
end
|
135
|
+
assert do
|
136
|
+
@view.row_expanded?(@child.path)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
test ":open_all => false" do
|
141
|
+
@view.expand_row(@parent.path, :open_all => false)
|
142
|
+
assert do
|
143
|
+
@view.row_expanded?(@parent.path)
|
144
|
+
end
|
145
|
+
assert do
|
146
|
+
not @view.row_expanded?(@child.path)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
90
151
|
test "#row_expanded?" do
|
91
152
|
parent = @store.append(nil)
|
92
153
|
parent[0] = "Hello"
|
@@ -129,4 +190,40 @@ class TestGtkTreeView < Test::Unit::TestCase
|
|
129
190
|
end
|
130
191
|
end
|
131
192
|
end
|
193
|
+
|
194
|
+
sub_test_case "signal" do
|
195
|
+
def setup
|
196
|
+
@store = Gtk::TreeStore.new(String)
|
197
|
+
@view = Gtk::TreeView.new(@store)
|
198
|
+
|
199
|
+
root = @store.append(nil)
|
200
|
+
root[0] = "root"
|
201
|
+
child = @store.append(root)
|
202
|
+
child[0] = "child"
|
203
|
+
grand_child = @store.append(child)
|
204
|
+
grand_child[0] = "grand child"
|
205
|
+
end
|
206
|
+
|
207
|
+
test "row-collapsed" do
|
208
|
+
@view.expand_all
|
209
|
+
|
210
|
+
values = []
|
211
|
+
@view.signal_connect("row-collapsed") do |_, iter, path|
|
212
|
+
values << iter[0]
|
213
|
+
end
|
214
|
+
@view.collapse_row(Gtk::TreePath.new("0:0"))
|
215
|
+
assert_equal(["child"], values)
|
216
|
+
end
|
217
|
+
|
218
|
+
test "row-expanded" do
|
219
|
+
@view.collapse_all
|
220
|
+
|
221
|
+
values = []
|
222
|
+
@view.signal_connect("row-expanded") do |_, iter, path|
|
223
|
+
values << iter[0]
|
224
|
+
end
|
225
|
+
@view.expand_row(Gtk::TreePath.new("0"))
|
226
|
+
assert_equal(["root", "child"], values)
|
227
|
+
end
|
228
|
+
end
|
132
229
|
end
|
data/test/test-gtk-window.rb
CHANGED
@@ -26,8 +26,8 @@ class TestGtkWindow < Test::Unit::TestCase
|
|
26
26
|
@window.icon = fixture_path("gnome-logo-icon.png")
|
27
27
|
end
|
28
28
|
|
29
|
-
test "
|
30
|
-
icon =
|
29
|
+
test "GdkPixbuf::Pixbuf" do
|
30
|
+
icon = GdkPixbuf::Pixbuf.new(:file => fixture_path("gnome-logo-icon.png"))
|
31
31
|
@window.icon = icon
|
32
32
|
end
|
33
33
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (C) 2016 Ruby-GNOME2 Project Team
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
class TestPangoContext < Test::Unit::TestCase
|
18
|
+
include GtkTestUtils
|
19
|
+
|
20
|
+
def test_set_shape_renderer
|
21
|
+
text = "this is a test"
|
22
|
+
label = Gtk::Label.new(text)
|
23
|
+
layout = label.layout
|
24
|
+
|
25
|
+
last_block_arguments = nil
|
26
|
+
layout.context.set_shape_renderer do |cr, attr, do_path|
|
27
|
+
last_block_arguments = [cr.class, attr.class, do_path]
|
28
|
+
end
|
29
|
+
|
30
|
+
metrics = layout.context.get_metrics(layout.font_description)
|
31
|
+
ascent = metrics.ascent
|
32
|
+
logical_rect = Pango::Rectangle.new(0, -ascent, ascent, ascent)
|
33
|
+
ink_rect = logical_rect.dup
|
34
|
+
attrs = Pango::AttrList.new
|
35
|
+
attr = Pango::AttrShape.new(ink_rect, logical_rect, "a")
|
36
|
+
attr.start_index = text[0, text.index("a")].bytesize
|
37
|
+
attr.end_index = attr.start_index + "a".bytesize
|
38
|
+
attrs.insert(attr)
|
39
|
+
label.attributes = attrs
|
40
|
+
|
41
|
+
window = Gtk::Window.new
|
42
|
+
window.signal_connect("destroy") do
|
43
|
+
Gtk.main_quit
|
44
|
+
end
|
45
|
+
window.add(label)
|
46
|
+
GLib::Timeout.add(1000) do
|
47
|
+
window.destroy
|
48
|
+
GLib::Source::REMOVE
|
49
|
+
end
|
50
|
+
window.show_all
|
51
|
+
Gtk.main
|
52
|
+
|
53
|
+
assert_equal([Cairo::Context, Pango::AttrShape, false],
|
54
|
+
last_block_arguments)
|
55
|
+
end
|
56
|
+
end
|