9 typedef struct W_Label
{
16 WMFont
*font
; /* if NULL, use default */
21 WMReliefType relief
:3;
22 WMImagePosition imagePosition
:4;
23 WMAlignment alignment
:2;
25 unsigned int noWrap
:1;
27 unsigned int redrawPending
:1;
32 #define DEFAULT_WIDTH 60
33 #define DEFAULT_HEIGHT 14
34 #define DEFAULT_ALIGNMENT WALeft
35 #define DEFAULT_RELIEF WRFlat
36 #define DEFAULT_IMAGE_POSITION WIPNoImage
39 static void destroyLabel(Label
*lPtr
);
40 static void paintLabel(Label
*lPtr
);
43 static void handleEvents(XEvent
*event
, void *data
);
47 WMCreateLabel(WMWidget
*parent
)
51 lPtr
= wmalloc(sizeof(Label
));
52 memset(lPtr
, 0, sizeof(Label
));
54 lPtr
->widgetClass
= WC_Label
;
56 lPtr
->view
= W_CreateView(W_VIEW(parent
));
61 lPtr
->view
->self
= lPtr
;
63 lPtr
->textColor
= WMRetainColor(lPtr
->view
->screen
->black
);
65 WMCreateEventHandler(lPtr
->view
, ExposureMask
|StructureNotifyMask
,
68 W_ResizeView(lPtr
->view
, DEFAULT_WIDTH
, DEFAULT_HEIGHT
);
69 lPtr
->flags
.alignment
= DEFAULT_ALIGNMENT
;
70 lPtr
->flags
.relief
= DEFAULT_RELIEF
;
71 lPtr
->flags
.imagePosition
= DEFAULT_IMAGE_POSITION
;
78 WMSetLabelImage(WMLabel
*lPtr
, WMPixmap
*image
)
80 if (lPtr
->image
!=NULL
)
81 WMReleasePixmap(lPtr
->image
);
84 lPtr
->image
= WMRetainPixmap(image
);
88 if (lPtr
->view
->flags
.realized
) {
95 WMGetLabelImage(WMLabel
*lPtr
)
102 WMSetLabelImagePosition(WMLabel
*lPtr
, WMImagePosition position
)
104 lPtr
->flags
.imagePosition
= position
;
105 if (lPtr
->view
->flags
.realized
) {
112 WMSetLabelTextAlignment(WMLabel
*lPtr
, WMAlignment alignment
)
114 lPtr
->flags
.alignment
= alignment
;
115 if (lPtr
->view
->flags
.realized
) {
122 WMSetLabelRelief(WMLabel
*lPtr
, WMReliefType relief
)
124 lPtr
->flags
.relief
= relief
;
125 if (lPtr
->view
->flags
.realized
) {
132 WMSetLabelText(WMLabel
*lPtr
, char *text
)
135 wfree(lPtr
->caption
);
138 lPtr
->caption
= wstrdup(text
);
140 lPtr
->caption
= NULL
;
142 if (lPtr
->view
->flags
.realized
) {
149 WMSetLabelFont(WMLabel
*lPtr
, WMFont
*font
)
151 if (lPtr
->font
!=NULL
)
152 WMReleaseFont(lPtr
->font
);
154 lPtr
->font
= WMRetainFont(font
);
158 if (lPtr
->view
->flags
.realized
) {
165 WMSetLabelTextColor(WMLabel
*lPtr
, WMColor
*color
)
168 WMReleaseColor(lPtr
->textColor
);
169 lPtr
->textColor
= WMRetainColor(color
);
174 WMSetLabelWraps(WMLabel
*lPtr
, Bool flag
)
176 if (lPtr
->flags
.noWrap
!= !flag
) {
177 lPtr
->flags
.noWrap
= !flag
;
178 if (lPtr
->view
->flags
.realized
)
185 paintLabel(Label
*lPtr
)
187 W_Screen
*scrPtr
= lPtr
->view
->screen
;
191 gc
= WMColorGC(lPtr
->textColor
);
193 gc
= WMColorGC(scrPtr
->black
);
195 W_PaintTextAndImage(lPtr
->view
, !lPtr
->flags
.noWrap
, gc
,
196 (lPtr
->font
!=NULL
? lPtr
->font
: scrPtr
->normalFont
),
197 lPtr
->flags
.relief
, lPtr
->caption
,
198 lPtr
->flags
.alignment
, lPtr
->image
,
199 lPtr
->flags
.imagePosition
, NULL
, 0);
205 handleEvents(XEvent
*event
, void *data
)
207 Label
*lPtr
= (Label
*)data
;
209 CHECK_CLASS(data
, WC_Label
);
212 switch (event
->type
) {
214 if (event
->xexpose
.count
!=0)
227 destroyLabel(Label
*lPtr
)
230 WMReleaseColor(lPtr
->textColor
);
233 wfree(lPtr
->caption
);
236 WMReleaseFont(lPtr
->font
);
239 WMReleasePixmap(lPtr
->image
);