class Dedalus::ApplicationViewComposer
Public Instance Methods
click_molecule(structure, window_dims, mouse_position:)
click to toggle source
# File lib/dedalus/app_view_composer.rb, line 30 def click_molecule(structure, window_dims, mouse_position:) send_molecule(structure, window_dims, mouse_position: mouse_position, message: :click) end
hover_molecule(structure, window_dims, mouse_position:)
click to toggle source
# File lib/dedalus/app_view_composer.rb, line 26 def hover_molecule(structure, window_dims, mouse_position:) send_molecule(structure, window_dims, mouse_position: mouse_position, message: :hover) end
render!(structure, dims)
click to toggle source
# File lib/dedalus/app_view_composer.rb, line 34 def render!(structure, dims) traverse(structure, origin: [0,0], dimensions: dims, render: true) do on_atom do |atom, origin:, dimensions:, freeform:, z_index:| if atom.background_color atom.draw_bounding_box( color: atom.background_color, origin: origin, dimensions: dimensions ) end # TODO may need to do this to get click/hover events for sprites? if freeform # then offset by origin x0,y0 = *origin x,y = *atom.position atom.position = [x+x0,y+y0] else atom.position = origin end atom.z_order = z_index atom.render end on_element do |element, origin:, dimensions:, z_index:| if element.background_color element.draw_bounding_box( color: element.background_color, origin: origin, dimensions: dimensions ) end element.position = origin end end end
send_molecule(structure, window_dims, mouse_position:, message:)
click to toggle source
# File lib/dedalus/app_view_composer.rb, line 11 def send_molecule(structure, window_dims, mouse_position:, message:) mouse_coord = coord(*mouse_position) traverse(structure, origin: [0,0], dimensions: window_dims, render: false) do on_molecule do |molecule, origin:, dimensions:, z_index:| element_bounding_box = Geometer::Rectangle.new(coord(*origin), dim(*dimensions)) mouse_overlap = element_bounding_box.contains?(mouse_coord) rescue false # could get bad coords... if mouse_overlap molecule.position = origin molecule.send(message) end end end end
traverse(structure, origin: [0,0], dimensions:, render: false, &blk)
click to toggle source
# File lib/dedalus/app_view_composer.rb, line 6 def traverse(structure, origin: [0,0], dimensions:, render: false, &blk) traversal = ViewTraversal.new(&blk) traversal.walk!(structure, origin: origin, dimensions: dimensions, render: render) end