gtk3 3.0.8-x86-mingw32 → 3.0.9-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- 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
|