aboutsummaryrefslogtreecommitdiffstats
path: root/include/gwin/class_gwin.h
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2013-06-06 14:33:32 +1000
committerinmarket <andrewh@inmarket.com.au>2013-06-06 14:33:32 +1000
commit7baf5c5d448b626d6a062882434b25ca82212d94 (patch)
tree590bea0f81bd4b9e2ebe54c944877ea501e00fa3 /include/gwin/class_gwin.h
parenteebecad9f7995dacf3f7c053e3d6b42617ec7294 (diff)
downloaduGFX-7baf5c5d448b626d6a062882434b25ca82212d94.tar.gz
uGFX-7baf5c5d448b626d6a062882434b25ca82212d94.tar.bz2
uGFX-7baf5c5d448b626d6a062882434b25ca82212d94.zip
New simplified gwin using a pseudo class structure.
Diffstat (limited to 'include/gwin/class_gwin.h')
-rw-r--r--include/gwin/class_gwin.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/include/gwin/class_gwin.h b/include/gwin/class_gwin.h
new file mode 100644
index 00000000..b7d8c5a8
--- /dev/null
+++ b/include/gwin/class_gwin.h
@@ -0,0 +1,123 @@
+/*
+ * This file is subject to the terms of the GFX License, v1.0. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://chibios-gfx.com/license.html
+ */
+
+/**
+ * @file include/gwin/class_gwin.h
+ * @brief GWIN Graphic window subsystem header file.
+ *
+ * @defgroup Internal Internal
+ * @ingroup GWIN
+ *
+ * @note These definitions are normally not used by an application program. They are useful
+ * only if you want to create your own custom GWIN window or widget.
+ * @note To access these definitions you must include "gwin/class_gwin.h" in your source file.
+ *
+ * @{
+ */
+#ifndef _CLASS_GWIN_H
+#define _CLASS_GWIN_H
+
+#if GFX_USE_GWIN || defined(__DOXYGEN__)
+
+/**
+ * @brief The Virtual Method Table for a GWIN window
+ * @{
+ */
+typedef struct gwinVMT {
+ const char *classname; // @< The GWIN classname
+ void (*Destroy)(GWindowObject *gh); // @< The GWIN Destroy function (optional)
+ void (*AfterClear)(GWindowObject *gh); // @< The GWIN After-Clear function (optional)
+} gwinVMT;
+/* @} */
+
+/**
+ * @brief The Virtual Method Table for a widget
+ * @note A widget must have a destroy function. Either use @p _gwidgetDestroy() or use your own function
+ * which internally calls @p _gwidgetDestroy().
+ * @note If no MouseDown(), MouseUp() or MouseMove() function is provided, the widget will not accept being attached to a mouse input source.
+ * @note If no ToggleOn() or ToggleOff() function is provided, the widget will not accept being attached to a toggle input source.
+ * @note If no DialMove() function is provided, the widget will not accept being attached to a dial input source.
+ * @note AssignToggle() and AssignDial() enable a widget to handle more than one toggle/dial device attached to the widget.
+ * For example, a slider might accept two toggles, one for slider-down and one for slider-up.
+ * The function enables the widget to record that a particular device instance performs each particular role.
+ * (eg toggle0 = slider-down, toggle1 = slider-up).
+ * @{
+ */
+typedef struct gwidgetVMT {
+ struct gwinVMT g; // @< This is still a GWIN
+ void (*DefaultDraw) (GWidgetObject *gw, void *param); // @< The default drawing routine (mandatory)
+ void (*MouseDown) (GWidgetObject *gw, coord_t x, coord_t y); // @< Process mouse down events (optional)
+ void (*MouseUp) (GWidgetObject *gw, coord_t x, coord_t y); // @< Process mouse up events (optional)
+ void (*MouseMove) (GWidgetObject *gw, coord_t x, coord_t y); // @< Process mouse move events (optional)
+ void (*ToggleOff) (GWidgetObject *gw, uint16_t instance); // @< Process toggle off events (optional)
+ void (*ToggleOn) (GWidgetObject *gw, uint16_t instance); // @< Process toggle on events (optional)
+ void (*DialMove) (GWidgetObject *gw, uint16_t instance, uint16_t value); // @< Process dial move events (optional)
+ void (*AllEvents) (GWidgetObject *gw, GEvent *pe); // @< Process all events (optional)
+ bool_t (*AssignToggle) (GWidgetObject *gw, uint16_t role, uint16_t instance); // @< Test the role and save the toggle instance handle (optional)
+ bool_t (*AssignDial) (GWidgetObject *gw, uint16_t role, uint16_t instance); // @< Test the role and save the dial instance handle (optional)
+} gwidgetVMT;
+/* @} */
+
+/**
+ * @brief The predefined flags for a GWIN and a Widget
+ * @{
+ */
+#define GWIN_FLG_DYNAMIC 0x0001 // @< The GWIN structure is allocated
+#define GWIN_FLG_WIDGET 0x0002 // @< This is a widget
+#define GWIN_FLG_ENABLED 0x0002 // @< The widget is enabled
+#define GWIN_FLG_ALLOCTXT 0x0008 // @< The widget text is allocated
+#define GWIN_FLG_MOUSECAPTURE 0x0010 // @< The widget has captured the mouse
+#define GWIN_FIRST_CONTROL_FLAG 0x0100 // @< Free for GWINs and Widgets to use
+/* @} */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief Initialise (and allocate if necessary) the base GWIN object
+ *
+ * @param[in] pgw The GWindowObject structure. If NULL one is allocated from the heap
+ * @param[in] x, y The top left corner of the GWIN relative to the screen
+ * @param[in] w, h The width and height of the GWIN window
+ * @param[in] size The size of the GWIN object to allocate
+ * @param[in] vmt The virtual method table for the GWIN object
+ *
+ * @notapi
+ */
+GHandle _gwinInit(GWindowObject *pgw, coord_t x, coord_t y, coord_t w, coord_t h, size_t size, const gwinVMT *vmt);
+
+/**
+ * @brief Initialise (and allocate if necessary) the base Widget object
+ *
+ * @param[in] pgw The GWidgetObject structure. If NULL one is allocated from the heap
+ * @param[in] x, y The top left corner of the Widget relative to the screen
+ * @param[in] w, h The width and height of the Widget window
+ * @param[in] size The size of the Widget object to allocate
+ * @param[in] vmt The virtual method table for the Widget object
+ *
+ * @notapi
+ */
+GHandle _gwidgetInit(GWidgetObject *pgw, coord_t x, coord_t y, coord_t w, coord_t h, size_t size, const gwidgetVMT *vmt);
+
+/**
+ * @brief Destroy the Widget object
+ *
+ * @param[in] gw The widget to destroy
+ *
+ * @notapi
+ */
+void _gwidgetDestroy(GHandle gh);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GFX_USE_GWIN */
+
+#endif /* _CLASS_GWIN_H */
+/** @} */