X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ddc3964ed95d01e72229dc9af968a327cd84e56c..759a94e910f4f45d11aac2635fc0b6df1149cd3c:/lib/gui/ewidget.h diff --git a/lib/gui/ewidget.h b/lib/gui/ewidget.h index a551b8a3..5cb139c5 100644 --- a/lib/gui/ewidget.h +++ b/lib/gui/ewidget.h @@ -3,6 +3,10 @@ #include /* for gRegion */ #include /* for eSmartPtrList */ +#include /* for eWindowStyle */ +#include + +class eWidgetDesktop;class eWidgetDesktop; class eWidget { @@ -17,11 +21,29 @@ public: eSize size() const { return m_size; } void invalidate(const gRegion ®ion = gRegion::invalidRegion()); + + /* the window were to attach childs to. Normally, this + is "this", but it can be overridden in case a widget + has a "client area", which is implemented as a child + widget. eWindow overrides this, for example. */ + virtual eWidget *child() { return this; } void show(); void hide(); void destruct(); + + int getStyle(ePtr &style) { if (!m_style) return 1; style = m_style; return 0; } + void setStyle(eWindowStyle *style) { m_style = style; } + + void setBackgroundColor(const gRGB &col); + void clearBackgroundColor(); + + /* untested code */ + int isVisible() { return (m_vis & wVisShow) && ((!m_parent) || m_parent->isVisible()); } + /* ... */ + + eWidgetAnimation m_animation; private: eWidgetDesktop *m_desktop; @@ -33,18 +55,29 @@ private: int m_vis; ePtrList m_childs; - eWidget *m_parent; ePoint m_position; eSize m_size; + /* will be accounted when there's a client offset */ + eSize m_client_offset; + eWidget *m_parent; + ePtr m_style; void doPaint(gPainter &painter, const gRegion ®ion); + void recalcClipRegionsWhenVisible(); + + gRGB m_background_color; + int m_have_background_color; + + eWidget *m_current_focus, *m_focus_owner; protected: virtual ~eWidget(); + void mayKillFocus(); public: // all in local space! gRegion m_clip_region, m_visible_region, m_visible_with_childs; + struct eWidgetDesktopCompBuffer *m_comp_buffer; enum eWidgetEvent { @@ -58,9 +91,17 @@ public: evtWillChangePosition, /* new size is eRect *data */ evtWillChangeSize, + evtAction, + + evtFocusGot, + evtFocusLost, + evtUserWidget, }; virtual int event(int event, void *data = 0, void *data2 = 0); + void setFocus(eWidget *focus); }; +extern eWidgetDesktop *getDesktop(); + #endif