X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/dba614edd2aad3c17e244914eaef3809d8300cb1..2cfd7bf526965a11394275b6d3b28b87c6c76875:/lib/gui/ewidget.h diff --git a/lib/gui/ewidget.h b/lib/gui/ewidget.h index 97eb1434..7ddbbc57 100644 --- a/lib/gui/ewidget.h +++ b/lib/gui/ewidget.h @@ -4,13 +4,19 @@ #include /* for gRegion */ #include /* for eSmartPtrList */ #include /* for eWindowStyle */ +#include + +#define MAX_LAYER 16 + +class eWidgetDesktop;class eWidgetDesktop; class eWidget { friend class eWidgetDesktop; public: eWidget(eWidget *parent); - + virtual ~eWidget(); + void move(ePoint pos); void resize(eSize size); @@ -30,9 +36,24 @@ public: void destruct(); - int getStyle(ePtr &style) { if (!m_style) return 1; style = m_style; return 0; } + SWIG_VOID(int) getStyle(ePtr &SWIG_NAMED_OUTPUT(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(); + + void setZPosition(int z); + void setTransparent(int transp); + + /* untested code */ + int isVisible() { return (m_vis & wVisShow) && ((!m_parent) || m_parent->isVisible()); } + /* ... */ + + int isTransparent() { return m_vis & wVisTransparent; } + + ePoint getAbsolutePosition(); + + eWidgetAnimation m_animation; private: eWidgetDesktop *m_desktop; @@ -43,21 +64,37 @@ private: int m_vis; + int m_layer; + ePtrList m_childs; 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 insertIntoParent(); + void doPaint(gPainter &painter, const gRegion ®ion, int layer); void recalcClipRegionsWhenVisible(); + + void parentRemoved(); + + gRGB m_background_color; + int m_have_background_color; + + eWidget *m_current_focus, *m_focus_owner; + + int m_z_position; + int m_notify_child_on_position_change; 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[MAX_LAYER]; enum eWidgetEvent { @@ -66,18 +103,28 @@ public: evtChangedPosition, evtChangedSize, - evtWillShow, - evtWillHide, + evtParentChangedPosition, + + evtParentVisibilityChanged, 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); + + /* enable this if you need the absolute position of the widget */ + void setPositionNotifyChild(int n) { m_notify_child_on_position_change = 1; } + + void notifyShowHide(); }; -extern eWidgetDesktop *getDesktop(); +extern eWidgetDesktop *getDesktop(int which); #endif