diff options
Diffstat (limited to 'wintable/new')
| -rw-r--r-- | wintable/new/coord.h | 31 | ||||
| -rw-r--r-- | wintable/new/events.h | 54 | ||||
| -rw-r--r-- | wintable/new/util.h | 14 |
3 files changed, 99 insertions, 0 deletions
diff --git a/wintable/new/coord.h b/wintable/new/coord.h new file mode 100644 index 0000000..1814e87 --- /dev/null +++ b/wintable/new/coord.h @@ -0,0 +1,31 @@ +// 4 december 2014 + +typedef struct rowcol rowcol; + +struct rowcol { + intptr_t row; + intptr_t column; +}; + +static rowcol clientCoordToRowColumn(struct table *t, POINT pt) +{ + // TODO +} + +// same as client coordinates, but stored in a lParam (like the various mouse messages provide) +static rowcol lParamToRowColumn(struct table *t, LPARAM lParam) +{ + POINT pt; + + pt.x = GET_X_LPARAM(lParam); + pt.y = GET_Y_LPARAM(lParam); + return clientCoordToRowColumn(t, pt); +} + +// returns TRUE if the row is visible and thus has client coordinates; FALSE otherwise +static BOOL rowColumnToClientCoord(struct table *t, rowcol rc, struct POINT *pt) +{ + // TODO +} + +// TODO idealCoordToRowColumn/rowColumnToIdealCoord? diff --git a/wintable/new/events.h b/wintable/new/events.h new file mode 100644 index 0000000..cef722a --- /dev/null +++ b/wintable/new/events.h @@ -0,0 +1,54 @@ +// 5 december 2014 + +static handlerfunc keyDownHandlers[] = { + NULL, +}; + +static handlerfunc keyUpHandlers[] = { + NULL, +}; + +static handlerfunc charHandlers[] = { + NULL, +}; + +static handlerfunc mouseMoveHandlers[] = { + NULL, +}; + +static handlerfunc mouseLeaveHandlers[] = { + NULL, +}; + +static handlerfunc lbuttonDownHandlers[] = { + NULL, +}; + +static handlerufnc lbuttonUpHandlers[] = { + NULL, +}; + +static handlerfunc mouseWheelHandlers[] = { + NULL, +}; + +// TODO WM_MOUSEHOVER, other mouse buttons + +HANDLER(events) +{ + switch (uMsg) { +#define eventHandler(msg, array) \ + case msg: \ + return runHandlers(array, t, uMsg, wParam, lParam, lResult); + eventHandler(WM_KEYDOWN, keyDownHandlers) + eventHandler(WM_KEYUP, keyUpHandlers) + eventHandler(WM_CHAR, charHandlers) + eventHandler(WM_MOUSEMOVE, mouseMoveHandlers) + eventHandler(WM_MOUSELEAVE, mouseLeaveHandlers) + eventHandler(WM_LBUTTONDOWN, lbuttonDownHandlers) + eventHandler(WM_LBUTTONUP, lbuttonUpHandlers) + eventHandler(WM_MOUSEWHEEL, mouseWheelHandlers) +#undef eventHandler + } + return FALSE; +} diff --git a/wintable/new/util.h b/wintable/new/util.h new file mode 100644 index 0000000..c6cbfb3 --- /dev/null +++ b/wintable/new/util.h @@ -0,0 +1,14 @@ +// 4 december 2014 + +typedef BOOL (*handlerfunc)(struct table *, UINT, WPARAM, LPARAM, LRESULT *); +#define HANDLER(name) static BOOL name(struct table *t, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *lResult) + +static BOOL runHandlers(handlerfunc *list, struct table *t, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *lResult) +{ + handlerfunc *p; + + for (p = list; *p != NULL; p++) + if ((*(*p))(t, uMsg, wParam, lParam, lResult)) + return TRUE; + return FALSE; +} |
