changed indentation to use spaces only
[wmaker-crm.git] / src / geomview.c
blob5a46b024434c88febc5d6769a826917bddfc3b51
4 #include <WINGs/WINGsP.h>
8 typedef struct W_GeometryView {
9 W_Class widgetClass;
10 WMView *view;
12 WMColor *black;
13 WMColor *gray;
14 WMFont *font;
16 WMSize textSize;
18 union {
19 struct {
20 int x, y;
21 } pos;
22 struct {
23 unsigned width, height;
24 } size;
25 } data;
27 unsigned showPosition:1;
28 } WGeometryView;
32 static void handleEvents(XEvent *event, void *clientData);
33 static void paint(WGeometryView *gview);
36 WGeometryView*
37 WCreateGeometryView(WMScreen *scr)
39 WGeometryView *gview;
40 char buffer[64];
41 static W_Class widgetClass = 0;
43 if (!widgetClass) {
44 widgetClass = W_RegisterUserWidget();
47 gview = malloc(sizeof(WGeometryView));
48 if (!gview) {
49 return NULL;
51 memset(gview, 0, sizeof(WGeometryView));
53 gview->widgetClass = widgetClass;
55 gview->view = W_CreateTopView(scr);
56 if (!gview->view) {
57 wfree(gview);
59 return NULL;
61 gview->view->self = gview;
63 gview->font = WMSystemFontOfSize(scr, 12);
64 if (!gview->font) {
65 W_DestroyView(gview->view);
66 wfree(gview);
68 return NULL;
71 gview->black = WMBlackColor(scr);
72 gview->gray = WMGrayColor(scr);
74 WMCreateEventHandler(gview->view, ExposureMask, handleEvents, gview);
76 snprintf(buffer, sizeof(buffer), "%+05i, %+05i", 0, 0);
78 gview->textSize.width = WMWidthOfString(gview->font, buffer,
79 strlen(buffer));
80 gview->textSize.height = WMFontHeight(gview->font);
82 W_ResizeView(gview->view, gview->textSize.width+8,
83 gview->textSize.height+6);
85 return gview;
89 void
90 WSetGeometryViewShownPosition(WGeometryView *gview, int x, int y)
92 gview->showPosition = 1;
93 gview->data.pos.x = x;
94 gview->data.pos.y = y;
96 paint(gview);
100 void
101 WSetGeometryViewShownSize(WGeometryView *gview,
102 unsigned width, unsigned height)
104 gview->showPosition = 0;
105 gview->data.size.width = width;
106 gview->data.size.height = height;
108 paint(gview);
113 static void
114 paint(WGeometryView *gview)
116 char buffer[64];
118 if (gview->showPosition) {
119 snprintf(buffer, sizeof(buffer), "%+5i , %+5i ",
120 gview->data.pos.x, gview->data.pos.y);
121 } else {
122 snprintf(buffer, sizeof(buffer), "%+5i x %+5i ",
123 gview->data.size.width, gview->data.size.height);
126 WMDrawImageString(W_VIEW_SCREEN(gview->view),
127 W_VIEW_DRAWABLE(gview->view),
128 gview->black, gview->gray, gview->font,
129 (W_VIEW_WIDTH(gview->view)-gview->textSize.width)/2,
130 (W_VIEW_HEIGHT(gview->view)-gview->textSize.height)/2,
131 buffer, strlen(buffer));
133 W_DrawRelief(W_VIEW_SCREEN(gview->view), W_VIEW_DRAWABLE(gview->view),
134 0, 0, W_VIEW_WIDTH(gview->view), W_VIEW_HEIGHT(gview->view),
135 WRRaised);
140 static void
141 handleEvents(XEvent *event, void *clientData)
143 WGeometryView *gview = (WGeometryView*)clientData;
145 switch (event->type) {
146 case Expose:
147 paint(gview);
148 break;