ui/motif/graphics.c

changeset 113
dde28a806552
parent 100
d2bd73d28ff1
equal deleted inserted replaced
112:c3f2f16fa4b8 113:dde28a806552
32 #include <X11/IntrinsicP.h> 32 #include <X11/IntrinsicP.h>
33 33
34 #include "graphics.h" 34 #include "graphics.h"
35 35
36 #include "container.h" 36 #include "container.h"
37
38 UIWIDGET ui_drawingarea_create(UiObject *obj, UiDrawingAreaArgs *args) {
39 Arg xargs[16];
40 int n = 0;
41
42 UiContainerPrivate *ctn = ui_obj_container(obj);
43 UiLayout layout = UI_ARGS2LAYOUT(args);
44
45 Widget parent = ui_container_prepare(ctn, &layout, xargs, &n);
46 char *name = args->name ? (char*)args->name : "drawingarea";
47
48 Widget widget = XmCreateDrawingArea(parent, name, xargs, n);
49 XtManageChild(widget);
50 ui_container_add(ctn, widget);
51
52 UiDrawingArea *drawingarea = malloc(sizeof(UiDrawingArea));
53 drawingarea->obj = obj;
54 drawingarea->draw = args->draw;
55 drawingarea->drawdata = args->drawdata;
56 drawingarea->onclick = args->onclick;
57 drawingarea->onclickdata = args->onclickdata;
58 drawingarea->onmotion = args->onmotion;
59 drawingarea->onmotiondata = args->onmotiondata;
60 drawingarea->gc = NULL;
61
62 XtAddCallback(
63 widget,
64 XmNdestroyCallback,
65 (XtCallbackProc)ui_drawingarea_destroy,
66 drawingarea);
67 XtAddCallback(
68 widget,
69 XmNexposeCallback,
70 (XtCallbackProc)ui_drawingarea_expose,
71 drawingarea);
72
73 return widget;
74 }
75
76 void ui_drawingarea_destroy(Widget w, UiDrawingArea *drawingarea, XtPointer d) {
77 if(drawingarea->gc) {
78 XFreeGC(XtDisplay(w), drawingarea->gc);
79 }
80 free(drawingarea);
81 }
82
83 void ui_drawingarea_expose(Widget w, UiDrawingArea *drawingarea, XtPointer d) {
84 Display *dp = XtDisplay(w);
85
86 if(!drawingarea->gc) {
87 XGCValues gcvals;
88 gcvals.foreground = BlackPixelOfScreen(XtScreen(w));
89 drawingarea->gc = XCreateGC(dp, XtWindow(w), (GCForeground), &gcvals);
90 }
91
92 if(drawingarea->draw) {
93 UiEvent event;
94 event.obj = drawingarea->obj;
95 event.window = event.obj->window;
96 event.document = event.obj->ctx->document;
97 event.eventdata = NULL;
98 event.eventdatatype = 0;
99 event.intval = 0;
100 event.set = 0;
101
102 UiXlibGraphics g;
103 g.g.width = w->core.width;
104 g.g.height = w->core.height;
105 g.widget = w;
106 g.display = dp;
107 g.colormap = w->core.colormap;
108 g.gc = drawingarea->gc;
109
110 drawingarea->draw(&event, (UiGraphics*)&g, drawingarea->drawdata);
111 }
112 }
113
114 void ui_drawingarea_getsize(UIWIDGET drawingarea, int *width, int *height) {
115
116 }
117
118 void ui_drawingarea_redraw(UIWIDGET drawingarea) {
119
120 }

mercurial