X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d6f6602d7cea3a7899990fe79216af7d98d05917..3220cd98443043566e3617c564370683d011878e:/lib/gui/ewidget.h diff --git a/lib/gui/ewidget.h b/lib/gui/ewidget.h index e69de29b..879e5eaa 100644 --- a/lib/gui/ewidget.h +++ b/lib/gui/ewidget.h @@ -0,0 +1,113 @@ +#ifndef __lib_gui_ewidget_h +#define __lib_gui_ewidget_h + +#include /* for gRegion */ +#include /* for eSmartPtrList */ +#include /* for eWindowStyle */ +#include + +class eWidgetDesktop;class eWidgetDesktop; + +class eWidget +{ + friend class eWidgetDesktop; +public: + eWidget(eWidget *parent); + + void move(ePoint pos); + void resize(eSize size); + + ePoint position() const { return m_position; } + 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(); + + void setZPosition(int z); + + /* untested code */ + int isVisible() { return (m_vis & wVisShow) && ((!m_parent) || m_parent->isVisible()); } + /* ... */ + + eWidgetAnimation m_animation; +private: + eWidgetDesktop *m_desktop; + + enum { + wVisShow = 1, + wVisTransparent = 2, + }; + + int m_vis; + + 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 insertIntoParent(); + 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; + + int m_z_position; + +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 + { + evtPaint, + evtKey, + evtChangedPosition, + evtChangedSize, + + evtWillShow, + evtWillHide, + 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