lib/processing/window.rb in processing-0.5.4 vs lib/processing/window.rb in processing-0.5.5
- old
+ new
@@ -1,28 +1,11 @@
module Processing
+ # @private
class Window < Reflex::Window
- class CanvasView < Reflex::View
- def on_update(e)
- window.on_canvas_update e
- end
-
- def on_draw(e)
- window.on_canvas_draw e
- end
-
- def on_pointer(e)
- window.on_canvas_pointer e
- end
-
- def on_resize(e)
- window.on_canvas_resize e
- end
- end
-
attr_accessor :setup, :update, :draw, :resize,
:key_down, :key_up,
:pointer_down, :pointer_up, :pointer_move, :pointer_drag,
:motion,
:before_draw, :after_draw, :update_canvas
@@ -30,15 +13,16 @@
attr_accessor :auto_resize
def initialize(width = 500, height = 500, *args, **kwargs, &block)
Processing.instance_variable_set :@window, self
- @events = []
- @error = nil
- @auto_resize = true
- @canvas = Canvas.new self
- @canvas_view = add CanvasView.new name: :canvas
+ @events = []
+ @error = nil
+ @auto_resize = true
+ @canvas = Canvas.new self
+ @canvas_view = add CanvasView.new name: :canvas
+ @overlay_view = @canvas_view.add Reflex::View.new name: :overlay
super(*args, size: [width, height], **kwargs, &block)
end
def canvas_image()
@@ -55,25 +39,21 @@
def event()
@events.last
end
+ def add_overlay(view)
+ @overlay_view.add view
+ end
+
def start(&block)
draw_canvas do
block.call if block
on_setup
end
end
- def resize_canvas(width, height, pixel_density = nil, window_pixel_density: nil)
- @pixel_density = pixel_density if pixel_density
- if @canvas.resize width, height, pixel_density || @pixel_density || window_pixel_density
- @update_canvas.call canvas_image, canvas_painter if @update_canvas
- size width, height
- end
- end
-
def on_setup()
call_block @setup, nil
end
def on_resize(e)
@@ -126,16 +106,25 @@
def on_canvas_resize(e)
resize_canvas e.width, e.height if @auto_resize
draw_canvas {call_block @resize, e} if @resize
end
+ def resize_canvas(width, height, pixel_density = nil, window_pixel_density: nil)
+ @pixel_density = pixel_density if pixel_density
+ if @canvas.resize width, height, pixel_density || @pixel_density || window_pixel_density
+ @update_canvas.call canvas_image, canvas_painter if @update_canvas
+ size width, height
+ end
+ end
+
private
def update_canvas_view()
scrollx, scrolly, zoom = get_scroll_and_zoom
@canvas_view.scroll_to scrollx, scrolly
- @canvas_view.zoom zoom
+ @canvas_view.zoom = zoom
+ @overlay_view.size = canvas_image.size
end
def get_scroll_and_zoom()
ww, wh = width.to_f, height.to_f
cw, ch = canvas_image.width.to_f, canvas_image.height.to_f
@@ -231,8 +220,29 @@
to.miter_limit = from.miter_limit
to.font = from.font
end
end# Window::Canvas
+
+
+ class Window::CanvasView < Reflex::View
+
+ def on_update(e)
+ window.on_canvas_update e
+ end
+
+ def on_draw(e)
+ window.on_canvas_draw e
+ end
+
+ def on_pointer(e)
+ window.on_canvas_pointer e
+ end
+
+ def on_resize(e)
+ window.on_canvas_resize e
+ end
+
+ end# Window::CanvasView
end# Processing