ui/motif/graphics.c

changeset 98
efaae97bd95b
parent 97
1a786201465f
child 103
6a6718269c22
equal deleted inserted replaced
97:1a786201465f 98:efaae97bd95b
90 90
91 XtManageChild(drawingarea); 91 XtManageChild(drawingarea);
92 return drawingarea; 92 return drawingarea;
93 } 93 }
94 94
95 static void ui_drawingarea_input(Widget widget, XtPointer u, XtPointer c) {
96 XmDrawingAreaCallbackStruct *cbs = (XmDrawingAreaCallbackStruct*)c;
97 XEvent *xevent = cbs->event;
98 UiMouseEventData *event = u;
99
100 if (cbs->reason == XmCR_INPUT) {
101 if (xevent->xany.type == ButtonPress) {
102 UiMouseEvent me;
103 me.x = xevent->xbutton.x;
104 me.y = xevent->xbutton.y;
105 // TODO: configurable double click time
106 me.type = xevent->xbutton.time - event->last_event > 300 ? UI_PRESS : UI_PRESS2;
107
108 UiEvent e;
109 e.obj = event->obj;
110 e.window = event->obj->window;
111 e.document = event->obj->ctx->document;
112 e.eventdata = &me;
113 e.intval = 0;
114 event->callback(&e, event->userdata);
115
116
117 event->last_event = me.type == UI_PRESS2 ? 0 : xevent->xbutton.time;
118 }
119 }
120
121 }
122
123 void ui_mouse_handler(UiObject *obj, UIWIDGET widget, ui_callback f, void *u) {
124 if(f) {
125 UiMouseEventData *event = malloc(sizeof(UiMouseEventData));
126 event->obj = obj;
127 event->callback = f;
128 event->userdata = u;
129 event->last_event = 0;
130
131 XtAddCallback(widget, XmNinputCallback, ui_drawingarea_input, event);
132 }
133 }
95 134
96 /* -------------------- text layout functions -------------------- */ 135 /* -------------------- text layout functions -------------------- */
97 UiTextLayout* ui_text(UiGraphics *g) { 136 UiTextLayout* ui_text(UiGraphics *g) {
98 UiTextLayout *text = malloc(sizeof(UiTextLayout)); 137 UiTextLayout *text = malloc(sizeof(UiTextLayout));
99 memset(text, 0, sizeof(UiTextLayout)); 138 memset(text, 0, sizeof(UiTextLayout));

mercurial