rabbit 3.0.5 → 4.0.0
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/data/locale/ja/LC_MESSAGES/rabbit.mo +0 -0
- data/doc/_config.yml +2 -2
- data/doc/en/news.rd +54 -0
- data/doc/ja/news.rd +54 -0
- data/lib/rabbit/actions.rb +446 -0
- data/lib/rabbit/author-configuration.rb +7 -10
- data/lib/rabbit/canvas.rb +74 -42
- data/lib/rabbit/command/rabbit-slide.rb +11 -13
- data/lib/rabbit/command/rabbit-theme.rb +10 -12
- data/lib/rabbit/command/rabbit.rb +31 -43
- data/lib/rabbit/console.rb +20 -22
- data/lib/rabbit/dependency-canvas.rb +2 -2
- data/lib/rabbit/element/base.rb +93 -6
- data/lib/rabbit/element/block-element.rb +17 -1
- data/lib/rabbit/element/block.rb +17 -1
- data/lib/rabbit/element/container-element.rb +59 -3
- data/lib/rabbit/element/description-list.rb +18 -2
- data/lib/rabbit/element/enum-list.rb +18 -2
- data/lib/rabbit/element/footnote.rb +18 -2
- data/lib/rabbit/element/image-title-slide.rb +17 -1
- data/lib/rabbit/element/image.rb +32 -2
- data/lib/rabbit/element/index-slide.rb +29 -13
- data/lib/rabbit/element/item-list.rb +18 -2
- data/lib/rabbit/element/method-list.rb +18 -2
- data/lib/rabbit/element/poppler-page.rb +17 -1
- data/lib/rabbit/element/poppler-slide.rb +18 -2
- data/lib/rabbit/element/poppler-title-slide.rb +18 -2
- data/lib/rabbit/element/preformatted.rb +18 -2
- data/lib/rabbit/element/slide-element.rb +29 -2
- data/lib/rabbit/element/slide.rb +18 -2
- data/lib/rabbit/element/syntax-highlighting.rb +17 -1
- data/lib/rabbit/element/table.rb +19 -3
- data/lib/rabbit/element/tag.rb +18 -2
- data/lib/rabbit/element/text-block-element.rb +18 -2
- data/lib/rabbit/element/text-container-element.rb +41 -2
- data/lib/rabbit/element/text-element.rb +17 -1
- data/lib/rabbit/element/text-renderer.rb +17 -1
- data/lib/rabbit/element/text.rb +4 -4
- data/lib/rabbit/element/title-slide.rb +19 -3
- data/lib/rabbit/element/video.rb +157 -56
- data/lib/rabbit/element.rb +20 -20
- data/lib/rabbit/formatter.rb +18 -1
- data/lib/rabbit/frame.rb +102 -90
- data/lib/rabbit/front.rb +11 -4
- data/lib/rabbit/gem-finder.rb +4 -8
- data/lib/rabbit/gem-pusher.rb +4 -4
- data/lib/rabbit/gesture/handler.rb +26 -21
- data/lib/rabbit/graffiti/config-dialog.rb +18 -2
- data/lib/rabbit/graffiti/processor.rb +20 -4
- data/lib/rabbit/gtk.rb +48 -14
- data/lib/rabbit/html/generator.rb +18 -18
- data/{test/helper/fixture.rb → lib/rabbit/icon.rb} +16 -6
- data/lib/rabbit/image/base.rb +7 -6
- data/lib/rabbit/image/default.rb +17 -1
- data/lib/rabbit/image/dia.rb +2 -2
- data/lib/rabbit/image/eps.rb +16 -2
- data/lib/rabbit/image/gimp.rb +28 -11
- data/lib/rabbit/image/mermaid.rb +3 -3
- data/lib/rabbit/image/pdf.rb +3 -3
- data/lib/rabbit/image/svg.rb +2 -2
- data/lib/rabbit/image.rb +8 -8
- data/lib/rabbit/info-window.rb +55 -18
- data/lib/rabbit/key-handler.rb +381 -0
- data/lib/rabbit/keys.rb +31 -2
- data/lib/rabbit/logger/base.rb +17 -1
- data/lib/rabbit/logger/gui.rb +20 -4
- data/lib/rabbit/logger/stderr.rb +16 -2
- data/lib/rabbit/logger.rb +4 -4
- data/lib/rabbit/menu.rb +200 -220
- data/lib/rabbit/parser/base.rb +17 -1
- data/lib/rabbit/parser/ext/aafigure.rb +17 -1
- data/lib/rabbit/parser/ext/blockdiag.rb +17 -1
- data/lib/rabbit/parser/ext/charty.rb +2 -2
- data/lib/rabbit/parser/ext/coderay.rb +20 -4
- data/lib/rabbit/parser/ext/enscript.rb +31 -15
- data/lib/rabbit/parser/ext/entity.rb +17 -1
- data/lib/rabbit/parser/ext/image.rb +6 -6
- data/lib/rabbit/parser/ext/inline.rb +17 -1
- data/lib/rabbit/parser/ext/rouge.rb +7 -4
- data/lib/rabbit/parser/ext/tex.rb +18 -2
- data/lib/rabbit/parser/ext/video.rb +4 -4
- data/lib/rabbit/parser/image.rb +20 -4
- data/lib/rabbit/parser/markdown/converter.rb +12 -13
- data/lib/rabbit/parser/markdown.rb +18 -2
- data/lib/rabbit/parser/pause-support.rb +1 -0
- data/lib/rabbit/parser/pdf.rb +3 -3
- data/lib/rabbit/parser/rd/ext/base.rb +20 -4
- data/lib/rabbit/parser/rd/ext/block-verbatim.rb +24 -28
- data/lib/rabbit/parser/rd/ext/character-reference.rb +18 -2
- data/lib/rabbit/parser/rd/ext/image.rb +3 -3
- data/lib/rabbit/parser/rd/ext/inline-verbatim.rb +6 -6
- data/lib/rabbit/parser/rd/ext/refer.rb +18 -2
- data/lib/rabbit/parser/rd/ext/video.rb +19 -2
- data/lib/rabbit/parser/rd/rd2rabbit-lib.rb +24 -8
- data/lib/rabbit/parser/rd/rt/rt2rabbit-lib.rb +18 -2
- data/lib/rabbit/parser/rd/visitor.rb +18 -2
- data/lib/rabbit/parser/rd.rb +18 -2
- data/lib/rabbit/parser/wiki/output.rb +25 -28
- data/lib/rabbit/parser/wiki.rb +18 -2
- data/lib/rabbit/parser.rb +6 -6
- data/lib/rabbit/path-manipulatable.rb +4 -4
- data/lib/rabbit/progress.rb +17 -1
- data/lib/rabbit/properties.rb +3 -3
- data/lib/rabbit/rabbit.rb +15 -7
- data/lib/rabbit/readme-parser.rb +4 -6
- data/lib/rabbit/renderer/base.rb +44 -36
- data/lib/rabbit/renderer/color.rb +18 -2
- data/lib/rabbit/renderer/display/base.rb +10 -12
- data/lib/rabbit/renderer/display/button-handler.rb +141 -60
- data/lib/rabbit/renderer/display/cursor.rb +4 -5
- data/lib/rabbit/renderer/display/drawing-area-base.rb +32 -48
- data/lib/rabbit/renderer/display/drawing-area-primitive.rb +10 -61
- data/lib/rabbit/renderer/display/drawing-area-view-only.rb +19 -8
- data/lib/rabbit/renderer/display/drawing-area.rb +19 -15
- data/lib/rabbit/renderer/display/gesture.rb +9 -9
- data/lib/rabbit/renderer/display/graffiti.rb +22 -13
- data/lib/rabbit/renderer/display/info.rb +22 -2
- data/lib/rabbit/renderer/display/magnifier.rb +30 -17
- data/lib/rabbit/renderer/display/mask.rb +17 -1
- data/lib/rabbit/renderer/display/menu.rb +27 -3
- data/lib/rabbit/renderer/display/motion-handler.rb +45 -0
- data/lib/rabbit/renderer/display/progress.rb +17 -2
- data/lib/rabbit/renderer/display/scroll-handler.rb +60 -13
- data/lib/rabbit/renderer/display/search.rb +19 -2
- data/lib/rabbit/renderer/display/spotlight.rb +39 -25
- data/lib/rabbit/renderer/display.rb +16 -36
- data/lib/rabbit/renderer/engine/cairo.rb +4 -11
- data/lib/rabbit/renderer/engine.rb +17 -1
- data/lib/rabbit/renderer/kernel.rb +2 -20
- data/lib/rabbit/renderer/offscreen.rb +8 -14
- data/lib/rabbit/renderer/print-layout.rb +2 -2
- data/lib/rabbit/renderer/printer.rb +9 -16
- data/lib/rabbit/renderer/scene-background-widget.rb +95 -0
- data/lib/rabbit/renderer/scene-node-widget.rb +63 -0
- data/lib/rabbit/renderer/scene.rb +508 -0
- data/lib/rabbit/renderer.rb +6 -6
- data/lib/rabbit/search-window.rb +18 -2
- data/lib/rabbit/searcher.rb +15 -1
- data/lib/rabbit/size.rb +9 -1
- data/lib/rabbit/slide-configuration.rb +11 -14
- data/lib/rabbit/soap/driver.rb +20 -4
- data/lib/rabbit/soap/server.rb +17 -1
- data/lib/rabbit/source/argf.rb +5 -5
- data/lib/rabbit/source/base.rb +5 -6
- data/lib/rabbit/source/file.rb +5 -5
- data/lib/rabbit/source/memory.rb +20 -4
- data/lib/rabbit/source/uri.rb +9 -11
- data/lib/rabbit/source-generator/hiki.rb +2 -7
- data/lib/rabbit/source-generator/markdown.rb +2 -7
- data/lib/rabbit/source-generator/rd.rb +2 -7
- data/lib/rabbit/source-generator.rb +4 -4
- data/lib/rabbit/source.rb +5 -5
- data/lib/rabbit/task/slide.rb +13 -11
- data/lib/rabbit/task/theme.rb +8 -11
- data/lib/rabbit/task.rb +3 -3
- data/lib/rabbit/theme/applier.rb +27 -11
- data/lib/rabbit/theme/clear-blue/clear-blue.rb +1 -1
- data/lib/rabbit/theme/color-circle/color-circle.rb +18 -1
- data/lib/rabbit/theme/cozmixng/cozmixng.rb +1 -1
- data/lib/rabbit/theme/default/default.rb +1 -0
- data/lib/rabbit/theme/default-icon/default-icon.rb +1 -1
- data/lib/rabbit/theme/default-item-mark-setup/default-item-mark-setup.rb +17 -1
- data/lib/rabbit/theme/default-preformatted/default-preformatted.rb +9 -1
- data/lib/rabbit/theme/enishi-green/enishi-green.rb +1 -1
- data/lib/rabbit/theme/entry.rb +10 -12
- data/lib/rabbit/theme/icon/icon.rb +3 -8
- data/lib/rabbit/theme/image-slide-number/image-slide-number.rb +5 -5
- data/lib/rabbit/theme/image-timer/image-timer.rb +3 -3
- data/lib/rabbit/theme/lightning-simple/lightning-simple.rb +1 -0
- data/lib/rabbit/theme/lightning-talk/lightning-talk.rb +1 -0
- data/lib/rabbit/theme/manager.rb +19 -9
- data/lib/rabbit/theme/rabbit-icon/rabbit-icon.rb +1 -1
- data/lib/rabbit/theme/ranguba/ranguba.rb +1 -1
- data/lib/rabbit/theme/red-frame/red-frame.rb +6 -2
- data/lib/rabbit/theme/ruby-gnome2/ruby-gnome2.rb +1 -0
- data/lib/rabbit/theme/ruby-gnome2-icon/ruby-gnome2-icon.rb +1 -1
- data/lib/rabbit/theme/searcher.rb +23 -7
- data/lib/rabbit/theme/slide-number/slide-number.rb +1 -1
- data/lib/rabbit/theme/slide-show/slide-show.rb +1 -1
- data/lib/rabbit/theme/table/table.rb +2 -2
- data/lib/rabbit/theme/video/property.rb +3 -0
- data/lib/rabbit/theme/video/video.rb +5 -0
- data/lib/rabbit/theme-configuration.rb +9 -11
- data/lib/rabbit/utils.rb +12 -94
- data/lib/rabbit/version.rb +1 -1
- data/lib/rabbit/xmlrpc/client.rb +17 -1
- data/lib/rabbit/xmlrpc/server.rb +17 -1
- data/po/en/rabbit.edit.po +324 -316
- data/po/en/rabbit.po +61 -55
- data/po/fr/rabbit.edit.po +324 -316
- data/po/fr/rabbit.po +61 -55
- data/po/ja/rabbit.edit.po +345 -370
- data/po/ja/rabbit.po +83 -80
- data/rabbit.gemspec +4 -2
- data/sample/block-quote.rab +13 -0
- data/sample/description-list.rab +17 -0
- data/sample/mermaid.rab +16 -0
- data/sample/rabbit-en.hiki +0 -1
- data/sample/rabbit-en.md +0 -1
- data/sample/rabbit-en.rd +0 -1
- data/sample/rabbit.hiki +0 -1
- data/sample/rabbit.md +0 -1
- data/sample/rabbit.rd +0 -1
- data/sample/video.rab +17 -0
- metadata +33 -65
- data/lib/rabbit/action/basic.rb +0 -304
- data/lib/rabbit/action/radio.rb +0 -78
- data/lib/rabbit/action/toggle.rb +0 -82
- data/lib/rabbit/action.rb +0 -140
- data/lib/rabbit/renderer/display/gl.rb +0 -98
- data/lib/rabbit/renderer/display/key-handler.rb +0 -321
- data/lib/rabbit/renderer/gl.rb +0 -95
- data/lib/rabbit/renderer/screen.rb +0 -286
- data/lib/rabbit/renderer/widget/drawing-area.rb +0 -93
- data/lib/rabbit/stock.rb +0 -31
- data/lib/rabbit/trackball.rb +0 -228
- data/lib/rabbit/video-window.rb +0 -123
- data/test/command/test-rabbit.rb +0 -101
- data/test/helper/parser.rb +0 -48
- data/test/helper.rb +0 -24
- data/test/image/test-dia.rb +0 -54
- data/test/image/test-eps.rb +0 -41
- data/test/parser/test-markdown.rb +0 -360
- data/test/parser/test-rd.rb +0 -43
- data/test/parser/test-wiki.rb +0 -71
- data/test/run-test.rb +0 -27
- data/test/source-generator/test-hiki.rb +0 -68
- data/test/source-generator/test-markdown.rb +0 -67
- data/test/source-generator/test-rd.rb +0 -69
- data/test/test-applier.rb +0 -73
- data/test/test-author-configuration.rb +0 -37
- data/test/test-canvas.rb +0 -70
- data/test/test-color.rb +0 -51
- data/test/test-element.rb +0 -103
- data/test/test-readme-parser.rb +0 -160
- data/test/test-size.rb +0 -155
- data/test/test-slide-configuration.rb +0 -74
- data/test/test-source.rb +0 -122
- data/test/test-theme-configuration.rb +0 -47
- data/test/test-utils.rb +0 -64
data/lib/rabbit/renderer/base.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2004-
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -16,28 +16,28 @@
|
|
16
16
|
|
17
17
|
require "forwardable"
|
18
18
|
require "erb"
|
19
|
-
require "rabbit/gtk"
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
require_relative "../gtk"
|
21
|
+
|
22
|
+
require_relative "../rabbit"
|
23
|
+
require_relative "color"
|
24
24
|
|
25
25
|
module Rabbit
|
26
26
|
module Renderer
|
27
|
-
|
27
|
+
class Base
|
28
28
|
extend Forwardable
|
29
29
|
|
30
30
|
include ERB::Util
|
31
31
|
include GetText
|
32
32
|
include DirtyCount
|
33
33
|
|
34
|
-
def_delegators(:@canvas, :reload_source)
|
35
|
-
|
36
34
|
attr_accessor :base_width
|
37
35
|
attr_accessor :base_height
|
38
36
|
attr_accessor :paper_width, :paper_height, :slides_per_page
|
39
37
|
attr_accessor :margin_left, :margin_right
|
40
38
|
attr_accessor :margin_top, :margin_bottom
|
39
|
+
attr_accessor :foreground
|
40
|
+
attr_accessor :background
|
41
41
|
attr_accessor :progress_foreground
|
42
42
|
attr_accessor :progress_background
|
43
43
|
attr_accessor :adjustment_x, :adjustment_y
|
@@ -68,13 +68,14 @@ module Rabbit
|
|
68
68
|
@blackout = false
|
69
69
|
@adjustment_x = 0
|
70
70
|
@adjustment_y = 0
|
71
|
+
@foreground = nil
|
72
|
+
@background = nil
|
71
73
|
@progress_foreground = nil
|
72
74
|
@progress_background = nil
|
73
75
|
@graffiti_color = nil
|
74
76
|
@graffiti_line_width = nil
|
75
77
|
@draw_scaled_image = true
|
76
78
|
clean
|
77
|
-
init_gl_parameters
|
78
79
|
end
|
79
80
|
|
80
81
|
def page_margin_left
|
@@ -100,12 +101,24 @@ module Rabbit
|
|
100
101
|
@font_families
|
101
102
|
end
|
102
103
|
|
104
|
+
def make_color(color)
|
105
|
+
return color if color.is_a?(Color)
|
106
|
+
if color.nil?
|
107
|
+
@foreground
|
108
|
+
else
|
109
|
+
Color.parse(color)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def set_font_resolution(context)
|
114
|
+
end
|
115
|
+
|
103
116
|
def print(&block)
|
104
117
|
if printable?
|
105
118
|
do_print(&block)
|
106
119
|
else
|
107
120
|
canvas = make_canvas_with_printable_renderer
|
108
|
-
pre_print(canvas.
|
121
|
+
pre_print(canvas.n_slides)
|
109
122
|
canceled = false
|
110
123
|
canvas.print do |i|
|
111
124
|
result = printing(i)
|
@@ -133,7 +146,7 @@ module Rabbit
|
|
133
146
|
def each_slide_pixbuf
|
134
147
|
canvas = offscreen_canvas
|
135
148
|
previous_index = canvas.current_index
|
136
|
-
pre_to_pixbuf(canvas.
|
149
|
+
pre_to_pixbuf(canvas.n_slides)
|
137
150
|
canceled = false
|
138
151
|
canvas.slides.each_with_index do |slide, i|
|
139
152
|
if !to_pixbufing(i) or !yield(slide, canvas.to_pixbuf(i), i)
|
@@ -214,9 +227,24 @@ module Rabbit
|
|
214
227
|
def toggle_info_window
|
215
228
|
end
|
216
229
|
|
230
|
+
def info_window_showing?
|
231
|
+
false
|
232
|
+
end
|
233
|
+
|
217
234
|
def toggle_spotlight
|
218
235
|
end
|
219
236
|
|
237
|
+
def spotlighting?
|
238
|
+
false
|
239
|
+
end
|
240
|
+
|
241
|
+
def toggle_magnifier
|
242
|
+
end
|
243
|
+
|
244
|
+
def magnifying?
|
245
|
+
false
|
246
|
+
end
|
247
|
+
|
220
248
|
def gl_available?
|
221
249
|
@canvas.use_gl? and gl_supported?
|
222
250
|
end
|
@@ -252,12 +280,6 @@ module Rabbit
|
|
252
280
|
false
|
253
281
|
end
|
254
282
|
|
255
|
-
def connect_key(keyval, modifier, flags, &block)
|
256
|
-
end
|
257
|
-
|
258
|
-
def disconnect_key(keyval, modifier)
|
259
|
-
end
|
260
|
-
|
261
283
|
def change_graffiti_color
|
262
284
|
end
|
263
285
|
|
@@ -276,7 +298,7 @@ module Rabbit
|
|
276
298
|
end
|
277
299
|
|
278
300
|
def do_print(&block)
|
279
|
-
pre_print(@canvas.
|
301
|
+
pre_print(@canvas.n_slides)
|
280
302
|
canceled = false
|
281
303
|
@canvas.slides.each_with_index do |slide, i|
|
282
304
|
@canvas.move_to_if_can(i)
|
@@ -292,7 +314,7 @@ module Rabbit
|
|
292
314
|
end
|
293
315
|
|
294
316
|
def make_canvas_with_renderer(renderer)
|
295
|
-
canvas = Canvas.new(
|
317
|
+
canvas = Canvas.new(renderer)
|
296
318
|
yield canvas
|
297
319
|
canvas.apply_theme(@canvas.theme_name)
|
298
320
|
@canvas.source_force_modified(true) do |source|
|
@@ -353,23 +375,7 @@ module Rabbit
|
|
353
375
|
def not_support_method(name)
|
354
376
|
format = _("%s does not support: %s")
|
355
377
|
msg = format % [self.class.name, name]
|
356
|
-
|
357
|
-
end
|
358
|
-
|
359
|
-
def init_gl_parameters
|
360
|
-
angle = 0.0 * (Math::PI / 180.0)
|
361
|
-
axis_x = 1.0
|
362
|
-
axis_y = 0.0
|
363
|
-
axis_z = 0.0
|
364
|
-
sine = Math.sin(0.5 * angle)
|
365
|
-
quaternion = [
|
366
|
-
axis_x * sine,
|
367
|
-
axis_y * sine,
|
368
|
-
axis_z * sine,
|
369
|
-
Math.cos(0.5 * angle)
|
370
|
-
]
|
371
|
-
@gl_quaternion = TrackBall::Vector.new(quaternion)
|
372
|
-
@gl_scale = 1.0
|
378
|
+
Rabbit.logger.warn(msg)
|
373
379
|
end
|
374
380
|
|
375
381
|
def clear_keys
|
@@ -391,6 +397,8 @@ module Rabbit
|
|
391
397
|
|
392
398
|
def init_color
|
393
399
|
@background_color = "white"
|
400
|
+
@foreground = make_color("black")
|
401
|
+
@background = make_color(@background_color)
|
394
402
|
end
|
395
403
|
|
396
404
|
def clear_gesture_actions
|
@@ -1,6 +1,22 @@
|
|
1
|
-
|
1
|
+
# Copyright (C) 2005-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
|
+
#
|
3
|
+
# This program is free software; you can redistribute it and/or modify
|
4
|
+
# it under the terms of the GNU General Public License as published by
|
5
|
+
# the Free Software Foundation; either version 2 of the License, or
|
6
|
+
# (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This program is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
11
|
+
# GNU General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU General Public License along
|
14
|
+
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
|
+
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
2
16
|
|
3
|
-
|
17
|
+
require_relative "../gtk"
|
18
|
+
|
19
|
+
require_relative "../rabbit"
|
4
20
|
|
5
21
|
module Rabbit
|
6
22
|
module Renderer
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2006-
|
1
|
+
# Copyright (C) 2006-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -14,14 +14,12 @@
|
|
14
14
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
|
-
|
18
|
-
require "rabbit/renderer/display/hook-handler"
|
17
|
+
require_relative "hook-handler"
|
19
18
|
|
20
19
|
module Rabbit
|
21
20
|
module Renderer
|
22
21
|
module Display
|
23
22
|
module Base
|
24
|
-
include Renderer::Base
|
25
23
|
include HookHandler
|
26
24
|
|
27
25
|
def initialize(*args, &block)
|
@@ -54,6 +52,14 @@ module Rabbit
|
|
54
52
|
@size
|
55
53
|
end
|
56
54
|
|
55
|
+
def update_size(w, h)
|
56
|
+
return if @real_width == w and @real_height == h
|
57
|
+
|
58
|
+
@real_width = w
|
59
|
+
@real_height = h
|
60
|
+
@size_dirty = true
|
61
|
+
end
|
62
|
+
|
57
63
|
def redraw
|
58
64
|
widget.queue_draw
|
59
65
|
end
|
@@ -174,14 +180,6 @@ module Rabbit
|
|
174
180
|
ratio)
|
175
181
|
end
|
176
182
|
|
177
|
-
def update_size(w, h)
|
178
|
-
return if @real_width == w and @real_height == h
|
179
|
-
|
180
|
-
@real_width = w
|
181
|
-
@real_height = h
|
182
|
-
@size_dirty = true
|
183
|
-
end
|
184
|
-
|
185
183
|
def set_size_ratio(ratio)
|
186
184
|
ratio ||= @base_width.to_f / @base_height.to_f
|
187
185
|
return if @size.ratio == ratio
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2004-
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -14,7 +14,7 @@
|
|
14
14
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
|
-
|
17
|
+
require_relative "../../gtk"
|
18
18
|
|
19
19
|
module Rabbit
|
20
20
|
module Renderer
|
@@ -37,75 +37,162 @@ module Rabbit
|
|
37
37
|
@button_handler = []
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
if Gtk.const_defined?(:GestureClick)
|
41
|
+
ButtonPressEvent = Struct.new(:button,
|
42
|
+
:n_presses,
|
43
|
+
:x,
|
44
|
+
:y,
|
45
|
+
:state) do
|
46
|
+
def event_type
|
47
|
+
Gdk::EventType::BUTTON_PRESS
|
48
|
+
end
|
49
|
+
end
|
50
|
+
ButtonReleaseEvent = Struct.new(:button,
|
51
|
+
:n_presses,
|
52
|
+
:x,
|
53
|
+
:y,
|
54
|
+
:state) do
|
55
|
+
def event_type
|
56
|
+
Gdk::EventType::BUTTON_RELEASE
|
57
|
+
end
|
45
58
|
end
|
46
59
|
|
47
|
-
widget
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
60
|
+
def set_button_event(widget)
|
61
|
+
["primary", "middle", "secondary"].each do |button_type|
|
62
|
+
click = Gtk::GestureClick.new
|
63
|
+
click.name = "rabbit-click-#{button_type}"
|
64
|
+
click.button = Gdk.const_get("BUTTON_#{button_type.upcase}")
|
65
|
+
|
66
|
+
last_button_press_event = nil
|
67
|
+
click.signal_connect(:pressed) do |_, n_presses, x, y|
|
68
|
+
last_button_press_event =
|
69
|
+
ButtonPressEvent.new(click.current_button,
|
70
|
+
n_presses,
|
71
|
+
x,
|
72
|
+
y,
|
73
|
+
click.current_event_state)
|
74
|
+
call_hook_procs(@button_press_hook_procs,
|
75
|
+
last_button_press_event)
|
76
|
+
end
|
77
|
+
|
78
|
+
click.signal_connect(:released) do |_, n_presses, x, y|
|
79
|
+
event = ButtonReleaseEvent.new(click.current_button,
|
80
|
+
n_presses,
|
81
|
+
x,
|
82
|
+
y,
|
83
|
+
click.current_event_state)
|
84
|
+
if last_button_press_event
|
85
|
+
handled = call_hook_procs(@button_release_hook_procs,
|
86
|
+
event,
|
87
|
+
last_button_press_event)
|
88
|
+
unless handled
|
89
|
+
click_type = nil
|
90
|
+
case n_presses
|
91
|
+
when 1
|
92
|
+
click_type = "single_click"
|
93
|
+
when 2
|
94
|
+
click_type = "double_click" if button_type == "primary"
|
95
|
+
end
|
96
|
+
if click_type
|
97
|
+
handler = "handle_button_#{button_type}_#{click_type}"
|
98
|
+
__send__(handler, last_button_press_event, event)
|
99
|
+
start_button_handler
|
100
|
+
end
|
101
|
+
end
|
102
|
+
else
|
103
|
+
clear_button_handler
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
widget.add_controller(click)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
else
|
111
|
+
def set_button_event(widget)
|
112
|
+
widget.add_events(Gdk::EventMask::BUTTON_PRESS_MASK |
|
113
|
+
Gdk::EventMask::BUTTON_RELEASE_MASK)
|
114
|
+
last_button_press_event = nil
|
115
|
+
widget.signal_connect("button_press_event") do |_widget, event|
|
116
|
+
last_button_press_event = event
|
117
|
+
call_hook_procs(@button_press_hook_procs, event)
|
118
|
+
end
|
119
|
+
|
120
|
+
widget.signal_connect("button_release_event") do |_widget, event|
|
121
|
+
if last_button_press_event
|
122
|
+
handled = call_hook_procs(@button_release_hook_procs,
|
123
|
+
event, last_button_press_event)
|
124
|
+
if handled
|
125
|
+
clear_button_handler
|
126
|
+
else
|
127
|
+
handled = handle_button_release(event, last_button_press_event)
|
128
|
+
end
|
129
|
+
handled
|
53
130
|
else
|
54
|
-
|
131
|
+
clear_button_handler
|
132
|
+
false
|
55
133
|
end
|
56
|
-
handled
|
57
|
-
else
|
58
|
-
clear_button_handler
|
59
|
-
false
|
60
134
|
end
|
61
135
|
end
|
62
|
-
end
|
63
136
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
137
|
+
def handle_button_release(event, last_button_press_event)
|
138
|
+
button_types = {
|
139
|
+
1 => "primary",
|
140
|
+
2 => "middle",
|
141
|
+
3 => "secondary",
|
142
|
+
5 => "primary",
|
143
|
+
4 => "middle",
|
144
|
+
}
|
145
|
+
click_types = {
|
146
|
+
Gdk::EventType::BUTTON_PRESS => "single_click",
|
147
|
+
Gdk::EventType::BUTTON2_PRESS => "double_click",
|
148
|
+
}
|
149
|
+
button_type = button_types[event.button]
|
150
|
+
click_type = click_types[last_button_press_event.event_type]
|
151
|
+
if button_type and click_type
|
152
|
+
handler = "handle_button_#{button_type}_#{click_type}"
|
153
|
+
if respond_to?(handler, true)
|
154
|
+
__send__(handler, last_button_press_event, event)
|
155
|
+
start_button_handler
|
156
|
+
return true
|
157
|
+
end
|
158
|
+
end
|
159
|
+
false
|
75
160
|
end
|
76
|
-
true
|
77
161
|
end
|
78
162
|
|
79
|
-
def
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
popup_menu
|
85
|
-
true
|
86
|
-
end
|
87
|
-
elsif !release_event.state.mod1_mask?
|
88
|
-
add_button_handler do
|
89
|
-
@canvas.activate("NextSlide")
|
90
|
-
true
|
91
|
-
end
|
163
|
+
def handle_button_primary_single_click(event, release_event)
|
164
|
+
if release_event.state.control_mask?
|
165
|
+
add_button_handler do
|
166
|
+
toggle_menu(release_event.x, release_event.y)
|
167
|
+
true
|
92
168
|
end
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
169
|
+
elsif !release_event.state.alt_mask?
|
170
|
+
add_button_handler do
|
171
|
+
popdown_menu
|
172
|
+
@canvas.activate("NextSlide")
|
173
|
+
true
|
99
174
|
end
|
100
|
-
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def handle_button_middle_single_click(event, release_event)
|
179
|
+
unless release_event.state.alt_mask?
|
101
180
|
add_button_handler do
|
102
|
-
|
181
|
+
popdown_menu
|
182
|
+
@canvas.activate("PreviousSlide")
|
103
183
|
true
|
104
184
|
end
|
105
185
|
end
|
106
186
|
end
|
107
187
|
|
108
|
-
def
|
188
|
+
def handle_button_secondary_single_click(event, release_event)
|
189
|
+
add_button_handler do
|
190
|
+
toggle_menu(release_event.x, release_event.y)
|
191
|
+
true
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def handle_button_primary_double_click(event, release_event)
|
109
196
|
add_button_handler do
|
110
197
|
if @canvas.index_mode?
|
111
198
|
index = @canvas.current_slide.slide_number(@canvas,
|
@@ -113,7 +200,7 @@ module Rabbit
|
|
113
200
|
event.y)
|
114
201
|
if index
|
115
202
|
@canvas.activate("ToggleIndexMode")
|
116
|
-
@canvas.activate("
|
203
|
+
@canvas.activate("JumpToSlide", GLib::Variant.new(index, "i"))
|
117
204
|
end
|
118
205
|
true
|
119
206
|
else
|
@@ -122,12 +209,6 @@ module Rabbit
|
|
122
209
|
end
|
123
210
|
end
|
124
211
|
|
125
|
-
def handle_button3_press(event, release_event)
|
126
|
-
add_button_handler do
|
127
|
-
false
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
212
|
def add_button_handler(handler=nil, &block)
|
132
213
|
handler ||= Proc.new(&block)
|
133
214
|
@button_handler.push(handler)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2004-
|
1
|
+
# Copyright (C) 2004-2025 Sutou Kouhei <kou@cozmixng.org>
|
2
2
|
#
|
3
3
|
# This program is free software; you can redistribute it and/or modify
|
4
4
|
# it under the terms of the GNU General Public License as published by
|
@@ -14,7 +14,7 @@
|
|
14
14
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
15
15
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
16
16
|
|
17
|
-
|
17
|
+
require_relative "../../cursor-manager"
|
18
18
|
|
19
19
|
module Rabbit
|
20
20
|
module Renderer
|
@@ -35,16 +35,15 @@ module Rabbit
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def restore_cursor(name)
|
38
|
-
@cursor_manager.restore(@surface, name)
|
38
|
+
@cursor_manager.restore(@surface || @window, name)
|
39
39
|
end
|
40
40
|
|
41
41
|
def update_cursor(cursor_type, update_current_cursor=false)
|
42
42
|
@cursor_manager.current = cursor_type if update_current_cursor
|
43
43
|
cursor_type = :pencil if @graffiti_mode
|
44
|
-
@cursor_manager.update(@surface, cursor_type)
|
44
|
+
@cursor_manager.update(@surface || @window, cursor_type)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|