ui/gtk/graphics.c

changeset 848
5a4b72489111
parent 801
e096c441e874
child 854
9291921f21c5
equal deleted inserted replaced
847:50de0f36973f 848:5a4b72489111
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);

mercurial