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

Sign up to get free protection for your applications and to get access to all the features.
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