1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h>
30 #include <stdlib.h>
31
32 #include "container.h"
33
34 #include "draw_gdk.h"
35
36
37 gboolean ui_drawingarea_expose(GtkWidget *w, GdkEventExpose *e,
void *data) {
38 UiGdkGraphics g;
39 g.g.width = w->allocation.width;
40 g.g.height = w->allocation.height;
41 g.widget = w;
42 g.gc = gdk_gc_new(w->window);
43
44 UiDrawEvent *event = data;
45 UiEvent ev;
46 ev.obj = event->obj;
47 ev.window = event->obj->window;
48 ev.document = event->obj->ctx->document;
49
50 event->callback(&ev, &g.g, event->userdata);
51
52 return FALSE;
53 }
54
55
56
57 void ui_connect_draw_handler(GtkWidget *widget, UiDrawEvent *event) {
58 g_signal_connect(
G_OBJECT(widget),
59 "expose_event",
60 G_CALLBACK(ui_drawingarea_expose),
61 event);
62 }
63
64 PangoContext *ui_get_pango_context(UiGraphics *g) {
65 UiGdkGraphics *gr = (UiGdkGraphics*)g;
66 return gtk_widget_get_pango_context(gr->widget);
67 }
68
69
70 void ui_graphics_color(UiGraphics *g,
int red,
int green,
int blue) {
71 UiGdkGraphics *gr = (UiGdkGraphics*)g;
72 GdkColor color;
73 color.red = red *
257;
74 color.green = green *
257;
75 color.blue = blue *
257;
76 gdk_gc_set_rgb_fg_color(gr->gc, &color);
77
78 }
79
80 void ui_draw_line(UiGraphics *g,
int x1,
int y1,
int x2,
int y2) {
81 UiGdkGraphics *gr = (UiGdkGraphics*)g;
82 gdk_draw_line(gr->widget->window, gr->gc, x1, y1, x2, y2);
83 }
84
85 void ui_draw_rect(UiGraphics *g,
int x,
int y,
int w,
int h,
int fill) {
86 UiGdkGraphics *gr = (UiGdkGraphics*)g;
87 gdk_draw_rectangle(gr->widget->window, gr->gc, fill, x, y, w, h);
88 }
89
90 void ui_draw_text(UiGraphics *g,
int x,
int y, UiTextLayout *text) {
91 UiGdkGraphics *gr = (UiGdkGraphics*)g;
92 gdk_draw_layout(gr->widget->window, gr->gc, x, y, text->layout);
93 }
94