11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
20PROMEKI_NAMESPACE_BEGIN
25class WindowFocusEvent;
31class PaintEvent :
public Event {
34 static const Type Paint;
37 PaintEvent() : Event(Paint) {}
44class ResizeEvent :
public Event {
47 static const Type Resize;
53 ResizeEvent(
const Size2Di32 &size) : Event(Resize), _size(size) {}
56 const Size2Di32 &size()
const {
return _size; }
104class Widget :
public ObjectBase {
105 PROMEKI_OBJECT(Widget, ObjectBase)
111 Widget(ObjectBase *parent =
nullptr);
117 const Rect2Di32 &geometry()
const {
return _geometry; }
120 void setGeometry(
const Rect2Di32 &rect);
123 int x()
const {
return _geometry.x(); }
126 int y()
const {
return _geometry.y(); }
129 int width()
const {
return _geometry.width(); }
132 int height()
const {
return _geometry.height(); }
135 Size2Di32 size()
const {
return Size2Di32(_geometry.width(), _geometry.height()); }
138 const Size2Di32 &minimumSize()
const {
return _minimumSize; }
141 void setMinimumSize(
const Size2Di32 &size) { _minimumSize = size; }
144 const Size2Di32 &maximumSize()
const {
return _maximumSize; }
147 void setMaximumSize(
const Size2Di32 &size) { _maximumSize = size; }
150 SizePolicy sizePolicy()
const {
return _sizePolicy; }
153 void setSizePolicy(SizePolicy policy) { _sizePolicy = policy; }
156 bool isVisible()
const {
return _visible; }
164 bool isEffectivelyVisible()
const;
173 void setVisible(
bool visible);
176 bool isEnabled()
const {
return _enabled; }
179 void setEnabled(
bool enabled) { _enabled = enabled; }
182 FocusPolicy focusPolicy()
const {
return _focusPolicy; }
185 void setFocusPolicy(FocusPolicy policy) { _focusPolicy = policy; }
188 bool hasFocus()
const {
return _focused; }
202 void setFocused(
bool focused) { _focused = focused; }
211 virtual void update();
214 bool isDirty()
const {
return _dirty; }
217 void clearDirty() { _dirty =
false; }
220 Layout *layout()
const {
return _layout; }
223 void setLayout(Layout *layout);
228 Point2Di32 mapToParent(
const Point2Di32 &p)
const;
233 Point2Di32 mapFromParent(
const Point2Di32 &p)
const;
238 Point2Di32 mapToGlobal(
const Point2Di32 &p)
const;
243 Point2Di32 mapFromGlobal(
const Point2Di32 &p)
const;
246 virtual Size2Di32 sizeHint()
const;
249 virtual Size2Di32 minimumSizeHint()
const;
260 void sendEvent(Event *e) { event(e); }
263 PROMEKI_SIGNAL(resized, Size2Di32)
266 PROMEKI_SIGNAL(visibilityChanged,
bool)
270 virtual void paintEvent(PaintEvent *e);
273 virtual void keyPressEvent(KeyEvent *e);
276 virtual void keyReleaseEvent(KeyEvent *e);
279 virtual void mouseEvent(MouseEvent *e);
282 virtual void resizeEvent(ResizeEvent *e);
285 virtual void focusInEvent(Event *e);
288 virtual void focusOutEvent(Event *e);
298 virtual void windowFocusEvent(WindowFocusEvent *e);
301 void event(Event *e)
override;
307 Size2Di32 _minimumSize;
308 Size2Di32 _maximumSize = Size2Di32(9999, 9999);
309 SizePolicy _sizePolicy = SizePreferred;
310 FocusPolicy _focusPolicy = NoFocus;
311 bool _visible =
true;
312 bool _enabled =
true;
313 bool _focused =
false;
315 Layout *_layout =
nullptr;