| 31 |
31 |
| 32 #include "graphics.h" |
32 #include "graphics.h" |
| 33 #include "container.h" |
33 #include "container.h" |
| 34 #include "../common/object.h" |
34 #include "../common/object.h" |
| 35 |
35 |
| 36 UIWIDGET ui_drawingarea(UiObject *obj, ui_drawfunc f, void *userdata) { |
36 #if GTK_CHECK_VERSION(3, 0, 0) |
| |
37 #include "draw_cairo.h" |
| |
38 #endif |
| |
39 |
| |
40 static void destroy_drawingarea(GtkWidget *widget, UiDrawingArea *drawingarea) { |
| |
41 free(drawingarea); |
| |
42 } |
| |
43 |
| |
44 static void drawingarea_draw(UiDrawingArea *drawingarea, cairo_t *cr, int width, int height) { |
| |
45 UiEvent event; |
| |
46 event.obj = drawingarea->obj; |
| |
47 event.window = event.obj->window; |
| |
48 event.document = event.obj->ctx->document; |
| |
49 event.eventdata = NULL; |
| |
50 event.eventdatatype = 0; |
| |
51 event.intval = 0; |
| |
52 event.set = 0; |
| |
53 |
| |
54 |
| |
55 } |
| |
56 |
| |
57 #if GTK_CHECK_VERSION(4, 0, 0) |
| |
58 static void drawfunc( |
| |
59 GtkDrawingArea *area, |
| |
60 cairo_t *cr, |
| |
61 int width, |
| |
62 int height, |
| |
63 gpointer userdata) |
| |
64 { |
| |
65 ui_drawingarea_draw(userdata, cr, width, height); |
| |
66 } |
| |
67 #elif GTK_CHECK_VERSION(3, 0, 0) |
| |
68 gboolean draw_callback(GtkWidget *widget, cairo_t *cr, UiDrawingArea *drawingarea) { |
| |
69 int width = gtk_widget_get_allocated_width(widget); |
| |
70 int height = gtk_widget_get_allocated_height(widget); |
| |
71 ui_drawingarea_draw(drawingarea, cr, width, height); |
| |
72 return FALSE; |
| |
73 } |
| |
74 #endif |
| |
75 |
| |
76 UIWIDGET ui_drawingarea_create(UiObject *obj, UiDrawingAreaArgs *args) { |
| 37 GtkWidget *widget = gtk_drawing_area_new(); |
77 GtkWidget *widget = gtk_drawing_area_new(); |
| 38 |
78 ui_set_name_and_style(widget, args->name, args->style_class); |
| 39 if(f) { |
79 |
| 40 UiDrawEvent *event = malloc(sizeof(UiDrawEvent)); |
80 gtk_drawing_area_set_content_width(GTK_DRAWING_AREA(widget), args->width > 0 ? args->width : 100); |
| 41 event->obj = obj; |
81 gtk_drawing_area_set_content_height(GTK_DRAWING_AREA(widget), args->height > 0 ? args->height : 100); |
| 42 event->callback = f; |
|
| 43 event->userdata = userdata; |
|
| 44 ui_connect_draw_handler(widget, event); |
|
| 45 } |
|
| 46 |
82 |
| 47 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; |
83 UiContainerPrivate *ct = (UiContainerPrivate*)obj->container_end; |
| 48 //UiLayout layout = UI_ARGS2LAYOUT(args); |
84 UiLayout layout = UI_ARGS2LAYOUT(args); |
| 49 UiLayout layout = {0}; |
|
| 50 ct->add(ct, widget, &layout); |
85 ct->add(ct, widget, &layout); |
| |
86 |
| |
87 UiDrawingArea *drawingarea = malloc(sizeof(UiDrawingArea)); |
| |
88 drawingarea->obj = obj; |
| |
89 drawingarea->widget = widget; |
| |
90 drawingarea->draw = args->draw; |
| |
91 drawingarea->drawdata = args->drawdata; |
| |
92 drawingarea->onclick = args->onclick; |
| |
93 drawingarea->onclickdata = args->onclickdata; |
| |
94 drawingarea->onmotion = args->onmotion; |
| |
95 drawingarea->onmotiondata = args->onmotiondata; |
| |
96 |
| |
97 #if GTK_CHECK_VERSION(4, 0, 0) |
| |
98 gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(widget), drawfunc, drawingarea, NULL); |
| |
99 #elif GTK_CHECK_VERSION(3, 0, 0) |
| |
100 g_signal_connect( |
| |
101 widget, |
| |
102 "draw", |
| |
103 G_CALLBACK(draw_callback), |
| |
104 NULL); |
| |
105 #endif |
| |
106 |
| |
107 g_signal_connect( |
| |
108 widget, |
| |
109 "destroy", |
| |
110 G_CALLBACK(destroy_drawingarea), |
| |
111 drawingarea); |
| 51 |
112 |
| 52 return widget; |
113 return widget; |
| 53 } |
114 } |
| 54 |
115 |
| 55 |
116 |
| 142 |
203 |
| 143 void ui_text_setstringl(UiTextLayout *layout, char *str, int len) { |
204 void ui_text_setstringl(UiTextLayout *layout, char *str, int len) { |
| 144 pango_layout_set_text(layout->layout, str, len); |
205 pango_layout_set_text(layout->layout, str, len); |
| 145 } |
206 } |
| 146 |
207 |
| 147 void ui_text_setfont(UiTextLayout *layout, char *font, int size) { |
208 void ui_text_setfont(UiTextLayout *layout, const char *font, int size) { |
| 148 PangoFontDescription *fontDesc; |
209 PangoFontDescription *fontDesc; |
| 149 fontDesc = pango_font_description_from_string(font); |
210 fontDesc = pango_font_description_from_string(font); |
| 150 pango_font_description_set_size(fontDesc, size * PANGO_SCALE); |
211 pango_font_description_set_size(fontDesc, size * PANGO_SCALE); |
| 151 pango_layout_set_font_description(layout->layout, fontDesc); |
212 pango_layout_set_font_description(layout->layout, fontDesc); |
| 152 pango_font_description_free(fontDesc); |
213 pango_font_description_free(fontDesc); |