gtk3 2.1.0-x86-mingw32 → 2.2.0-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/ext/gtk3/extconf.rb +1 -1
  3. data/ext/gtk3/rbgtk-about-dialog.c +0 -6
  4. data/ext/gtk3/rbgtk-accessible.c +0 -16
  5. data/ext/gtk3/rbgtk-entry.c +4 -18
  6. data/ext/gtk3/rbgtk-header-bar.c +58 -0
  7. data/ext/gtk3/rbgtk-icon-view.c +30 -5
  8. data/ext/gtk3/rbgtk-level-bar.c +88 -0
  9. data/ext/gtk3/rbgtk-link-button.c +0 -6
  10. data/ext/gtk3/rbgtk-menu-button.c +41 -0
  11. data/ext/gtk3/rbgtk-revealer.c +42 -0
  12. data/ext/gtk3/rbgtk-search-bar.c +59 -0
  13. data/ext/gtk3/rbgtk-search-entry.c +42 -0
  14. data/ext/gtk3/rbgtk-stack.c +106 -0
  15. data/ext/gtk3/rbgtk-tree-selection.c +7 -22
  16. data/ext/gtk3/rbgtk.c +24 -3
  17. data/ext/gtk3/rbgtk3conversions.h +25 -2
  18. data/ext/gtk3/rbgtk3private.h +23 -3
  19. data/lib/1.9/gtk3.so +0 -0
  20. data/lib/2.0/gtk3.so +0 -0
  21. data/lib/2.1/gtk3.so +0 -0
  22. data/sample/gtk-demo/appwindow.rb +95 -95
  23. data/sample/gtk-demo/cairo-operator.rb +8 -8
  24. data/sample/gtk-demo/drawingarea.rb +74 -99
  25. data/sample/gtk-demo/pixbufs.rb +48 -57
  26. data/sample/misc/alpha-demo.rb +1 -1
  27. data/sample/misc/assistant.rb +45 -51
  28. data/sample/misc/cairo-pong.rb +26 -24
  29. data/sample/misc/composited-windows.rb +2 -2
  30. data/sample/misc/dnd.rb +23 -23
  31. data/sample/misc/drag-move.rb +19 -11
  32. data/sample/misc/drawing.rb +1 -1
  33. data/sample/misc/mouse-gesture.rb +3 -3
  34. data/sample/misc/pangorenderer.rb +1 -1
  35. data/sample/misc/properties.rb +1 -0
  36. data/sample/misc/to_drawable.rb +1 -1
  37. data/sample/misc/tooltips.rb +1 -1
  38. data/test/test_gtk_accessible.rb +31 -0
  39. data/test/test_gtk_entry.rb +36 -0
  40. data/test/test_gtk_header_bar.rb +66 -0
  41. data/test/test_gtk_icon_view.rb +41 -0
  42. data/test/test_gtk_level_bar.rb +82 -0
  43. data/test/test_gtk_list_store.rb +2 -1
  44. data/test/test_gtk_menu_button.rb +49 -0
  45. data/test/test_gtk_revealer.rb +57 -0
  46. data/test/test_gtk_search_bar.rb +55 -0
  47. data/test/test_gtk_search_entry.rb +34 -0
  48. data/test/test_gtk_stack.rb +115 -0
  49. data/test/test_gtk_tree_selection.rb +31 -0
  50. metadata +31 -14
data/lib/1.9/gtk3.so CHANGED
Binary file
data/lib/2.0/gtk3.so CHANGED
Binary file
data/lib/2.1/gtk3.so CHANGED
Binary file
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
1
+ # Copyright (c) 2003-2014 Ruby-GNOME2 Project Team
2
2
  # This program is licenced under the same licence as Ruby-GNOME2.
3
3
  #
4
4
  # $Id: appwindow.rb,v 1.7 2005/03/05 15:01:16 mutoh Exp $
@@ -26,98 +26,98 @@ module Demo
26
26
  add_accel_group(accel_group)
27
27
 
28
28
  item_factory = Gtk::ItemFactory.new(Gtk::ItemFactory::TYPE_MENU_BAR,
29
- '<main>', accel_group)
29
+ '<main>', accel_group)
30
30
  # create menu items
31
31
  menuitem_cb = proc do |data, widget|
32
- # TODO: Show item-factory's path to menu item
33
- dialog = Gtk::MessageDialog.new(self,
34
- Gtk::Dialog::DESTROY_WITH_PARENT,
35
- Gtk::MessageDialog::INFO,
36
- Gtk::MessageDialog::BUTTONS_CLOSE,
37
- "You selected or toggled the menu item \"#{Gtk::ItemFactory.path_from_widget(widget)}\"")
38
-
39
- # Close dialog on user response
40
- dialog.signal_connect('response') do |widget, data|
41
- widget.destroy
42
- end
43
-
44
- dialog.show
32
+ # TODO: Show item-factory's path to menu item
33
+ dialog = Gtk::MessageDialog.new(self,
34
+ Gtk::Dialog::DESTROY_WITH_PARENT,
35
+ Gtk::MessageDialog::INFO,
36
+ Gtk::MessageDialog::BUTTONS_CLOSE,
37
+ "You selected or toggled the menu item \"#{Gtk::ItemFactory.path_from_widget(widget)}\"")
38
+
39
+ # Close dialog on user response
40
+ dialog.signal_connect('response') do |widget, data|
41
+ widget.destroy
42
+ end
43
+
44
+ dialog.show
45
45
  end
46
46
 
47
47
  menu_items = [
48
- ["/_File"],
49
- ["/_File/_New",
50
- "<StockItem>", "<control>N", Gtk::Stock::NEW, menuitem_cb],
51
- ["/_File/_Open",
52
- "<StockItem>", "<control>O", Gtk::Stock::OPEN, menuitem_cb],
53
- ["/File/_Save",
54
- "<StockItem>", "<control>S", Gtk::Stock::SAVE, menuitem_cb],
55
- ["/File/Save _As...",
56
- "<StockItem>", nil, Gtk::Stock::SAVE, menuitem_cb],
57
- ["/File/sep1",
58
- "<Separator>", nil, nil, menuitem_cb],
59
- ["/File/Quit",
60
- "<StockItem>", "<control>Q", Gtk::Stock::QUIT, menuitem_cb],
61
-
62
- ["/_Preferences"],
63
- ["/_Preferences/_Color"],
64
- ["/_Preferences/Color/_Red",
65
- "<RadioItem>", nil, nil, menuitem_cb],
66
- ["/_Preferences/Color/_Green",
67
- "/Preferences/Color/Red", nil, nil, menuitem_cb],
68
- ["/_Preferences/Color/_Blue",
69
- "/Preferences/Color/Red", nil, nil, menuitem_cb],
70
-
71
- ["/Preferences/_Shape"],
72
- ["/Preferences/Shape/_Square",
73
- "<RadioItem>", nil, nil, menuitem_cb],
74
- ["/Preferences/Shape/_Rectangle",
75
- "/Preferences/Shape/Square", nil, nil, menuitem_cb],
76
- ["/Preferences/Shape/_Oval",
77
- "/Preferences/Shape/Square", nil, nil, menuitem_cb],
78
-
79
- # If you wanted this to be right justified you would use
80
- # "<LastBranch>", not "<Branch>". Right justified help menu
81
- # items are generally considered a bad idea now days.
82
- ["/_Help"],
83
- ["/Help/_About", "<Item>", nil, nil, Proc.new{about_cb}],
48
+ ["/_File"],
49
+ ["/_File/_New",
50
+ "<StockItem>", "<control>N", Gtk::Stock::NEW, menuitem_cb],
51
+ ["/_File/_Open",
52
+ "<StockItem>", "<control>O", Gtk::Stock::OPEN, menuitem_cb],
53
+ ["/File/_Save",
54
+ "<StockItem>", "<control>S", Gtk::Stock::SAVE, menuitem_cb],
55
+ ["/File/Save _As...",
56
+ "<StockItem>", nil, Gtk::Stock::SAVE, menuitem_cb],
57
+ ["/File/sep1",
58
+ "<Separator>", nil, nil, menuitem_cb],
59
+ ["/File/Quit",
60
+ "<StockItem>", "<control>Q", Gtk::Stock::QUIT, menuitem_cb],
61
+
62
+ ["/_Preferences"],
63
+ ["/_Preferences/_Color"],
64
+ ["/_Preferences/Color/_Red",
65
+ "<RadioItem>", nil, nil, menuitem_cb],
66
+ ["/_Preferences/Color/_Green",
67
+ "/Preferences/Color/Red", nil, nil, menuitem_cb],
68
+ ["/_Preferences/Color/_Blue",
69
+ "/Preferences/Color/Red", nil, nil, menuitem_cb],
70
+
71
+ ["/Preferences/_Shape"],
72
+ ["/Preferences/Shape/_Square",
73
+ "<RadioItem>", nil, nil, menuitem_cb],
74
+ ["/Preferences/Shape/_Rectangle",
75
+ "/Preferences/Shape/Square", nil, nil, menuitem_cb],
76
+ ["/Preferences/Shape/_Oval",
77
+ "/Preferences/Shape/Square", nil, nil, menuitem_cb],
78
+
79
+ # If you wanted this to be right justified you would use
80
+ # "<LastBranch>", not "<Branch>". Right justified help menu
81
+ # items are generally considered a bad idea now days.
82
+ ["/_Help"],
83
+ ["/Help/_About", "<Item>", nil, nil, Proc.new{about_cb}],
84
84
  ]
85
85
  item_factory.create_items(menu_items)
86
86
 
87
87
  table.attach(item_factory.get_widget('<main>'),
88
- # X direction # Y direction
89
- 0, 1, 0, 1,
90
- Gtk::EXPAND | Gtk::FILL, 0,
91
- 0, 0)
88
+ # X direction # Y direction
89
+ 0, 1, 0, 1,
90
+ Gtk::EXPAND | Gtk::FILL, 0,
91
+ 0, 0)
92
92
 
93
93
  ## Create the toolbar
94
94
  toolbar = Gtk::Toolbar.new
95
95
  # toolbar.set_toolbar_style(Gtk::Toolbar::BOTH)
96
96
  toolbar.append(Gtk::Stock::OPEN,
97
- "This is a demo button with an 'open' icon"
98
- ) do toolbar_cb end
97
+ "This is a demo button with an 'open' icon"
98
+ ) do toolbar_cb end
99
99
  toolbar.append(Gtk::Stock::QUIT,
100
- "This is a demo button with an 'quit' icon"
101
- ) do toolbar_cb end
100
+ "This is a demo button with an 'quit' icon"
101
+ ) do toolbar_cb end
102
102
  toolbar.append_space
103
103
  toolbar.append(:demo_gtk_logo,
104
- "This is a demo button with an 'gtk' icon"
105
- ) do toolbar_cb end
104
+ "This is a demo button with an 'gtk' icon"
105
+ ) do toolbar_cb end
106
106
  table.attach(toolbar,
107
- # X direction # Y direction
108
- 0, 1, 1, 2,
109
- Gtk::EXPAND | Gtk::FILL, 0,
110
- 0, 0)
107
+ # X direction # Y direction
108
+ 0, 1, 1, 2,
109
+ Gtk::EXPAND | Gtk::FILL, 0,
110
+ 0, 0)
111
111
 
112
112
  ## Create document
113
113
  sw = Gtk::ScrolledWindow.new
114
114
  sw.set_policy(:automatic, :automatic)
115
115
  sw.shadow_type = :in
116
116
  table.attach(sw,
117
- # X direction # Y direction
118
- 0, 1, 2, 3,
119
- Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL,
120
- 0, 0)
117
+ # X direction # Y direction
118
+ 0, 1, 2, 3,
119
+ Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL,
120
+ 0, 0)
121
121
 
122
122
  set_default_size(200, 200)
123
123
 
@@ -127,32 +127,32 @@ module Demo
127
127
  ## Create statusbar
128
128
  statusbar = Gtk::Statusbar.new
129
129
  table.attach(statusbar,
130
- # X direction # Y direction
131
- 0, 1, 3, 4,
132
- Gtk::EXPAND | Gtk::FILL, 0,
133
- 0, 0)
130
+ # X direction # Y direction
131
+ 0, 1, 3, 4,
132
+ Gtk::EXPAND | Gtk::FILL, 0,
133
+ 0, 0)
134
134
 
135
135
  # Show text widget info in the statusbar
136
136
  buffer = contents.buffer
137
137
  buffer.signal_connect('changed') do |buffer|
138
- update_statusbar(buffer, statusbar)
138
+ update_statusbar(buffer, statusbar)
139
139
  end
140
140
  # cursor moved
141
141
  buffer.signal_connect('mark_set') do |buffer, iter, mark|
142
- update_statusbar(buffer, statusbar)
142
+ update_statusbar(buffer, statusbar)
143
143
  end
144
144
  end
145
145
 
146
146
  def toolbar_cb(*args)
147
147
  dialog = Gtk::MessageDialog.new(self,
148
- Gtk::Dialog::DESTROY_WITH_PARENT,
149
- Gtk::MessageDialog::INFO,
150
- Gtk::MessageDialog::BUTTONS_CLOSE,
151
- "You selected a toolbar button")
148
+ Gtk::Dialog::DESTROY_WITH_PARENT,
149
+ Gtk::MessageDialog::INFO,
150
+ Gtk::MessageDialog::BUTTONS_CLOSE,
151
+ "You selected a toolbar button")
152
152
 
153
153
  # Close dialog on user response
154
154
  dialog.signal_connect('response') do |widget, data|
155
- widget.destroy
155
+ widget.destroy
156
156
  end
157
157
 
158
158
  dialog.show
@@ -165,8 +165,8 @@ module Demo
165
165
  end
166
166
 
167
167
  authors = ["Peter Mattis", "Spencer Kimball", "Josh MacDonald", "and many more..."]
168
- documentors = ["Owen Taylor", "Tony Gale", "Mattias Clasen <mclasen@redhat.com>",
169
- "and many more..."]
168
+ documentors = ["Owen Taylor", "Tony Gale", "Mattias Clasen <mclasen@redhat.com>",
169
+ "and many more..."]
170
170
  license = %Q[
171
171
  This library is free software; you can redistribute it and/or
172
172
  modify it under the terms of the GNU Library General Public License as
@@ -185,23 +185,23 @@ Boston, MA 02111-1307, USA.
185
185
  ]
186
186
 
187
187
  transparent = Gdk::Pixbuf.new(Demo.find_file("gtk-logo-rgb.gif")).add_alpha(true, 0xff, 0xff, 0xff)
188
-
188
+
189
189
  Gtk::AboutDialog.set_email_hook {|about, link|
190
- puts "send mail to #{link}"
190
+ puts "send mail to #{link}"
191
191
  }
192
192
  Gtk::AboutDialog.set_url_hook {|about, link|
193
- puts "show url #{link}"
193
+ puts "show url #{link}"
194
194
  }
195
195
  Gtk::AboutDialog.show(self,
196
- :name => "GTK+ Code Demos",
197
- :version => Gtk::VERSION.join("."),
198
- :copyright => "(C) 1997-2004 The GTK+ Team",
199
- :license => license,
200
- :website => "http://www.gtk.org",
201
- :comments => "Program to demonstrate GTK+ functions.",
202
- :authors => authors,
203
- :documenters => documentors,
204
- :logo => transparent)
196
+ :name => "GTK+ Code Demos",
197
+ :version => Gtk::VERSION.join("."),
198
+ :copyright => "(C) 1997-2004 The GTK+ Team",
199
+ :license => license,
200
+ :website => "http://www.gtk.org",
201
+ :comments => "Program to demonstrate GTK+ functions.",
202
+ :authors => authors,
203
+ :documenters => documentors,
204
+ :logo => transparent)
205
205
  end
206
206
 
207
207
  def update_statusbar(buffer, statusbar)
@@ -210,7 +210,7 @@ Boston, MA 02111-1307, USA.
210
210
  iter = buffer.get_iter_at_mark(buffer.get_mark('insert'))
211
211
 
212
212
  statusbar.push(0,
213
- "Cursor at row #{iter.line} column #{iter.line_offset} - #{buffer.char_count} chars in document")
213
+ "Cursor at row #{iter.line} column #{iter.line_offset} - #{buffer.char_count} chars in document")
214
214
  end
215
215
 
216
216
  def register_stock_icons
@@ -18,20 +18,20 @@ From http://cairographics.org/samples/operator_add.html,
18
18
  http://cairographics.org/samples/operator_saturate.html and
19
19
  http://cairographics.org/samples/operator_xor.html
20
20
  =end
21
- require 'common'
21
+ require "common"
22
22
 
23
23
  module Demo
24
24
  class CairoOperator < CairoWindow
25
25
  def initialize
26
- super('cairo operator')
26
+ super("cairo operator")
27
27
  @operator = Cairo::OPERATOR_ADD
28
28
 
29
29
  set_default_size(400, 400)
30
-
30
+
31
31
  @drawing_area = child
32
32
  remove(@drawing_area)
33
-
34
- vbox = Gtk::VBox.new
33
+
34
+ vbox = Gtk::Box.new(:vertical)
35
35
  vbox.pack_start(@drawing_area, :expand => true, :fill => true)
36
36
  vbox.pack_start(operator_selector, :expand => false, :fill => false)
37
37
  add(vbox)
@@ -47,9 +47,9 @@ module Demo
47
47
  cr.set_source(image, 0.0, 0.0)
48
48
  cr.paint
49
49
  end
50
-
50
+
51
51
  cr.set_operator(@operator)
52
-
52
+
53
53
  cr.set_source_rgba(1, 0, 0, 0.5)
54
54
  cr.rectangle(0.2, 0.2, 0.5, 0.5)
55
55
  cr.fill
@@ -62,7 +62,7 @@ module Demo
62
62
  end
63
63
 
64
64
  def operator_selector
65
- combo = Gtk::ComboBox.new
65
+ combo = Gtk::ComboBoxText.new
66
66
  operators = []
67
67
  Cairo.constants.each do |name|
68
68
  operators << name if /^OPERATOR_/ =~ name
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
1
+ # Copyright (c) 2003-2014 Ruby-GNOME2 Project Team
2
2
  # This program is licenced under the same licence as Ruby-GNOME2.
3
3
  #
4
4
  # $Id: drawingarea.rb,v 1.5 2005/02/12 23:02:43 kzys Exp $
@@ -18,50 +18,49 @@ and drag in the scribble area to draw squiggles. Resize the window
18
18
  to clear the area.
19
19
  =end
20
20
 
21
- require 'common'
21
+ require "common"
22
22
 
23
23
  module Demo
24
24
  class DrawingArea < BasicWindow
25
25
  def initialize
26
26
  # Pixmap for scribble area, to store current scribbles
27
- @pixmap = nil
28
- super('Drawing Area')
27
+ @cairo_context = nil
28
+ super("Drawing Area")
29
29
 
30
30
  self.border_width = 8
31
31
 
32
- vbox = Gtk::VBox.new(false, 8)
32
+ vbox = Gtk::Box.new(:vertical, 8)
33
33
  vbox.border_width = 8
34
34
  add(vbox)
35
35
 
36
-
37
36
  ## Create the checkerboard area
38
37
  label = Gtk::Label.new
39
- label.set_markup('<u>Checkerboard pattern</u>')
38
+ label.set_markup("<u>Checkerboard pattern</u>")
40
39
  vbox.pack_start(label, :expand => false, :fill => false, :padding => 0)
41
-
40
+
42
41
  frame = Gtk::Frame.new
43
42
  frame.shadow_type = :in
44
43
  vbox.pack_start(frame, :expand => true, :fill => true, :padding => 0)
45
-
44
+
46
45
  da = Gtk::DrawingArea.new
47
46
  # set a minimum size
48
47
  da.set_size_request(100, 100)
49
48
 
50
49
  frame.add(da)
51
50
 
52
- da.signal_connect('expose_event') do |widget, event|
53
- checkerboard_expose(widget)
51
+ da.signal_connect("draw") do |widget, event|
52
+ checkerboard_draw(widget, event)
54
53
  end
55
54
 
56
55
  ## Create the scribble area
57
56
  label = Gtk::Label.new
58
- label.set_markup('<u>Scribble area</u>')
57
+ label.set_markup("<u>Scribble area</u>")
59
58
  vbox.pack_start(label, :expand => false, :fill => false, :padding => 0)
60
-
59
+
61
60
  frame = Gtk::Frame.new
62
61
  frame.shadow_type = :in
63
62
  vbox.pack_start(frame, :expand => true, :fill => true, :padding => 0)
64
-
63
+
65
64
  da = Gtk::DrawingArea.new
66
65
  # set a minimum size
67
66
  da.set_size_request(100, 100)
@@ -69,42 +68,34 @@ module Demo
69
68
  frame.add(da)
70
69
 
71
70
  # Signals used to handle backing pixmap
72
- da.signal_connect('expose_event') do |*args|
73
- scribble_expose_event(*args)
71
+ da.signal_connect("draw") do |*args|
72
+ scribble_draw(*args)
74
73
  end
75
- da.signal_connect('configure_event') do |widget, event|
76
- scribble_configure_event(widget)
74
+ da.signal_connect("configure-event") do |widget, event|
75
+ scribble_configure_event(widget)
77
76
  end
78
-
77
+
79
78
  # Event signals
80
- da.signal_connect('motion_notify_event') do |*args|
81
- scribble_motion_notify_event(*args)
79
+ da.signal_connect("motion-notify-event") do |*args|
80
+ scribble_motion_notify_event(*args)
82
81
  end
83
- da.signal_connect('button_press_event') do |*args|
84
- scribble_button_press_event(*args)
82
+ da.signal_connect("button-press-event") do |*args|
83
+ scribble_button_press_event(*args)
85
84
  end
86
-
85
+
87
86
  # Ask to receive events the drawing area doesn't normally
88
87
  # subscribe to
89
88
  da.events |= (Gdk::Event::LEAVE_NOTIFY_MASK |
90
- Gdk::Event::BUTTON_PRESS_MASK |
91
- Gdk::Event::POINTER_MOTION_MASK |
92
- Gdk::Event::POINTER_MOTION_HINT_MASK)
89
+ Gdk::Event::BUTTON_PRESS_MASK |
90
+ Gdk::Event::POINTER_MOTION_MASK |
91
+ Gdk::Event::POINTER_MOTION_HINT_MASK)
93
92
  end
94
93
 
95
- # Create a new pixmap of the appropriate size to store our scribbles
94
+ # Create a new surface of the appropriate size to store our scribbles
96
95
  def scribble_configure_event(widget)
97
- @pixmap = Gdk::Pixmap.new(self.window,
98
- widget.allocation.width,
99
- widget.allocation.height,
100
- -1)
101
-
102
- # Initialize the pixmap to white
103
- @pixmap.draw_rectangle(widget.style.white_gc,
104
- true,
105
- 0, 0,
106
- widget.allocation.width,
107
- widget.allocation.height)
96
+ @cairo_context = widget.window.create_cairo_context
97
+ @cairo_context.set_source_rgb(1, 1, 1)
98
+ @cairo_context.paint
108
99
 
109
100
  # We've handled the configure event, no need for further processing.
110
101
  return true
@@ -112,41 +103,32 @@ module Demo
112
103
 
113
104
  CHECK_SIZE = 10
114
105
  SPACING = 2
115
- def checkerboard_expose(da)
116
- # At the start of an expose handler, a clip region of event.area
106
+ def checkerboard_draw(da, cairo_context)
107
+ # At the start of a draw handler, a clip region of event.area
117
108
  # is set on the window, and event.area has been cleared to the
118
109
  # widget's background color. The docs for
119
110
  # gdk_window_begin_paint_region give more details on how this
120
111
  # works.
121
-
122
-
123
- # It would be a bit more efficient to keep these
124
- # GC's around instead of recreating on each expose, but
125
- # this is the lazy/slow way.
126
- gc1 = Gdk::GC.new(da.window)
127
- gc1.rgb_fg_color = Gdk::Color.new(30000, 0, 30000)
128
-
129
- gc2 = Gdk::GC.new(da.window)
130
- gc2.rgb_fg_color = Gdk::Color.new(65535, 65535, 65535)
131
112
 
132
113
  xcount = 0
114
+ width = da.allocated_width
115
+ height = da.allocated_height
133
116
  SPACING.step(da.allocation.width, CHECK_SIZE + SPACING) do |i|
134
- ycount = xcount % 2; # start with even/odd depending on row
135
- SPACING.step(da.allocation.height, CHECK_SIZE + SPACING) do |j|
136
- gc = if ycount % 2 == 1
137
- gc1
138
- else
139
- gc2
140
- end
141
-
142
- # If we're outside event.area, this will do nothing.
143
- # It might be mildly more efficient if we handled
144
- # the clipping ourselves, but again we're feeling lazy.
145
-
146
- da.window.draw_rectangle(gc, true, i, j, CHECK_SIZE, CHECK_SIZE)
147
- ycount += 1
148
- end
149
- xcount += 1
117
+ ycount = xcount % 2; # start with even/odd depending on row
118
+ SPACING.step(da.allocation.height, CHECK_SIZE + SPACING) do |j|
119
+ if ycount % 2 == 1
120
+ cairo_context.set_source_rgb(0.45777, 0, 0.45777)
121
+ else
122
+ cairo_context.set_source_rgb(1, 1, 1)
123
+ end
124
+
125
+ # If we're outside the clip, this will do nothing.
126
+ cairo_context.fill do
127
+ cairo_context.rectangle(i, j, CHECK_SIZE, CHECK_SIZE)
128
+ end
129
+ ycount += 1
130
+ end
131
+ xcount += 1
150
132
  end
151
133
  # return true because we've handled this event, so no
152
134
  # further processing is required.
@@ -154,43 +136,36 @@ module Demo
154
136
  return true
155
137
  end
156
138
 
157
- # Redraw the screen from the pixmap
158
- def scribble_expose_event(widget, event)
159
- # We use the 'foreground GC' for the widget since it already exists,
160
- # but honestly any GC would work. The only thing to worry about
161
- # is whether the GC has an inappropriate clip region set.
162
- widget.window.draw_drawable(widget.style.fg_gc(widget.state),
163
- @pixmap,
164
- # Only copy the area that was exposed.
165
- event.area.x, event.area.y,
166
- event.area.x, event.area.y,
167
- event.area.width, event.area.height)
139
+ # Redraw the screen from the surface
140
+ def scribble_draw(widget, event)
141
+ event.set_source(@cairo_context.target)
142
+ event.paint
168
143
  return false
169
144
  end
170
145
 
171
-
172
-
146
+ # Draw a rectangle on the screen
173
147
  def draw_brush(widget, x, y)
174
148
  update_rect = Gdk::Rectangle.new(x - 3, y - 3, 6, 6)
175
149
 
176
- # Paint to the pixmap, where we store our state
177
- @pixmap.draw_rectangle(widget.style.black_gc,
178
- true,
179
- update_rect.x, update_rect.y,
180
- update_rect.width, update_rect.height)
150
+ # Paint to the surface, where we store our state
151
+ @cairo_context.fill do
152
+ @cairo_context.set_source_rgb(0, 0, 0)
153
+ @cairo_context.rectangle(update_rect.x,
154
+ update_rect.y,
155
+ update_rect.width,
156
+ update_rect.height)
157
+ end
181
158
 
182
159
  # Now invalidate the affected region of the drawing area.
183
160
  widget.window.invalidate(update_rect, false)
184
161
  end
185
162
 
186
163
  def scribble_button_press_event(widget, event)
187
- unless @pixmap
188
- # paranoia check, in case we haven't gotten a configure event
189
- return false
190
- end
191
-
164
+ # paranoia check, in case we haven't gotten a configure event
165
+ return false unless @cairo_context
166
+
192
167
  if event.button == 1
193
- draw_brush(widget, event.x, event.y)
168
+ draw_brush(widget, event.x, event.y)
194
169
  end
195
170
 
196
171
  # We've handled the event, stop processing
@@ -198,10 +173,8 @@ module Demo
198
173
  end
199
174
 
200
175
  def scribble_motion_notify_event(widget, event)
201
- unless @pixmap
202
- # paranoia check, in case we haven't gotten a configure event
203
- return false
204
- end
176
+ # paranoia check, in case we haven't gotten a configure event
177
+ return false unless @cairo_context
205
178
 
206
179
  # This call is very important; it requests the next motion event.
207
180
  # If you don't call Gdk::Window#pointer you'll only get
@@ -212,11 +185,13 @@ module Demo
212
185
  # By requesting the next event as we handle the current one,
213
186
  # we avoid getting a huge number of events faster than we
214
187
  # can cope.
215
-
216
- win, x, y, state = event.window.pointer
217
188
 
218
- if (state & Gdk::Window::BUTTON1_MASK) != 0
219
- draw_brush(widget, x, y)
189
+ # NOTE: Gdk::EventMotion#window will be restored from Ruby/GDK3 2.1.1.
190
+ # win, x, y, state = event.window.get_device_position(event.device)
191
+ win, x, y, state = widget.window.get_device_position(event.device)
192
+
193
+ if (state & :button1_mask) != 0
194
+ draw_brush(widget, x, y)
220
195
  end
221
196
 
222
197
  # We've handled it, stop processing