git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
Usermode/AxWin3 - Managed to pass input all the way back to client code :)
[tpg/acess2.git]
/
Usermode
/
Applications
/
axwin3_src
/
libaxwin3.so_src
/
r_widget.c
diff --git
a/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_widget.c
b/Usermode/Applications/axwin3_src/libaxwin3.so_src/r_widget.c
index
6fa8ada
..
f63e0f7
100644
(file)
--- a/
Usermode/Applications/axwin3_src/libaxwin3.so_src/r_widget.c
+++ b/
Usermode/Applications/axwin3_src/libaxwin3.so_src/r_widget.c
@@
-17,7
+17,12
@@
struct sAxWin3_Widget
{
tHWND Window;
uint32_t ID;
- tAxWin3_Widget_Callback Callback;
+ // Callbacks
+ tAxWin3_Widget_FireCb Fire;
+ tAxWin3_Widget_KeyUpDownCb KeyUpDown;
+ tAxWin3_Widget_KeyFireCb KeyFire;
+ tAxWin3_Widget_MouseMoveCb MouseMove;
+ tAxWin3_Widget_MouseBtnCb MouseButton;
};
typedef struct
@@
-30,9
+35,33
@@
typedef struct
} tWidgetWindowInfo;
// === CODE ===
-
int AxWin3_Widget_MessageHandler(tHWND Window, int Size, void *Data
)
+
tAxWin3_Widget *AxWin3_Widget_int_GetElementByID(tHWND Window, uint32_t ID
)
{
- return 0;
+ tWidgetWindowInfo *info;
+ if(!Window) return NULL;
+
+ info = AxWin3_int_GetDataPtr(Window);
+ if(ID >= info->nElements) return NULL;
+
+ return info->Elements[ID];
+}
+
+int AxWin3_Widget_MessageHandler(tHWND Window, int MessageID, int Size, void *Data)
+{
+ tAxWin3_Widget *widget;
+
+ switch(MessageID)
+ {
+ case MSG_WIDGET_FIRE: {
+ tWidgetMsg_Fire *msg = Data;
+ if(Size < sizeof(*msg)) return -1;
+ widget = AxWin3_Widget_int_GetElementByID(Window, msg->WidgetID);
+ if(widget->Fire) widget->Fire(widget);
+
+ return 0; }
+ default:
+ return 0;
+ }
}
tHWND AxWin3_Widget_CreateWindow(tHWND Parent, int W, int H, int RootEleFlags)
@@
-99,10
+128,9
@@
tAxWin3_Widget *AxWin3_Widget_AddWidget(tAxWin3_Widget *Parent, int Type, int Fl
info->Elements[newID] = (void*)-1;
// Create new widget structure
- ret =
malloc(sizeof(tAxWin3_Widget)
);
+ ret =
calloc(sizeof(tAxWin3_Widget), 1
);
ret->Window = Parent->Window;
ret->ID = newID;
- ret->Callback = NULL;
info->Elements[newID] = ret;
@@
-135,6
+163,38
@@
void AxWin3_Widget_DelWidget(tAxWin3_Widget *Widget)
free(Widget);
}
+// --- Callbacks
+void AxWin3_Widget_SetFireHandler(tAxWin3_Widget *Widget, tAxWin3_Widget_FireCb Callback)
+{
+ if(!Widget) return;
+ Widget->Fire = Callback;
+}
+
+void AxWin3_Widget_SetKeyHandler(tAxWin3_Widget *Widget, tAxWin3_Widget_KeyUpDownCb Callback)
+{
+ if(!Widget) return;
+ Widget->KeyUpDown = Callback;
+}
+
+void AxWin3_Widget_SetKeyFireHandler(tAxWin3_Widget *Widget, tAxWin3_Widget_KeyFireCb Callback)
+{
+ if(!Widget) return;
+ Widget->KeyFire = Callback;
+}
+
+void AxWin3_Widget_SetMouseMoveHandler(tAxWin3_Widget *Widget, tAxWin3_Widget_MouseMoveCb Callback)
+{
+ if(!Widget) return;
+ Widget->MouseMove = Callback;
+}
+
+void AxWin3_Widget_SetMouseButtonHandler(tAxWin3_Widget *Widget, tAxWin3_Widget_MouseBtnCb Callback)
+{
+ if(!Widget) return;
+ Widget->MouseButton = Callback;
+}
+
+// --- Manipulation
void AxWin3_Widget_SetFlags(tAxWin3_Widget *Widget, int FlagSet, int FlagMask)
{
tWidgetMsg_SetFlags msg;
UCC
git Repository :: git.ucc.asn.au