~profzoom/ubuntu/quantal/wmaker/bug-1079925

« back to all changes in this revision

Viewing changes to src/geomview.c

  • Committer: Bazaar Package Importer
  • Author(s): Marcelo E. Magallon
  • Date: 2004-11-10 14:05:30 UTC
  • Revision ID: james.westby@ubuntu.com-20041110140530-qpd66b5lm38x7apk
Tags: upstream-0.91.0
ImportĀ upstreamĀ versionĀ 0.91.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 
 
3
 
 
4
#include <WINGs/WINGsP.h>
 
5
 
 
6
 
 
7
 
 
8
typedef struct W_GeometryView {
 
9
    W_Class widgetClass;
 
10
    WMView *view;
 
11
 
 
12
    WMColor *color;
 
13
    WMColor *bgColor;
 
14
 
 
15
    WMFont *font;
 
16
 
 
17
    WMSize textSize;
 
18
 
 
19
    union {
 
20
        struct {
 
21
            int x, y;
 
22
        } pos;
 
23
        struct {
 
24
            unsigned width, height;
 
25
        } size;
 
26
    } data;
 
27
 
 
28
    unsigned showPosition:1;
 
29
} WGeometryView;
 
30
 
 
31
 
 
32
 
 
33
static void handleEvents(XEvent *event, void *clientData);
 
34
static void paint(WGeometryView *gview);
 
35
 
 
36
 
 
37
WGeometryView*
 
38
WCreateGeometryView(WMScreen *scr)
 
39
{
 
40
    WGeometryView *gview;
 
41
    char buffer[64];
 
42
    static W_Class widgetClass = 0;
 
43
 
 
44
    if (!widgetClass) {
 
45
        widgetClass = W_RegisterUserWidget();
 
46
    }
 
47
 
 
48
    gview = malloc(sizeof(WGeometryView));
 
49
    if (!gview) {
 
50
        return NULL;
 
51
    }
 
52
    memset(gview, 0, sizeof(WGeometryView));
 
53
 
 
54
    gview->widgetClass = widgetClass;
 
55
 
 
56
    gview->view = W_CreateTopView(scr);
 
57
    if (!gview->view) {
 
58
        wfree(gview);
 
59
 
 
60
        return NULL;
 
61
    }
 
62
    gview->view->self = gview;
 
63
 
 
64
    gview->font = WMSystemFontOfSize(scr, 12);
 
65
    if (!gview->font) {
 
66
        W_DestroyView(gview->view);
 
67
        wfree(gview);
 
68
 
 
69
        return NULL;
 
70
    }
 
71
 
 
72
    gview->bgColor = WMCreateRGBColor(scr, 0x3333, 0x6666, 0x9999, True);
 
73
    gview->color = WMWhiteColor(scr);
 
74
 
 
75
    WMCreateEventHandler(gview->view, ExposureMask, handleEvents, gview);
 
76
 
 
77
    snprintf(buffer, sizeof(buffer), "%+05i,  %+05i", 0, 0);
 
78
 
 
79
    gview->textSize.width = WMWidthOfString(gview->font, buffer,
 
80
                                            strlen(buffer));
 
81
    gview->textSize.height = WMFontHeight(gview->font);
 
82
 
 
83
    WMSetWidgetBackgroundColor(gview, gview->bgColor);
 
84
 
 
85
    W_ResizeView(gview->view, gview->textSize.width+8,
 
86
                 gview->textSize.height+6);
 
87
 
 
88
    return gview;
 
89
}
 
90
 
 
91
 
 
92
void
 
93
WSetGeometryViewShownPosition(WGeometryView *gview, int x, int y)
 
94
{
 
95
    gview->showPosition = 1;
 
96
    gview->data.pos.x = x;
 
97
    gview->data.pos.y = y;
 
98
 
 
99
    paint(gview);
 
100
}
 
101
 
 
102
 
 
103
void
 
104
WSetGeometryViewShownSize(WGeometryView *gview,
 
105
                          unsigned width, unsigned height)
 
106
{
 
107
    gview->showPosition = 0;
 
108
    gview->data.size.width = width;
 
109
    gview->data.size.height = height;
 
110
 
 
111
    paint(gview);
 
112
}
 
113
 
 
114
 
 
115
 
 
116
static void
 
117
paint(WGeometryView *gview)
 
118
{
 
119
    char buffer[64];
 
120
 
 
121
    if (gview->showPosition) {
 
122
        snprintf(buffer, sizeof(buffer), "%+5i , %+5i    ",
 
123
                 gview->data.pos.x, gview->data.pos.y);
 
124
    } else {
 
125
        snprintf(buffer, sizeof(buffer), "%+5i x %+5i    ",
 
126
                 gview->data.size.width, gview->data.size.height);
 
127
    }
 
128
 
 
129
    WMDrawImageString(W_VIEW_SCREEN(gview->view),
 
130
                      W_VIEW_DRAWABLE(gview->view),
 
131
                      gview->color, gview->bgColor, gview->font,
 
132
                      (W_VIEW_WIDTH(gview->view)-gview->textSize.width)/2,
 
133
                      (W_VIEW_HEIGHT(gview->view)-gview->textSize.height)/2,
 
134
                      buffer, strlen(buffer));
 
135
 
 
136
    W_DrawRelief(W_VIEW_SCREEN(gview->view), W_VIEW_DRAWABLE(gview->view),
 
137
                 0, 0, W_VIEW_WIDTH(gview->view), W_VIEW_HEIGHT(gview->view),
 
138
                 WRSimple);
 
139
}
 
140
 
 
141
 
 
142
 
 
143
static void
 
144
handleEvents(XEvent *event, void *clientData)
 
145
{
 
146
    WGeometryView *gview = (WGeometryView*)clientData;
 
147
 
 
148
    switch (event->type) {
 
149
    case Expose:
 
150
        paint(gview);
 
151
        break;
 
152
 
 
153
    }
 
154
}
 
155