Usermode/AxWin3 - Splitting widget types out into separate files
[tpg/acess2.git] / Usermode / Applications / axwin3_src / WM / renderers / widget / common.h
diff --git a/Usermode/Applications/axwin3_src/WM/renderers/widget/common.h b/Usermode/Applications/axwin3_src/WM/renderers/widget/common.h
new file mode 100644 (file)
index 0000000..b491333
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+ * Acess2 Window Manager v3
+ * - By John Hodge (thePowersGang)
+ *
+ * renderer/widget/common.h
+ * - Widget common definitions
+ */
+#ifndef _RENDERER_WIDGET_COMMON_H
+#define _RENDERER_WIDGET_COMMON_H
+
+#include <renderer_widget.h>   // Widget types
+
+typedef struct sWidgetDef      tWidgetDef;
+
+struct sWidgetDef
+{
+       void    (*Init)(tElement *Ele);
+       void    (*Delete)(tElement *Ele);
+
+       void    (*Render)(tWindow *Window, tElement *Ele);
+       
+       void    (*UpdateFlags)(tElement *Ele);
+       void    (*UpdateSize)(tElement *Ele);
+       void    (*UpdateText)(tElement *Ele, const char *Text); // This should update Ele->Text
+
+       /**
+        * \name Input handlers
+        * \note Returns boolean unhandled
+        * \{
+        */     
+        int    (*MouseButton)(tElement *Ele, int X, int Y, int Button, int bPressed);
+        int    (*MouseMove)(tElement *Ele, int X, int Y);
+        int    (*KeyDown)(tElement *Ele, int KeySym, int Character);
+        int    (*KeyUp)(tElement *Ele, int KeySym);
+        int    (*KeyFire)(tElement *Ele, int KeySym, int Character);
+       /**
+        * \}
+        */
+};
+
+extern void    Widget_int_SetTypeDef(int Type, tWidgetDef *Def);
+extern void    Widget_UpdateMinDims(tElement *Element);
+extern void    Widget_Fire(tElement *Element);
+
+#define DEFWIDGETTYPE(_type, _attribs...) \
+tWidgetDef     _widget_typedef_##_type = {_attribs};\
+void _widget_set_##_type(void) __attribute__((constructor));\
+void _widget_set_##_type(void) { Widget_int_SetTypeDef(_type, &_widget_typedef_##_type);}
+
+#endif
+

UCC git Repository :: git.ucc.asn.au