X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fgui%2Fewidget.h;h=8af66b057e74b6ae18b39051bacbf1d041df0a63;hp=4175eae7b67739b898a7da195c5bf4ea1517e257;hb=0ba26361a853f91ebc36c9c11f6771df74008535;hpb=6ce3896800e92c0c51ebb72d86191f526af66971 diff --git a/lib/gui/ewidget.h b/lib/gui/ewidget.h index 4175eae..8af66b0 100644 --- a/lib/gui/ewidget.h +++ b/lib/gui/ewidget.h @@ -6,6 +6,8 @@ #include /* for eWindowStyle */ #include +#define MAX_LAYER 16 + class eWidgetDesktop;class eWidgetDesktop; class eWidget @@ -13,12 +15,14 @@ class eWidget friend class eWidgetDesktop; public: eWidget(eWidget *parent); - + virtual ~eWidget(); + void move(ePoint pos); void resize(eSize size); ePoint position() const { return m_position; } eSize size() const { return m_size; } + eSize csize() const { return m_client_size; } void invalidate(const gRegion ®ion = gRegion::invalidRegion()); @@ -33,7 +37,7 @@ 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); @@ -61,9 +65,11 @@ private: int m_vis; + int m_layer; + ePtrList m_childs; ePoint m_position; - eSize m_size; + eSize m_size, m_client_size; /* will be accounted when there's a client offset */ eSize m_client_offset; eWidget *m_parent; @@ -71,7 +77,7 @@ private: ePtr m_style; void insertIntoParent(); - void doPaint(gPainter &painter, const gRegion ®ion); + void doPaint(gPainter &painter, const gRegion ®ion, int layer); void recalcClipRegionsWhenVisible(); void parentRemoved(); @@ -82,15 +88,14 @@ private: 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; + struct eWidgetDesktopCompBuffer *m_comp_buffer[MAX_LAYER]; enum eWidgetEvent { @@ -99,8 +104,9 @@ public: evtChangedPosition, evtChangedSize, - evtWillShow, - evtWillHide, + evtParentChangedPosition, + + evtParentVisibilityChanged, evtWillChangePosition, /* new size is eRect *data */ evtWillChangeSize, @@ -113,6 +119,11 @@ public: }; 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(int which);