#include <lib/gdi/grc.h> /* for gRegion */
#include <lib/base/eptrlist.h> /* for eSmartPtrList */
+#include <lib/gui/ewindowstyle.h> /* for eWindowStyle */
class eWidget
{
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<eWindowStyle> &style) { if (!m_style) return 1; style = m_style; return 0; }
+ void setStyle(eWindowStyle *style) { m_style = style; }
+
+ void setBackgroundColor(const gRGB &col);
+
+ /* untested code */
+ int isVisible() { return (m_vis & wVisShow) && ((!m_parent) || m_parent->isVisible()); }
+ /* ... */
+
private:
eWidgetDesktop *m_desktop;
int m_vis;
ePtrList<eWidget> m_childs;
- eWidget *m_parent;
ePoint m_position;
eSize m_size;
+ eWidget *m_parent;
+ ePtr<eWindowStyle> m_style;
void doPaint(gPainter &painter, const gRegion ®ion);
+ void recalcClipRegionsWhenVisible();
+
+ gRGB m_background_color;
+ int m_have_background_color;
protected:
virtual ~eWidget();
public:
evtWillChangePosition, /* new size is eRect *data */
evtWillChangeSize,
+ evtAction,
+
evtUserWidget,
};
virtual int event(int event, void *data = 0, void *data2 = 0);
};
+extern eWidgetDesktop *getDesktop();
+
#endif