mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:58:11 +00:00

This patch implements basic rubber-banding. Perhaps this mechanism can be generalized somehow, but it's not clear to me how that would work at the moment.
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <AK/Badge.h>
|
|
#include <LibGUI/GWidget.h>
|
|
|
|
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<CursorTool>) const { return m_rubber_banding; }
|
|
void set_rubber_banding(Badge<CursorTool>, bool);
|
|
void set_rubber_band_position(Badge<CursorTool>, const Point&);
|
|
void set_rubber_band_origin(Badge<CursorTool>, 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;
|
|
};
|