#pragma once #include #include class CursorTool; class FormEditorWidget; class FormWidget final : public GWidget { C_OBJECT(FormWidget) public: virtual ~FormWidget() override; FormEditorWidget& editor(); const FormEditorWidget& editor() const; // FIXME: This should be an app-wide preference instead. int grid_size() const { return m_grid_size; } bool is_rubber_banding(Badge) const { return m_rubber_banding; } void set_rubber_banding(Badge, bool); void set_rubber_band_position(Badge, const Point&); void set_rubber_band_origin(Badge, const Point&); private: virtual bool accepts_focus() const override { return true; } virtual void paint_event(GPaintEvent&) override; virtual void second_paint_event(GPaintEvent&) override; virtual void mousedown_event(GMouseEvent&) override; virtual void mouseup_event(GMouseEvent&) override; virtual void mousemove_event(GMouseEvent&) override; virtual void keydown_event(GKeyEvent&) override; explicit FormWidget(FormEditorWidget& parent); Rect rubber_band_rect() const; int m_grid_size { 5 }; bool m_rubber_banding { false }; Point m_rubber_band_origin; Point m_rubber_band_position; };