gtk3 3.1.0-x64-mingw32 → 3.1.1-x64-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/lib/2.2/gtk3.so +0 -0
- data/lib/2.3/gtk3.so +0 -0
- data/lib/2.4/gtk3.so +0 -0
- data/lib/gtk3/container.rb +2 -7
- data/lib/gtk3/dialog.rb +10 -1
- data/lib/gtk3/loader.rb +0 -14
- data/lib/gtk3/tree-selection.rb +0 -2
- data/lib/gtk3/tree-view-column.rb +34 -8
- data/sample/gtk-demo/TODO +19 -20
- data/sample/gtk-demo/assistant.rb +0 -2
- data/sample/gtk-demo/blendmodes.ui +391 -0
- data/sample/gtk-demo/blends.png +0 -0
- data/sample/gtk-demo/button_box.rb +16 -19
- data/sample/gtk-demo/clipboard.rb +2 -3
- data/sample/gtk-demo/cmy.jpg +0 -0
- data/sample/gtk-demo/colorsel.rb +1 -2
- data/sample/gtk-demo/context_menu_cursor.png +0 -0
- data/sample/gtk-demo/css_accordion.css +1 -1
- data/sample/gtk-demo/css_blendmodes.css +77 -0
- data/sample/gtk-demo/cssview.css +1 -1
- data/sample/gtk-demo/data/16x16/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/16x16/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/data/22x22/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/22x22/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/data/24x24/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/24x24/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/data/256x256/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/256x256/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/data/32x32/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/32x32/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/data/48x48/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/48x48/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/data/512x512/{gtk3-demo-symbolic.symbolic.png → gtk4-demo-symbolic.symbolic.png} +0 -0
- data/sample/gtk-demo/data/512x512/{gtk3-demo.png → gtk4-demo.png} +0 -0
- data/sample/gtk-demo/demo.gresource.xml +15 -2
- data/sample/gtk-demo/demo.ui +2 -1
- data/sample/gtk-demo/dialog.rb +2 -3
- data/sample/gtk-demo/drawingarea.rb +1 -2
- data/sample/gtk-demo/ducky.png +0 -0
- data/sample/gtk-demo/editable_cells.rb +1 -1
- data/sample/gtk-demo/entry_buffer.rb +1 -1
- data/sample/gtk-demo/entry_completion.rb +1 -1
- data/sample/gtk-demo/filtermodel.ui +15 -6
- data/sample/gtk-demo/fishbowl.ui +49 -0
- data/sample/gtk-demo/{glarea-fragment.glsl → glarea-gl.fs.glsl} +0 -0
- data/sample/gtk-demo/{glarea-vertex.glsl → glarea-gl.vs.glsl} +0 -0
- data/sample/gtk-demo/glarea-gles.fs.glsl +7 -0
- data/sample/gtk-demo/glarea-gles.vs.glsl +7 -0
- data/sample/gtk-demo/glarea.rb +15 -6
- data/sample/gtk-demo/hypertext.rb +0 -1
- data/sample/gtk-demo/images.rb +151 -168
- data/sample/gtk-demo/infobar.rb +5 -3
- data/sample/gtk-demo/links.rb +0 -1
- data/sample/gtk-demo/list_store.rb +1 -1
- data/sample/gtk-demo/listbox.ui +1 -1
- data/sample/gtk-demo/main.rb +4 -1
- data/sample/gtk-demo/markup.rb +2 -0
- data/sample/gtk-demo/menus.rb +0 -2
- data/sample/gtk-demo/no_drop_cursor.png +0 -0
- data/sample/gtk-demo/{cairo-arc-negative.rb → old_demos/cairo-arc-negative.rb} +0 -0
- data/sample/gtk-demo/{cairo-arc.rb → old_demos/cairo-arc.rb} +0 -0
- data/sample/gtk-demo/{cairo-clip-image.rb → old_demos/cairo-clip-image.rb} +0 -0
- data/sample/gtk-demo/{cairo-clip-rectangle.rb → old_demos/cairo-clip-rectangle.rb} +0 -0
- data/sample/gtk-demo/{cairo-clip.rb → old_demos/cairo-clip.rb} +0 -0
- data/sample/gtk-demo/{cairo-curve-rectangle.rb → old_demos/cairo-curve-rectangle.rb} +0 -0
- data/sample/gtk-demo/{cairo-curve-to.rb → old_demos/cairo-curve-to.rb} +0 -0
- data/sample/gtk-demo/{cairo-dash.rb → old_demos/cairo-dash.rb} +0 -0
- data/sample/gtk-demo/{cairo-fill-and-stroke.rb → old_demos/cairo-fill-and-stroke.rb} +0 -0
- data/sample/gtk-demo/{cairo-fill-and-stroke2.rb → old_demos/cairo-fill-and-stroke2.rb} +0 -0
- data/sample/gtk-demo/{cairo-gradient.rb → old_demos/cairo-gradient.rb} +0 -0
- data/sample/gtk-demo/{cairo-image-pattern.rb → old_demos/cairo-image-pattern.rb} +0 -0
- data/sample/gtk-demo/{cairo-image.rb → old_demos/cairo-image.rb} +0 -0
- data/sample/gtk-demo/{cairo-line-cap.rb → old_demos/cairo-line-cap.rb} +0 -0
- data/sample/gtk-demo/{cairo-line-join.rb → old_demos/cairo-line-join.rb} +0 -0
- data/sample/gtk-demo/{cairo-long-lines.rb → old_demos/cairo-long-lines.rb} +0 -0
- data/sample/gtk-demo/{cairo-operator.rb → old_demos/cairo-operator.rb} +0 -0
- data/sample/gtk-demo/{cairo-path.rb → old_demos/cairo-path.rb} +0 -0
- data/sample/gtk-demo/{cairo-pattern-fill.rb → old_demos/cairo-pattern-fill.rb} +0 -0
- data/sample/gtk-demo/{cairo-self-intersect.rb → old_demos/cairo-self-intersect.rb} +0 -0
- data/sample/gtk-demo/{cairo-text-align-center.rb → old_demos/cairo-text-align-center.rb} +0 -0
- data/sample/gtk-demo/{cairo-text-extents.rb → old_demos/cairo-text-extents.rb} +0 -0
- data/sample/gtk-demo/{cairo-text.rb → old_demos/cairo-text.rb} +0 -0
- data/sample/gtk-demo/{changedisplay.rb → old_demos/changedisplay.rb} +0 -0
- data/sample/gtk-demo/{common.rb → old_demos/common.rb} +0 -0
- data/sample/gtk-demo/{item_factory.rb → old_demos/item_factory.rb} +0 -0
- data/sample/gtk-demo/{stock_browser.rb → old_demos/stock_browser.rb} +0 -0
- data/sample/gtk-demo/old_demos/textview.rb +436 -0
- data/sample/gtk-demo/{tree_store.rb → old_demos/tree_store.rb} +0 -0
- data/sample/gtk-demo/panes.rb +2 -3
- data/sample/gtk-demo/pickers.rb +6 -5
- data/sample/gtk-demo/popover.rb +2 -7
- data/sample/gtk-demo/popover.ui +1 -0
- data/sample/gtk-demo/revealer.rb +4 -2
- data/sample/gtk-demo/revealer.ui +0 -1
- data/sample/gtk-demo/scale.ui +7 -1
- data/sample/gtk-demo/search_entry.rb +1 -2
- data/sample/gtk-demo/search_entry2.rb +0 -3
- data/sample/gtk-demo/shortcuts-builder.ui +42 -27
- data/sample/gtk-demo/sizegroup.rb +15 -14
- data/sample/gtk-demo/spinner.rb +1 -1
- data/sample/gtk-demo/textview.rb +358 -382
- data/sample/gtk-demo/theming.ui +0 -29
- data/sample/gtk-demo/theming_style_classes.rb +0 -1
- data/sample/gtk-demo/transparent.rb +0 -1
- data/test/test-gtk-tree-view-column.rb +44 -1
- metadata +77 -63
File without changes
|
data/sample/gtk-demo/panes.rb
CHANGED
@@ -19,14 +19,13 @@ class PanesDemo
|
|
19
19
|
@window = Gtk::Window.new(:toplevel)
|
20
20
|
@window.screen = main_window.screen
|
21
21
|
@window.title = "Paned Widgets"
|
22
|
-
@window.border_width = 0
|
23
22
|
|
24
23
|
vbox = Gtk::Box.new(:vertical, 0)
|
25
24
|
@window.add(vbox)
|
26
25
|
|
27
26
|
vpaned = Gtk::Paned.new(:vertical)
|
28
27
|
vbox.pack_start(vpaned, :expand => true, :fill => true, :padding => 0)
|
29
|
-
vpaned.
|
28
|
+
vpaned.margin = 5
|
30
29
|
|
31
30
|
@hpaned = Gtk::Paned.new(:horizontal)
|
32
31
|
vpaned.add1(@hpaned)
|
@@ -76,7 +75,7 @@ class PanesDemo
|
|
76
75
|
child1 = @hpaned.child1
|
77
76
|
child2 = @hpaned.child2
|
78
77
|
frame = Gtk::Frame.new(frame_label)
|
79
|
-
frame.
|
78
|
+
frame.margin = 4
|
80
79
|
|
81
80
|
@table = Gtk::Grid.new
|
82
81
|
frame.add(@table)
|
data/sample/gtk-demo/pickers.rb
CHANGED
@@ -12,7 +12,6 @@ class PickersDemo
|
|
12
12
|
@window = Gtk::Window.new(:toplevel)
|
13
13
|
@window.screen = main_window.screen
|
14
14
|
@window.title = "Pickers"
|
15
|
-
@window.border_width = 10
|
16
15
|
|
17
16
|
initialize_grid
|
18
17
|
|
@@ -28,6 +27,7 @@ class PickersDemo
|
|
28
27
|
|
29
28
|
label = generate_label("File:")
|
30
29
|
picker = Gtk::FileChooserButton.new("Pick a file", :open)
|
30
|
+
picker.local_only = true
|
31
31
|
@table.attach(label, 0, 2, 1, 1)
|
32
32
|
@table.attach(picker, 1, 2, 1, 1)
|
33
33
|
|
@@ -38,7 +38,7 @@ class PickersDemo
|
|
38
38
|
|
39
39
|
label = generate_label("Mail:")
|
40
40
|
picker = Gtk::AppChooserButton.new("x-scheme-handler/mailto")
|
41
|
-
picker.
|
41
|
+
picker.show_dialog_item = true
|
42
42
|
@table.attach(label, 0, 4, 1, 1)
|
43
43
|
@table.attach(picker, 1, 4, 1, 1)
|
44
44
|
end
|
@@ -58,14 +58,15 @@ class PickersDemo
|
|
58
58
|
@table = Gtk::Grid.new
|
59
59
|
@table.row_spacing = 3
|
60
60
|
@table.column_spacing = 10
|
61
|
+
@table.margin = 20
|
61
62
|
@window.add(@table)
|
62
63
|
end
|
63
64
|
|
64
65
|
def generate_label(label)
|
65
66
|
label = Gtk::Label.new(label)
|
66
|
-
label.
|
67
|
-
label.
|
68
|
-
label.
|
67
|
+
label.halign = :start
|
68
|
+
label.valign = :center
|
69
|
+
label.hexpand = :true
|
69
70
|
label
|
70
71
|
end
|
71
72
|
end
|
data/sample/gtk-demo/popover.rb
CHANGED
@@ -13,7 +13,7 @@ class PopoverDemo
|
|
13
13
|
@window = Gtk::Window.new(:toplevel)
|
14
14
|
@window.screen = main_window.screen
|
15
15
|
box = Gtk::Box.new(:vertical, 24)
|
16
|
-
box.
|
16
|
+
box.margin = 24
|
17
17
|
@window.add(box)
|
18
18
|
|
19
19
|
widget = add_toggle_button_with_popover
|
@@ -39,7 +39,7 @@ class PopoverDemo
|
|
39
39
|
popover = Gtk::Popover.new(parent)
|
40
40
|
popover.position = pos
|
41
41
|
popover.add(child)
|
42
|
-
|
42
|
+
child.margin = 6
|
43
43
|
child.show
|
44
44
|
popover
|
45
45
|
end
|
@@ -51,11 +51,6 @@ class PopoverDemo
|
|
51
51
|
content.parent.remove(content)
|
52
52
|
window.destroy
|
53
53
|
popover = create_popover(parent, content, pos)
|
54
|
-
popover.set_size_request(200, -1)
|
55
|
-
popover.vexpand = true
|
56
|
-
popover.margin_start = 10
|
57
|
-
popover.margin_end = 10
|
58
|
-
popover.margin_bottom = 10
|
59
54
|
popover
|
60
55
|
end
|
61
56
|
|
data/sample/gtk-demo/popover.ui
CHANGED
@@ -59,6 +59,7 @@
|
|
59
59
|
<property name="visible">1</property>
|
60
60
|
<property name="can_focus">1</property>
|
61
61
|
<property name="shadow_type">in</property>
|
62
|
+
<property name="max-content-height">100</property>
|
62
63
|
<child>
|
63
64
|
<object class="GtkTreeView" id="treeview1">
|
64
65
|
<property name="visible">1</property>
|
data/sample/gtk-demo/revealer.rb
CHANGED
@@ -45,8 +45,10 @@ class RevealerDemo
|
|
45
45
|
revealer.reveal_child = true
|
46
46
|
|
47
47
|
revealer.signal_connect "notify::child-revealed" do |widget|
|
48
|
-
|
49
|
-
|
48
|
+
if widget.mapped?
|
49
|
+
revealed = widget.child_revealed?
|
50
|
+
widget.reveal_child = !revealed
|
51
|
+
end
|
50
52
|
end
|
51
53
|
|
52
54
|
@count += 1
|
data/sample/gtk-demo/revealer.ui
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
<interface>
|
3
3
|
<!-- interface-requires gtk+ 3.6 -->
|
4
4
|
<object class="GtkWindow" id="window">
|
5
|
-
<property name="border_width">5</property>
|
6
5
|
<property name="default_width">300</property>
|
7
6
|
<property name="default_height">300</property>
|
8
7
|
<property name="title">Revealer</property>
|
data/sample/gtk-demo/scale.ui
CHANGED
@@ -4,23 +4,29 @@
|
|
4
4
|
<object class="GtkAdjustment" id="adjustment1">
|
5
5
|
<property name="upper">4</property>
|
6
6
|
<property name="value">2</property>
|
7
|
+
<property name="step-increment">0.1</property>
|
8
|
+
<property name="page-increment">1</property>
|
7
9
|
</object>
|
8
10
|
<object class="GtkAdjustment" id="adjustment2">
|
9
11
|
<property name="upper">4</property>
|
10
12
|
<property name="value">2</property>
|
13
|
+
<property name="step-increment">0.1</property>
|
14
|
+
<property name="page-increment">1</property>
|
11
15
|
</object>
|
12
16
|
<object class="GtkAdjustment" id="adjustment3">
|
13
17
|
<property name="upper">4</property>
|
14
18
|
<property name="value">2</property>
|
19
|
+
<property name="step-increment">0.1</property>
|
20
|
+
<property name="page-increment">1</property>
|
15
21
|
</object>
|
16
22
|
<object class="GtkWindow" id="window1">
|
17
23
|
<property name="title" translatable="yes">Scales</property>
|
18
|
-
<property name="border-width" translatable="yes">20</property>
|
19
24
|
<child>
|
20
25
|
<object class="GtkGrid" id="grid1">
|
21
26
|
<property name="visible">1</property>
|
22
27
|
<property name="row-spacing">10</property>
|
23
28
|
<property name="column-spacing">10</property>
|
29
|
+
<property name="margin">20</property>
|
24
30
|
<child>
|
25
31
|
<object class="GtkLabel">
|
26
32
|
<property name="visible">1</property>
|
@@ -40,7 +40,7 @@ class SearchEntryDemo
|
|
40
40
|
def initialize_box
|
41
41
|
@vbox = Gtk::Box.new(:vertical, 5)
|
42
42
|
@window.add(@vbox)
|
43
|
-
@vbox.
|
43
|
+
@vbox.margin = 5
|
44
44
|
|
45
45
|
label = Gtk::Label.new("")
|
46
46
|
label.markup = "Search entry demo"
|
@@ -48,7 +48,6 @@ class SearchEntryDemo
|
|
48
48
|
|
49
49
|
@hbox = Gtk::Box.new(:horizontal, 10)
|
50
50
|
@vbox.pack_start(@hbox, :expand => true, :fill => true, :padding => 0)
|
51
|
-
@hbox.border_width = 0
|
52
51
|
end
|
53
52
|
|
54
53
|
def initialize_entry
|
@@ -61,7 +61,6 @@ class SearchEntry2Demo
|
|
61
61
|
def initialize_vbox
|
62
62
|
@vbox = Gtk::Box.new(:vertical, 0)
|
63
63
|
@window.add(@vbox)
|
64
|
-
@vbox.border_width = 0
|
65
64
|
end
|
66
65
|
|
67
66
|
def initialize_help_label
|
@@ -81,7 +80,6 @@ class SearchEntry2Demo
|
|
81
80
|
def initialize_result_hbox
|
82
81
|
hbox = Gtk::Box.new(:horizontal, 10)
|
83
82
|
@vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
84
|
-
hbox.border_width = 0
|
85
83
|
|
86
84
|
# Result
|
87
85
|
label = Gtk::Label.new("Result:")
|
@@ -101,7 +99,6 @@ class SearchEntry2Demo
|
|
101
99
|
def initialize_signal_hbox
|
102
100
|
hbox = Gtk::Box.new(:horizontal, 10)
|
103
101
|
@vbox.pack_start(hbox, :expand => true, :fill => true, :padding => 0)
|
104
|
-
hbox.border_width = 0
|
105
102
|
|
106
103
|
label = Gtk::Label.new("Signal:")
|
107
104
|
label.xalign = 0.0
|
@@ -375,6 +375,7 @@
|
|
375
375
|
<child>
|
376
376
|
<object class="GtkShortcutsSection">
|
377
377
|
<property name="visible">1</property>
|
378
|
+
<property name="max-height">16</property>
|
378
379
|
<property name="section-name">terminal</property>
|
379
380
|
<property name="title" translatable="yes">Terminal Shortcuts</property>
|
380
381
|
<child>
|
@@ -452,6 +453,43 @@
|
|
452
453
|
</object>
|
453
454
|
</child>
|
454
455
|
|
456
|
+
<child>
|
457
|
+
<object class="GtkShortcutsGroup">
|
458
|
+
<property name="visible">1</property>
|
459
|
+
<property name="title" translatable="yes">'Special' combinations</property>
|
460
|
+
|
461
|
+
<child>
|
462
|
+
<object class="GtkShortcutsShortcut">
|
463
|
+
<property name="visible">1</property>
|
464
|
+
<property name="accelerator">t+t</property>
|
465
|
+
<property name="title" translatable="yes">You want tea ?</property>
|
466
|
+
</object>
|
467
|
+
</child>
|
468
|
+
<child>
|
469
|
+
<object class="GtkShortcutsShortcut">
|
470
|
+
<property name="visible">1</property>
|
471
|
+
<property name="accelerator"><shift><ctrl></property>
|
472
|
+
<property name="title" translatable="yes">Shift Control</property>
|
473
|
+
</object>
|
474
|
+
</child>
|
475
|
+
<child>
|
476
|
+
<object class="GtkShortcutsShortcut">
|
477
|
+
<property name="visible">1</property>
|
478
|
+
<property name="accelerator"><ctrl>&<ctrl></property>
|
479
|
+
<property name="title" translatable="yes">Control Control</property>
|
480
|
+
</object>
|
481
|
+
</child>
|
482
|
+
<child>
|
483
|
+
<object class="GtkShortcutsShortcut">
|
484
|
+
<property name="visible">1</property>
|
485
|
+
<property name="accelerator">Control_L&Control_R</property>
|
486
|
+
<property name="title" translatable="yes">Left and right control</property>
|
487
|
+
</object>
|
488
|
+
</child>
|
489
|
+
|
490
|
+
</object>
|
491
|
+
</child>
|
492
|
+
|
455
493
|
<child>
|
456
494
|
<object class="GtkShortcutsGroup">
|
457
495
|
<property name="visible">1</property>
|
@@ -499,41 +537,18 @@
|
|
499
537
|
<property name="title" translatable="yes">A stock swipe gesture</property>
|
500
538
|
</object>
|
501
539
|
</child>
|
502
|
-
|
503
|
-
</object>
|
504
|
-
</child>
|
505
|
-
|
506
|
-
<child>
|
507
|
-
<object class="GtkShortcutsGroup">
|
508
|
-
<property name="visible">1</property>
|
509
|
-
<property name="title" translatable="yes">'Special' combinations</property>
|
510
|
-
|
511
540
|
<child>
|
512
541
|
<object class="GtkShortcutsShortcut">
|
513
542
|
<property name="visible">1</property>
|
514
|
-
<property name="
|
515
|
-
<property name="title" translatable="yes">
|
516
|
-
</object>
|
517
|
-
</child>
|
518
|
-
<child>
|
519
|
-
<object class="GtkShortcutsShortcut">
|
520
|
-
<property name="visible">1</property>
|
521
|
-
<property name="accelerator"><shift><ctrl></property>
|
522
|
-
<property name="title" translatable="yes">Shift Control</property>
|
523
|
-
</object>
|
524
|
-
</child>
|
525
|
-
<child>
|
526
|
-
<object class="GtkShortcutsShortcut">
|
527
|
-
<property name="visible">1</property>
|
528
|
-
<property name="accelerator"><ctrl>&<ctrl></property>
|
529
|
-
<property name="title" translatable="yes">Control Control</property>
|
543
|
+
<property name="shortcut-type">gesture-swipe-left</property>
|
544
|
+
<property name="title" translatable="yes">A stock swipe gesture</property>
|
530
545
|
</object>
|
531
546
|
</child>
|
532
547
|
<child>
|
533
548
|
<object class="GtkShortcutsShortcut">
|
534
549
|
<property name="visible">1</property>
|
535
|
-
<property name="
|
536
|
-
<property name="title" translatable="yes">
|
550
|
+
<property name="shortcut-type">gesture-swipe-right</property>
|
551
|
+
<property name="title" translatable="yes">A stock swipe gesture</property>
|
537
552
|
</object>
|
538
553
|
</child>
|
539
554
|
|
@@ -29,7 +29,7 @@ class SizegroupDemo
|
|
29
29
|
|
30
30
|
@vbox = Gtk::Box.new(:vertical, 5)
|
31
31
|
@window.add(@vbox)
|
32
|
-
@vbox.
|
32
|
+
@vbox.margin = 5
|
33
33
|
|
34
34
|
size_group = Gtk::SizeGroup.new(:horizontal)
|
35
35
|
|
@@ -45,15 +45,16 @@ class SizegroupDemo
|
|
45
45
|
|
46
46
|
# And a check button to turn grouping on and off
|
47
47
|
check_button = Gtk::CheckButton.new("_Enable grouping")
|
48
|
-
check_button.
|
48
|
+
check_button.use_underline = true
|
49
|
+
check_button.active = true
|
49
50
|
@vbox.pack_start(check_button,
|
50
51
|
:expand => false, :fill => false, :padding => 0)
|
51
52
|
|
52
53
|
check_button.signal_connect("toggled") do |widget|
|
53
54
|
if widget.active?
|
54
|
-
size_group.
|
55
|
+
size_group.mode = :horizontal
|
55
56
|
else
|
56
|
-
size_group.
|
57
|
+
size_group.mode = :none
|
57
58
|
end
|
58
59
|
end
|
59
60
|
end
|
@@ -74,24 +75,24 @@ class SizegroupDemo
|
|
74
75
|
@vbox.pack_start(frame, :expand => false, :fill => false, :padding => 0)
|
75
76
|
|
76
77
|
table = Gtk::Grid.new
|
77
|
-
table.
|
78
|
-
table.
|
79
|
-
table.
|
78
|
+
table.margin = 5
|
79
|
+
table.row_spacing = 5
|
80
|
+
table.column_spacing = 10
|
80
81
|
frame.add(table)
|
81
82
|
table
|
82
83
|
end
|
83
84
|
|
84
85
|
def add_row(table, row, size_group, label_text, options)
|
85
86
|
label = Gtk::Label.new(label_text, :use_underline => true)
|
86
|
-
label.
|
87
|
-
label.
|
88
|
-
label.
|
87
|
+
label.halign = :start
|
88
|
+
label.valign = :baseline
|
89
|
+
label.hexpand = true
|
89
90
|
table.attach(label, 0, row, 1, 1)
|
90
91
|
|
91
92
|
combo_box = create_combo_box(options)
|
92
|
-
label.
|
93
|
-
combo_box.
|
94
|
-
combo_box.
|
93
|
+
label.mnemonic_widget = combo_box
|
94
|
+
combo_box.halign = :end
|
95
|
+
combo_box.valign = :baseline
|
95
96
|
size_group.add_widget(combo_box)
|
96
97
|
table.attach(combo_box, 1, row, 1, 1)
|
97
98
|
end
|
@@ -101,7 +102,7 @@ class SizegroupDemo
|
|
101
102
|
options.each do |o|
|
102
103
|
combo_box.append_text(o)
|
103
104
|
end
|
104
|
-
combo_box.
|
105
|
+
combo_box.active = 0
|
105
106
|
combo_box
|
106
107
|
end
|
107
108
|
end
|
data/sample/gtk-demo/spinner.rb
CHANGED
data/sample/gtk-demo/textview.rb
CHANGED
@@ -1,436 +1,412 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
|
1
|
+
# Copyright (c) 2017 Ruby-GNOME2 Project Team
|
3
2
|
# This program is licenced under the same licence as Ruby-GNOME2.
|
4
3
|
#
|
5
|
-
# $Id: textview.rb,v 1.8 2005/02/06 18:25:13 kzys Exp $
|
6
4
|
=begin
|
7
|
-
=
|
5
|
+
= Text View/Multiple Views
|
8
6
|
|
9
|
-
The
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
=end
|
14
|
-
require 'common'
|
15
|
-
|
16
|
-
module Demo
|
17
|
-
class TextView < BasicWindow
|
18
|
-
|
19
|
-
GRAY50_WIDTH = 2
|
20
|
-
GRAY50_HEIGHT = 2
|
21
|
-
GRAY50_BITS = [0x02, 0x01].pack("c")
|
22
|
-
@@nest_window = nil
|
23
|
-
|
24
|
-
def initialize
|
25
|
-
super("TextView Window")
|
26
|
-
|
27
|
-
set_default_size(450, 450)
|
28
|
-
|
29
|
-
set_title("TextView")
|
30
|
-
set_border_width(0)
|
31
|
-
|
32
|
-
vpaned = Gtk::VPaned.new
|
33
|
-
vpaned.set_border_width(5)
|
34
|
-
add(vpaned)
|
35
|
-
##
|
36
|
-
# For convenience, we just use the autocreated buffer from
|
37
|
-
# the first text view; you could also create the buffer
|
38
|
-
# by itself with Gtk::TextBuffer.new, then later create
|
39
|
-
# a view widget.
|
40
|
-
#
|
41
|
-
view1 = Gtk::TextView.new
|
42
|
-
buffer = view1.buffer
|
43
|
-
view2 = Gtk::TextView.new(buffer)
|
44
|
-
|
45
|
-
sw = Gtk::ScrolledWindow.new(nil, nil)
|
46
|
-
sw.set_policy(:automatic,
|
47
|
-
:automatic)
|
48
|
-
vpaned.add1(sw)
|
49
|
-
|
50
|
-
sw.add(view1)
|
51
|
-
|
52
|
-
sw = Gtk::ScrolledWindow.new(nil, nil)
|
53
|
-
sw.set_policy(:automatic,
|
54
|
-
:automatic)
|
55
|
-
vpaned.add2(sw)
|
56
|
-
|
57
|
-
sw.add(view2)
|
58
|
-
|
59
|
-
create_tags(buffer)
|
60
|
-
insert_text(buffer)
|
61
|
-
|
62
|
-
attach_widgets(view1)
|
63
|
-
attach_widgets(view2)
|
64
|
-
|
65
|
-
vpaned.show_all
|
66
|
-
|
67
|
-
self.show
|
68
|
-
end
|
69
|
-
|
70
|
-
def create_tags(buffer)
|
71
|
-
##
|
72
|
-
# Create a bunch of tags. Note that it's also possible to
|
73
|
-
# create tags with Gtk::TextTag.new then add them to the
|
74
|
-
# tag table for the buffer, Gtk::TextBuffer#create_tag is
|
75
|
-
# just a convenience function. Also note that you don't have
|
76
|
-
# to give tags a name; pass NULL for the name to create an
|
77
|
-
# anonymous tag.
|
78
|
-
#
|
79
|
-
# In any real app, another useful optimization would be to create
|
80
|
-
# a Gtk::TextTagTable in advance, and reuse the same tag table for
|
81
|
-
# all the buffers with the same tag set, instead of creating
|
82
|
-
# new copies of the same tags for every buffer.
|
83
|
-
#
|
84
|
-
# Tags are assigned default priorities in order of addition to the
|
85
|
-
# tag table. That is, tags created later that affect the same text
|
86
|
-
# property affected by an earlier tag will override the earlier
|
87
|
-
# tag. You can modify tag priorities with
|
88
|
-
# Gtk::TextTag#set_priority.
|
89
|
-
#
|
90
|
-
|
91
|
-
buffer.create_tag('heading',
|
92
|
-
'weight' => Pango::FontDescription::WEIGHT_BOLD,
|
93
|
-
'size' => 15 * Pango::SCALE)
|
94
|
-
|
95
|
-
buffer.create_tag("italic",
|
96
|
-
"style" => Pango::FontDescription::STYLE_ITALIC)
|
97
|
-
|
98
|
-
buffer.create_tag("bold",
|
99
|
-
"weight" => Pango::FontDescription::WEIGHT_BOLD)
|
100
|
-
|
101
|
-
buffer.create_tag("big",
|
102
|
-
# points times the PANGO_SCALE factor
|
103
|
-
"size" => 20 * Pango::SCALE)
|
7
|
+
The GtkTextView widget displays a GtkTextBuffer. One GtkTextBuffer
|
8
|
+
can be displayed by multiple GtkTextViews. This demo has two views
|
9
|
+
displaying a single buffer, and shows off the widget's text
|
10
|
+
formatting features.
|
104
11
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
buffer.create_tag("blue_foreground", "foreground" => "blue")
|
114
|
-
|
115
|
-
buffer.create_tag("red_background", "background" => "red")
|
116
|
-
|
117
|
-
stipple = Gdk::Pixmap.create_from_data(nil, GRAY50_BITS, GRAY50_WIDTH,
|
118
|
-
GRAY50_HEIGHT)
|
119
|
-
|
120
|
-
buffer.create_tag("background_stipple",
|
121
|
-
"background_stipple" => stipple)
|
122
|
-
|
123
|
-
buffer.create_tag("foreground_stipple",
|
124
|
-
"foreground_stipple" => stipple)
|
125
|
-
|
126
|
-
buffer.create_tag("big_gap_before_line",
|
127
|
-
"pixels_above_lines" => 30)
|
128
|
-
|
129
|
-
buffer.create_tag("big_gap_after_line",
|
130
|
-
"pixels_below_lines" => 30)
|
131
|
-
|
132
|
-
buffer.create_tag("double_spaced_line",
|
133
|
-
"pixels_inside_wrap" => 10)
|
134
|
-
|
135
|
-
buffer.create_tag("not_editable",
|
136
|
-
"editable" => false)
|
137
|
-
|
138
|
-
buffer.create_tag("word_wrap",
|
139
|
-
"wrap_mode" => :word)
|
140
|
-
|
141
|
-
buffer.create_tag("char_wrap",
|
142
|
-
"wrap_mode" => Gtk::TextTag::WRAP_CHAR)
|
143
|
-
|
144
|
-
buffer.create_tag("no_wrap",
|
145
|
-
"wrap_mode" => :none)
|
12
|
+
=end
|
13
|
+
class TextviewDemo
|
14
|
+
def initialize(main_window)
|
15
|
+
@window = Gtk::Window.new(:toplevel)
|
16
|
+
@window.screen = main_window.screen
|
17
|
+
@window.set_default_size(450, 450)
|
18
|
+
@window.title = "Multiple Views"
|
146
19
|
|
147
|
-
|
148
|
-
|
20
|
+
vpaned = Gtk::Paned.new(:vertical)
|
21
|
+
@window.add(vpaned)
|
149
22
|
|
150
|
-
|
151
|
-
|
23
|
+
# For convenience, we just use the autocreated buffer from
|
24
|
+
# the first text view; you could also create the buffer
|
25
|
+
# by itself Gtk::TextBuffer.new, then later create a view
|
26
|
+
# widget.
|
152
27
|
|
153
|
-
|
154
|
-
|
155
|
-
"right_margin" => 50)
|
28
|
+
view1 = Gtk::TextView.new
|
29
|
+
view2 = Gtk::TextView.new(view1.buffer)
|
156
30
|
|
157
|
-
|
158
|
-
|
31
|
+
sw = Gtk::ScrolledWindow.new
|
32
|
+
sw.set_policy(:automatic, :automatic)
|
33
|
+
vpaned.add1(sw)
|
34
|
+
sw.add(view1)
|
159
35
|
|
160
|
-
|
161
|
-
|
36
|
+
sw = Gtk::ScrolledWindow.new
|
37
|
+
sw.set_policy(:automatic, :automatic)
|
38
|
+
vpaned.add2(sw)
|
39
|
+
sw.add(view2)
|
162
40
|
|
163
|
-
|
164
|
-
|
41
|
+
create_tags(view1.buffer)
|
42
|
+
insert_text(view1.buffer)
|
165
43
|
|
166
|
-
|
167
|
-
|
168
|
-
"size" => 8 * Pango::SCALE) # 8 points
|
44
|
+
attach_widgets(view1)
|
45
|
+
attach_widgets(view2)
|
169
46
|
|
170
|
-
|
171
|
-
|
172
|
-
"size" => 8 * Pango::SCALE) # 8 points
|
47
|
+
vpaned.show_all
|
48
|
+
end
|
173
49
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
"right_margin" => 20)
|
50
|
+
def run
|
51
|
+
if !@window.visible?
|
52
|
+
@window.show_all
|
53
|
+
else
|
54
|
+
@window.destroy
|
180
55
|
end
|
56
|
+
@window
|
57
|
+
end
|
181
58
|
|
182
|
-
|
183
|
-
|
184
|
-
##
|
185
|
-
# Demo.find_file looks in the the current directory first,
|
186
|
-
# so you can run gtk-demo without installing GTK, then looks
|
187
|
-
# in the location where the file is installed.
|
188
|
-
#
|
189
|
-
|
190
|
-
filename = Demo.find_file("gtk-logo-rgb.gif")
|
191
|
-
pixbuf = Gdk::Pixbuf.new(filename) if filename
|
192
|
-
|
193
|
-
unless pixbuf
|
194
|
-
$stderr.print "Failed to load image file gtk-logo-rgb.gif\n"
|
195
|
-
exit 1
|
196
|
-
end
|
197
|
-
|
198
|
-
scaled = pixbuf.scale(32, 32, Gdk::Pixbuf::INTERP_BILINEAR)
|
199
|
-
pixbuf = scaled
|
200
|
-
|
201
|
-
##
|
202
|
-
# get start of buffer; each insertion will revalidate the
|
203
|
-
# iterator to point to just after the inserted text.
|
204
|
-
#
|
205
|
-
|
206
|
-
iter = buffer.get_iter_at(:offset => 0)
|
207
|
-
|
208
|
-
buffer.insert(iter, "The text widget can display text with all kinds of nifty attributes. It also supports multiple views of the same buffer; this demo is showing the same buffer in two places.\n\n")
|
209
|
-
|
210
|
-
buffer.insert(iter, "Font styles. ", 'heading')
|
211
|
-
|
212
|
-
buffer.insert(iter, "For example, you can have ")
|
213
|
-
buffer.insert(iter, "italic", "italic")
|
214
|
-
buffer.insert(iter, ", ")
|
215
|
-
buffer.insert(iter, "bold", "bold")
|
216
|
-
buffer.insert(iter, ", or ")
|
217
|
-
buffer.insert(iter, "monospace(typewriter)", "monospace")
|
218
|
-
buffer.insert(iter, ", or ")
|
219
|
-
buffer.insert(iter, "big", "big")
|
220
|
-
buffer.insert(iter, " text. ")
|
221
|
-
buffer.insert(iter, "It's best not to hardcode specific text sizes; you can use relative sizes as with CSS, such as ")
|
222
|
-
buffer.insert(iter, "xx-small", "xx-small")
|
223
|
-
buffer.insert(iter, " or ")
|
224
|
-
buffer.insert(iter, "x-large", "x-large")
|
225
|
-
buffer.insert(iter, " to ensure that your program properly adapts if the user changes the default font size.\n\n")
|
226
|
-
|
227
|
-
buffer.insert(iter, "Colors. ", "heading")
|
228
|
-
|
229
|
-
buffer.insert(iter, "Colors such as ")
|
230
|
-
buffer.insert(iter, "a blue foreground", "blue_foreground")
|
231
|
-
buffer.insert(iter, " or ")
|
232
|
-
buffer.insert(iter, "a red background", "red_background")
|
233
|
-
buffer.insert(iter, " or even ")
|
234
|
-
buffer.insert(iter, "a stippled red background",
|
235
|
-
"red_background", "background_stipple")
|
236
|
-
|
237
|
-
buffer.insert(iter, " or ")
|
238
|
-
buffer.insert(iter, "a stippled blue foreground on solid red background",
|
239
|
-
"blue_foreground", "red_background", "foreground_stipple")
|
59
|
+
private
|
240
60
|
|
241
|
-
|
61
|
+
def create_tags(buffer)
|
62
|
+
# Create a bunch of tags. Note that it's also possible to
|
63
|
+
# create tags with Gtk::TextTag.new then add them to the
|
64
|
+
# tag table for the buffer, Gtk::TextBuffer.create_tag is
|
65
|
+
# just a convenience function. Also note that you don't have
|
66
|
+
# to give tags a name; pass NULL for the name to create an
|
67
|
+
# anonymous tag.
|
68
|
+
#
|
69
|
+
# In any real app, another useful optimization would be to create
|
70
|
+
# a Gtk::TextTagTable in advance, and reuse the same tag table for
|
71
|
+
# all the buffers with the same tag set, instead of creating
|
72
|
+
# new copies of the same tags for every buffer.
|
73
|
+
#
|
74
|
+
# Tags are assigned default priorities in order of addition to the
|
75
|
+
# tag table. That is, tags created later that affect the same text
|
76
|
+
# property affected by an earlier tag will override the earlier
|
77
|
+
# tag. You can modify tag priorities with
|
78
|
+
# Gtk::TextTag.priority=.
|
242
79
|
|
243
|
-
|
80
|
+
buffer.create_tag("heading",
|
81
|
+
"weight" => Pango::WEIGHT_BOLD,
|
82
|
+
"size" => 15 * Pango::SCALE)
|
244
83
|
|
245
|
-
|
246
|
-
|
247
|
-
buffer.insert(iter, "underline", "underline")
|
248
|
-
buffer.insert(iter, ", ")
|
249
|
-
buffer.insert(iter, "double underline", "double_underline")
|
250
|
-
buffer.insert(iter, ", ")
|
251
|
-
buffer.insert(iter, "superscript", "superscript")
|
252
|
-
buffer.insert(iter, ", and ")
|
253
|
-
buffer.insert(iter, "subscript", "subscript")
|
254
|
-
buffer.insert(iter, " are all supported.\n\n")
|
84
|
+
buffer.create_tag("italic",
|
85
|
+
"style" => Pango::STYLE_ITALIC)
|
255
86
|
|
256
|
-
|
87
|
+
buffer.create_tag("bold",
|
88
|
+
"weight" => Pango::WEIGHT_BOLD)
|
257
89
|
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
buffer.insert(iter, pixbuf)
|
262
|
-
buffer.insert(iter, " for example.\n\n")
|
90
|
+
buffer.create_tag("big",
|
91
|
+
# points times the PANGO_SCALE factor
|
92
|
+
"size" => 20 * Pango::SCALE)
|
263
93
|
|
264
|
-
|
94
|
+
buffer.create_tag("xx-small",
|
95
|
+
"scale" => Pango::AttrScale::XX_SMALL)
|
265
96
|
|
266
|
-
|
97
|
+
buffer.create_tag("x-large",
|
98
|
+
"scale" => Pango::AttrScale::X_LARGE)
|
267
99
|
|
268
|
-
|
269
|
-
"big_gap_before_line", "wide_margins")
|
270
|
-
buffer.insert(iter, "You can also adjust the amount of space after each line; this line has a whole lot of space after it.\n",
|
271
|
-
"big_gap_after_line", "wide_margins")
|
100
|
+
buffer.create_tag("monospace", "family" => "monospace")
|
272
101
|
|
273
|
-
|
274
|
-
"double_spaced_line", "wide_margins")
|
102
|
+
buffer.create_tag("blue_foreground", "foreground" => "blue")
|
275
103
|
|
276
|
-
|
104
|
+
buffer.create_tag("red_background", "background" => "red")
|
277
105
|
|
278
|
-
|
106
|
+
buffer.create_tag("big_gap_before_line",
|
107
|
+
"pixels_above_lines" => 30)
|
279
108
|
|
280
|
-
|
281
|
-
|
109
|
+
buffer.create_tag("big_gap_after_line",
|
110
|
+
"pixels_below_lines" => 30)
|
282
111
|
|
283
|
-
|
112
|
+
buffer.create_tag("double_spaced_line",
|
113
|
+
"pixels_inside_wrap" => 10)
|
284
114
|
|
285
|
-
|
115
|
+
buffer.create_tag("not_editable",
|
116
|
+
"editable" => false)
|
286
117
|
|
287
|
-
|
118
|
+
buffer.create_tag("word_wrap",
|
119
|
+
"wrap_mode" => :word)
|
288
120
|
|
289
|
-
|
121
|
+
buffer.create_tag("char_wrap",
|
122
|
+
"wrap_mode" => :char)
|
290
123
|
|
291
|
-
|
124
|
+
buffer.create_tag("no_wrap",
|
125
|
+
"wrap_mode" => :none)
|
292
126
|
|
293
|
-
|
127
|
+
buffer.create_tag("center",
|
128
|
+
"justification" => :center)
|
294
129
|
|
295
|
-
|
296
|
-
|
130
|
+
buffer.create_tag("right_justify",
|
131
|
+
"justification" => :right)
|
297
132
|
|
298
|
-
|
133
|
+
buffer.create_tag("wide_margins",
|
134
|
+
"left_margin" => 50,
|
135
|
+
"right_margin" => 50)
|
299
136
|
|
300
|
-
|
137
|
+
buffer.create_tag("strikethrough",
|
138
|
+
"strikethrough" => true)
|
301
139
|
|
302
|
-
|
140
|
+
buffer.create_tag("underline",
|
141
|
+
"underline" => Pango::UNDERLINE_SINGLE)
|
303
142
|
|
304
|
-
|
305
|
-
|
143
|
+
buffer.create_tag("double_underline",
|
144
|
+
"underline" => Pango::UNDERLINE_DOUBLE)
|
306
145
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
anchor = buffer.create_child_anchor(iter)
|
311
|
-
buffer.insert(iter, " and a scale: ")
|
312
|
-
anchor = buffer.create_child_anchor(iter)
|
313
|
-
buffer.insert(iter, " and an animation: ")
|
314
|
-
anchor = buffer.create_child_anchor(iter)
|
315
|
-
buffer.insert(iter, " finally a text entry: ")
|
316
|
-
anchor = buffer.create_child_anchor(iter)
|
317
|
-
buffer.insert(iter, ".\n")
|
146
|
+
buffer.create_tag("superscript",
|
147
|
+
"rise" => 10 * Pango::SCALE, # 10 pixels
|
148
|
+
"size" => 8 * Pango::SCALE) # 8 points
|
318
149
|
|
319
|
-
|
150
|
+
buffer.create_tag("subscript",
|
151
|
+
"rise" => -10 * Pango::SCALE, # 10 pixels
|
152
|
+
"size" => 8 * Pango::SCALE) # 8 points
|
320
153
|
|
321
|
-
|
154
|
+
buffer.create_tag("rtl_quote",
|
155
|
+
"wrap_mode" => :word,
|
156
|
+
"direction" => Gtk::TextDirection::RTL,
|
157
|
+
"indent" => 30,
|
158
|
+
"left_margin" => 20,
|
159
|
+
"right_margin" => 20)
|
160
|
+
end
|
322
161
|
|
323
|
-
|
324
|
-
|
325
|
-
|
162
|
+
def insert_text(buffer)
|
163
|
+
icon_theme = Gtk::IconTheme.default
|
164
|
+
pixbuf = icon_theme.load_icon("gtk3-demo", 32, :generic_fallback)
|
165
|
+
|
166
|
+
# get start of buffer; each insertion will revalidate the
|
167
|
+
# iterator to point to just after the inserted text.
|
168
|
+
|
169
|
+
iter = buffer.get_iter_at(:offset => 0)
|
170
|
+
buffer.insert(iter, <<TEXT)
|
171
|
+
The text widget can display text with all kinds of nifty attributes. It \
|
172
|
+
also supports multiple views of the same buffer; this demo is showing the \
|
173
|
+
same buffer in two places.
|
174
|
+
TEXT
|
175
|
+
buffer.insert(iter, "Font styles. ", :tags => ["heading"])
|
176
|
+
buffer.insert(iter, "For example, you can have ")
|
177
|
+
buffer.insert(iter, "italic", :tags => ["italic"])
|
178
|
+
buffer.insert(iter, ", ")
|
179
|
+
buffer.insert(iter, "bold", :tags => ["bold"])
|
180
|
+
buffer.insert(iter, ", or ")
|
181
|
+
buffer.insert(iter, "monospace(typewriter)", :tags => ["monospace"])
|
182
|
+
buffer.insert(iter, ", or ")
|
183
|
+
buffer.insert(iter, "big", :tags => ["big"])
|
184
|
+
buffer.insert(iter, " text. ")
|
185
|
+
buffer.insert(iter, "It's best not to hardcode specific text sizes; you can\
|
186
|
+
use relative sizes as with CSS, such as ")
|
187
|
+
buffer.insert(iter, "xx-small", :tags => ["xx-small"])
|
188
|
+
buffer.insert(iter, " or ")
|
189
|
+
buffer.insert(iter, "x-large", :tags => ["x-large"])
|
190
|
+
buffer.insert(iter, " to ensure that your program properly adapts if the \
|
191
|
+
user changes the default font size.\n\n")
|
192
|
+
|
193
|
+
buffer.insert(iter, "Colors. ", :tags => ["heading"])
|
194
|
+
|
195
|
+
buffer.insert(iter, "Colors such as ")
|
196
|
+
buffer.insert(iter, "a blue foreground", :tags => ["blue_foreground"])
|
197
|
+
buffer.insert(iter, " or ")
|
198
|
+
buffer.insert(iter, "a red background", :tags => ["red_background"])
|
199
|
+
buffer.insert(iter, " or even ")
|
200
|
+
buffer.insert(iter, "a blue foreground on red background",
|
201
|
+
:tags => %w(blue_foreground red_background))
|
202
|
+
|
203
|
+
buffer.insert(iter, "(select that to read it) can be used.\n\n")
|
204
|
+
|
205
|
+
buffer.insert(iter, "Underline, strikethrough, and rise. ",
|
206
|
+
:tags => ["heading"])
|
207
|
+
|
208
|
+
buffer.insert(iter, "Strikethrough", :tags => ["strikethrough"])
|
209
|
+
buffer.insert(iter, ", ")
|
210
|
+
buffer.insert(iter, "underline", :tags => ["underline"])
|
211
|
+
buffer.insert(iter, ", ")
|
212
|
+
buffer.insert(iter, "double underline", :tags => ["double_underline"])
|
213
|
+
buffer.insert(iter, ", ")
|
214
|
+
buffer.insert(iter, "superscript", :tags => ["superscript"])
|
215
|
+
buffer.insert(iter, ", and ")
|
216
|
+
buffer.insert(iter, "subscript", :tags => ["subscript"])
|
217
|
+
buffer.insert(iter, " are all supported.\n\n")
|
218
|
+
|
219
|
+
buffer.insert(iter, "Images. ", :tags => ["heading"])
|
220
|
+
|
221
|
+
buffer.insert(iter, "The buffer can have images in it: ")
|
222
|
+
buffer.insert(iter, pixbuf)
|
223
|
+
buffer.insert(iter, pixbuf)
|
224
|
+
buffer.insert(iter, pixbuf)
|
225
|
+
buffer.insert(iter, " for example.\n\n")
|
226
|
+
|
227
|
+
buffer.insert(iter, "Spacing. ", :tags => ["heading"])
|
228
|
+
|
229
|
+
buffer.insert(iter,
|
230
|
+
"You can adjust the amount of space before each line.\n")
|
231
|
+
|
232
|
+
buffer.insert(iter, "This line has a whole lot of space before it.\n",
|
233
|
+
:tags => %w(big_gap_before_line wide_margins))
|
234
|
+
buffer.insert(iter, "You can also adjust the amount of space after each \
|
235
|
+
line; this line has a whole lot of space after it.\n",
|
236
|
+
:tags => %w(big_gap_after_line wide_margins))
|
237
|
+
text = "You can also adjust the amount of space between wrapped lines; \
|
238
|
+
this line has extra space between each wrapped line in the same paragraph. To \
|
239
|
+
show off wrapping, some filler text: the quick brown fox jumped over the lazy \
|
240
|
+
dog. Blah blah blah blah blah blah blah blah blah.\n"
|
241
|
+
buffer.insert(iter, text,
|
242
|
+
:tags => %w(double_spaced_line wide_margins))
|
243
|
+
|
244
|
+
buffer.insert(iter,
|
245
|
+
"Also note that those lines have extra-wide margins.\n\n")
|
246
|
+
|
247
|
+
buffer.insert(iter, "Editability. ", :tags => ["heading"])
|
248
|
+
|
249
|
+
buffer.insert(iter, "This line is 'locked down' and can't be edited by the \
|
250
|
+
user - just try it! You can't delete this line.\n\n",
|
251
|
+
:tags => ["not_editable"])
|
252
|
+
|
253
|
+
buffer.insert(iter, "Wrapping. ", :tags => ["heading"])
|
254
|
+
|
255
|
+
buffer.insert(iter, "This line(and most of the others in this buffer) is \
|
256
|
+
word-wrapped, using the proper Unicode algorithm. Word wrap should work in all\
|
257
|
+
scripts and languages that GTK+ supports. Let's make this a long paragraph to\
|
258
|
+
demonstrate: blah blah blah blah blah blah blah blah blah blah blah blah blah\
|
259
|
+
blah blah blah blah blah blah\n\n")
|
260
|
+
|
261
|
+
buffer.insert(iter, "This line has character-based wrapping, and can wrap \
|
262
|
+
between any two character glyphs. Let's make this a long paragraph to \
|
263
|
+
demonstrate: blah blah blah blah blah blah blah blah blah blah blah blah blah \
|
264
|
+
blah blah blah blah blah blah\n\n", :tags => ["char_wrap"])
|
265
|
+
|
266
|
+
buffer.insert(iter, "This line has all wrapping turned off, so it makes \
|
267
|
+
the horizontal scrollbar appear.\n\n\n", :tags => ["no_wrap"])
|
268
|
+
|
269
|
+
buffer.insert(iter, "Justification. ", :tags => ["heading"])
|
270
|
+
|
271
|
+
buffer.insert(iter, "\nThis line has center justification.\n",
|
272
|
+
:tags => ["center"])
|
273
|
+
|
274
|
+
buffer.insert(iter, "This line has right justification.\n",
|
275
|
+
:tags => ["right_justify"])
|
276
|
+
|
277
|
+
buffer.insert(iter, "\nThis line has big wide margins. Text text text text\
|
278
|
+
text text text text text text text text text text text text text text text \
|
279
|
+
text text text text text text text text text text text text text text text \
|
280
|
+
text text.\n", :tags => ["wide_margins"])
|
281
|
+
|
282
|
+
buffer.insert(iter, "Internationalization. ", :tags => ["heading"])
|
283
|
+
|
284
|
+
buffer.insert(iter, "You can put all sorts of Unicode text in the buffer.\
|
285
|
+
\n\nGerman(Deutsch Süd) Grüß Gott\nGreek(Ελληνικά) Γειά σας\nHebrew \
|
286
|
+
שלום\nJapanese(日本語)\n\nThe widget properly handles bidirectional text, word\
|
287
|
+
wrapping, DOS/UNIX/Unicode paragraph separators, grapheme boundaries, and so \
|
288
|
+
on using the Pango internationalization framework.\n")
|
289
|
+
|
290
|
+
buffer.insert(iter,
|
291
|
+
"Here's a word-wrapped quote in a right-to-left language:\n")
|
292
|
+
buffer.insert(iter, "\331\210\331\202\330\257 \330\250\330\257\330\243 \
|
293
|
+
\330\253\331\204\330\247\330\253 \331\205\331\206 \330\243\331\203\330\253\330\
|
294
|
+
\261 \330\247\331\204\331\205\330\244\330\263\330\263\330\247\330\252 \330\252\
|
295
|
+
\331\202\330\257\331\205\330\247 \331\201\331\212 \330\264\330\250\331\203\330\
|
296
|
+
\251 \330\247\331\203\330\263\331\212\331\210\331\206 \330\250\330\261\330\247\
|
297
|
+
\331\205\330\254\331\207\330\247 \331\203\331\205\331\206\330\270\331\205\330\
|
298
|
+
\247\330\252 \331\204\330\247 \330\252\330\263\330\271\331\211 \331\204\331\
|
299
|
+
\204\330\261\330\250\330\255\330\214 \330\253\331\205 \330\252\330\255\331\210\
|
300
|
+
\331\204\330\252 \331\201\331\212 \330\247\331\204\330\263\331\206\331\210\330\
|
301
|
+
\247\330\252 \330\247\331\204\330\256\331\205\330\263 \330\247\331\204\331\205\
|
302
|
+
\330\247\330\266\331\212\330\251 \330\245\331\204\331\211 \331\205\330\244\330\
|
303
|
+
\263\330\263\330\247\330\252 \331\205\330\247\331\204\331\212\330\251 \331\205\
|
304
|
+
\331\206\330\270\331\205\330\251\330\214 \331\210\330\250\330\247\330\252\330\
|
305
|
+
\252 \330\254\330\262\330\241\330\247 \331\205\331\206 \330\247\331\204\331\
|
306
|
+
\206\330\270\330\247\331\205 \330\247\331\204\331\205\330\247\331\204\331\212 \
|
307
|
+
\331\201\331\212 \330\250\331\204\330\257\330\247\331\206\331\207\330\247\330\
|
308
|
+
\214 \331\210\331\204\331\203\331\206\331\207\330\247 \330\252\330\252\330\256\
|
309
|
+
\330\265\330\265 \331\201\331\212 \330\256\330\257\331\205\330\251 \331\202\
|
310
|
+
\330\267\330\247\330\271 \330\247\331\204\331\205\330\264\330\261\331\210\330\
|
311
|
+
\271\330\247\330\252 \330\247\331\204\330\265\330\272\331\212\330\261\330\251.\
|
312
|
+
\331\210\330\243\330\255\330\257 \330\243\331\203\330\253\330\261 \331\207\330\
|
313
|
+
\260\331\207 \330\247\331\204\331\205\330\244\330\263\330\263\330\247\330\252 \
|
314
|
+
\331\206\330\254\330\247\330\255\330\247 \331\207\331\210 \302\273\330\250\330\
|
315
|
+
\247\331\206\331\203\331\210\330\263\331\210\331\204\302\253 \331\201\331\212 \
|
316
|
+
\330\250\331\210\331\204\331\212\331\201\331\212\330\247.\n\n" ,
|
317
|
+
:tags => ["rtl_quote"])
|
318
|
+
|
319
|
+
buffer.insert(iter, "You can put widgets in the buffer: Here's a button: ")
|
320
|
+
buffer.create_child_anchor(iter)
|
321
|
+
buffer.insert(iter, " and a menu: ")
|
322
|
+
buffer.create_child_anchor(iter)
|
323
|
+
buffer.insert(iter, " and a scale: ")
|
324
|
+
buffer.create_child_anchor(iter)
|
325
|
+
buffer.insert(iter, " and an animation: ")
|
326
|
+
buffer.create_child_anchor(iter)
|
327
|
+
buffer.insert(iter, " finally a text entry: ")
|
328
|
+
buffer.create_child_anchor(iter)
|
329
|
+
buffer.insert(iter, ".\n")
|
330
|
+
|
331
|
+
buffer.insert(iter, "\n\nThis demo doesn't demonstrate all the \
|
332
|
+
Gtk::TextBuffer features; it leaves out, for example: invisible/hidden text \
|
333
|
+
(doesn't work in GTK 2, but planned), tab stops, application-drawn areas on \
|
334
|
+
the sides of the widget for displaying breakpoints and such...")
|
335
|
+
|
336
|
+
# Apply word_wrap tag to whole buffer
|
337
|
+
|
338
|
+
buf_start, buf_end = buffer.bounds
|
339
|
+
buffer.apply_tag("word_wrap", buf_start, buf_end)
|
340
|
+
end
|
326
341
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
end
|
331
|
-
return false
|
342
|
+
def find_anchor(iter)
|
343
|
+
while iter.forward_char
|
344
|
+
return true if iter.child_anchor
|
332
345
|
end
|
346
|
+
false
|
347
|
+
end
|
333
348
|
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
view = Gtk::TextView.new(buffer)
|
360
|
-
|
361
|
-
recursive_attach_view(0, view, anchor)
|
362
|
-
|
363
|
-
@@nest_window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
|
364
|
-
sw = Gtk::ScrolledWindow.new(nil, nil)
|
365
|
-
sw.set_policy(:automatic,
|
366
|
-
:automatic)
|
367
|
-
|
368
|
-
@@nest_window.add(sw)
|
369
|
-
sw.add(view)
|
370
|
-
|
371
|
-
@@nest_window.set_default_size(300, 400)
|
372
|
-
@@nest_window.show_all
|
373
|
-
}
|
374
|
-
elsif i == 1
|
375
|
-
menu = Gtk::Menu.new
|
376
|
-
widget = Gtk::OptionMenu.new
|
377
|
-
|
378
|
-
menu_item = Gtk::MenuItem.new("Option 1")
|
379
|
-
menu.append(menu_item)
|
380
|
-
menu_item = Gtk::MenuItem.new("Option 2")
|
381
|
-
menu.append(menu_item)
|
382
|
-
menu_item = Gtk::MenuItem.new("Option 3")
|
383
|
-
menu.append(menu_item)
|
384
|
-
|
385
|
-
widget.menu = menu
|
386
|
-
|
387
|
-
elsif i == 2
|
388
|
-
widget = Gtk::HScale.new
|
389
|
-
widget.set_range(0, 100)
|
390
|
-
widget.set_size_request(70, -1)
|
391
|
-
|
392
|
-
elsif i == 3
|
393
|
-
filename = Demo.find_file("floppybuddy.gif")
|
394
|
-
widget = Gtk::Image.new(filename)
|
395
|
-
|
396
|
-
elsif i == 4
|
397
|
-
widget = Gtk::Entry.new
|
398
|
-
|
399
|
-
else
|
400
|
-
#widget = nil; avoids a compiler warning
|
401
|
-
#g_assert_not_reached ;
|
402
|
-
end
|
403
|
-
|
404
|
-
text_view.add_child_at_anchor(widget,
|
405
|
-
anchor)
|
406
|
-
|
407
|
-
widget.show_all
|
408
|
-
i += 1
|
349
|
+
def attach_widgets(text_view)
|
350
|
+
buffer = text_view.buffer
|
351
|
+
iter = buffer.start_iter
|
352
|
+
i = 0
|
353
|
+
widget = nil
|
354
|
+
while find_anchor(iter)
|
355
|
+
anchor = iter.child_anchor
|
356
|
+
|
357
|
+
if i == 0
|
358
|
+
widget = Gtk::Button.new(:label => "Click Me")
|
359
|
+
widget.signal_connect("clicked") { easter_egg_callback }
|
360
|
+
elsif i == 1
|
361
|
+
widget = Gtk::ComboBoxText.new
|
362
|
+
widget.append_text("Option 1")
|
363
|
+
widget.append_text("Option 2")
|
364
|
+
widget.append_text("Option 3")
|
365
|
+
elsif i == 2
|
366
|
+
widget = Gtk::Scale.new(:horizontal, nil)
|
367
|
+
widget.set_range(0, 100)
|
368
|
+
widget.set_size_request(70, -1)
|
369
|
+
elsif i == 3
|
370
|
+
widget = Gtk::Image.new(:resource => "/textview/floppybuddy.gif")
|
371
|
+
elsif i == 4
|
372
|
+
widget = Gtk::Entry.new
|
409
373
|
end
|
374
|
+
text_view.add_child_at_anchor(widget, anchor)
|
375
|
+
widget.show_all
|
376
|
+
i += 1
|
410
377
|
end
|
378
|
+
end
|
411
379
|
|
380
|
+
def easter_egg_callback
|
381
|
+
buffer = Gtk::TextBuffer.new
|
382
|
+
iter = buffer.start_iter
|
383
|
+
buffer.insert(iter,
|
384
|
+
"This buffer is shared by a set of nested text views.\n \
|
385
|
+
Nested view:")
|
386
|
+
anchor = buffer.create_child_anchor(iter)
|
387
|
+
buffer.insert(iter,
|
388
|
+
"\nDon't do this in real applications, please.\n")
|
389
|
+
view = Gtk::TextView.new(buffer)
|
390
|
+
recursive_attach_view(0, view, anchor)
|
391
|
+
|
392
|
+
window = Gtk::Window.new
|
393
|
+
sw = Gtk::ScrolledWindow.new
|
394
|
+
sw.set_policy(:automatic, :automatic)
|
395
|
+
window.add(sw)
|
396
|
+
sw.add(view)
|
397
|
+
window.set_default_size(300, 400)
|
398
|
+
window.show_all
|
399
|
+
end
|
412
400
|
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
child_view = Gtk::TextView.new(view.buffer)
|
417
|
-
|
418
|
-
# Event box is to add a black border around each child view
|
419
|
-
event_box = Gtk::EventBox.new
|
420
|
-
color = Gdk::Color.parse("black")
|
421
|
-
event_box.modify_bg(Gtk::STATE_NORMAL, color)
|
422
|
-
|
423
|
-
align = Gtk::Alignment.new(0.5, 0.5, 1.0, 1.0)
|
424
|
-
align.set_border_width(1)
|
425
|
-
|
426
|
-
event_box.add(align)
|
427
|
-
align.add(child_view)
|
401
|
+
def recursive_attach_view(depth, view, anchor)
|
402
|
+
return if depth > 4
|
428
403
|
|
429
|
-
|
430
|
-
|
431
|
-
recursive_attach_view(depth + 1, child_view, anchor)
|
432
|
-
end
|
404
|
+
child_view = Gtk::TextView.new(view.buffer)
|
433
405
|
|
406
|
+
# Frame is to add a black border around each child view.
|
407
|
+
frame = Gtk::Frame.new
|
408
|
+
frame.add(child_view)
|
409
|
+
view.add_child_at_anchor(frame, anchor)
|
410
|
+
recursive_attach_view(depth + 1, child_view, anchor)
|
434
411
|
end
|
435
412
|
end
|
436
|
-
|