48 ct->add(ct, widget, TRUE); |
48 ct->add(ct, widget, TRUE); |
49 |
49 |
50 return widget; |
50 return widget; |
51 } |
51 } |
52 |
52 |
|
53 |
|
54 static gboolean widget_button_pressed( |
|
55 GtkWidget *widget, |
|
56 GdkEvent *event, |
|
57 gpointer userdata) |
|
58 { |
|
59 UiEventData *eventdata = userdata; |
|
60 |
|
61 UiMouseEvent me; |
|
62 me.x = (int)event->button.x; |
|
63 me.y = (int)event->button.y; |
|
64 |
|
65 int exec = 0; |
|
66 if(event->button.type == GDK_BUTTON_PRESS) { |
|
67 exec = 1; |
|
68 me.type = UI_PRESS; |
|
69 } else if(event->button.type == GDK_2BUTTON_PRESS) { |
|
70 exec = 1; |
|
71 me.type = UI_PRESS2; |
|
72 } |
|
73 |
|
74 if(exec) { |
|
75 UiEvent e; |
|
76 e.obj = eventdata->obj; |
|
77 e.window = eventdata->obj->window; |
|
78 e.document = eventdata->obj->ctx->document; |
|
79 e.eventdata = &me; |
|
80 e.intval = 0; |
|
81 eventdata->callback(&e, eventdata->userdata); |
|
82 } |
|
83 return TRUE; |
|
84 } |
|
85 |
|
86 void ui_drawingarea_mousehandler(UiObject *obj, UIWIDGET widget, ui_callback f, void *u) { |
|
87 gtk_widget_set_events(widget, GDK_BUTTON_PRESS_MASK); |
|
88 if(f) { |
|
89 UiEventData *event = malloc(sizeof(UiEventData)); |
|
90 event->obj = obj; |
|
91 event->callback = f; |
|
92 event->userdata = u; |
|
93 |
|
94 g_signal_connect(G_OBJECT(widget), |
|
95 "button-press-event", |
|
96 G_CALLBACK(widget_button_pressed), |
|
97 event); |
|
98 } else { |
|
99 // TODO: warning |
|
100 } |
|
101 } |
|
102 |
|
103 |
53 // text layout |
104 // text layout |
54 UiTextLayout* ui_text(UiGraphics *g) { |
105 UiTextLayout* ui_text(UiGraphics *g) { |
55 UiTextLayout *layout = malloc(sizeof(UiTextLayout)); |
106 UiTextLayout *layout = malloc(sizeof(UiTextLayout)); |
56 PangoContext *pc = ui_get_pango_context(g); |
107 PangoContext *pc = ui_get_pango_context(g); |
57 layout->layout = pango_layout_new(pc); |
108 layout->layout = pango_layout_new(pc); |