lighttroupe/luz-next

View on GitHub
gui/gui_pointer_behavior.rb

Summary

Maintainability
A
0 mins
Test Coverage
#
# GuiPointerBehavior is behavior for objects that can be hovered, clicked, held
#
module GuiPointerBehavior
    empty_method :on_pointer_enter, :on_pointer_exit, :on_first_pointer_enter, :on_last_pointer_exit

    def pointers_hovering
        @gui_pointers_hovering ||= Set.new
    end

    def pointer_hovering?
        !pointers_hovering.empty?
    end

    def pointer_clicking?
        pointers_hovering.find { |pointer| pointer.click? }
    end

    def pointer_holding?
        pointers_hovering.find { |pointer| pointer.hold? }
    end

    def pointer_dragging?
        pointers_hovering.find { |pointer| pointer.dragging? }
    end

    def pointer_enter(pointer)
        unless pointers_hovering.include?(pointer)
            pointers_hovering << pointer
            on_pointer_enter        # TODO: should these take 'pointer' as argument?
            on_first_pointer_enter if pointers_hovering.size == 1
        end
    end

    def pointer_exit(pointer)
        if pointers_hovering.delete(pointer)
            on_pointer_exit
            on_last_pointer_exit if pointers_hovering.empty?
        end
    end

    def scroll_left!(pointer)
        parent.scroll_left!(pointer) if parent
    end
    def scroll_right!(pointer)
        parent.scroll_right!(pointer) if parent
    end
    def scroll_up!(pointer)
        parent.scroll_up!(pointer) if parent
    end
    def scroll_down!(pointer)
        parent.scroll_down!(pointer) if parent
    end
end