mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
window position/size display widget
This commit is contained in:
161
src/geomview.c
Normal file
161
src/geomview.c
Normal file
@@ -0,0 +1,161 @@
|
||||
|
||||
|
||||
|
||||
#include "WINGsP.h"
|
||||
|
||||
|
||||
|
||||
typedef struct W_GeometryView {
|
||||
W_Class widgetClass;
|
||||
WMView *view;
|
||||
|
||||
GC gc;
|
||||
WMFont *font;
|
||||
|
||||
WMSize textSize;
|
||||
|
||||
union {
|
||||
struct {
|
||||
int x, y;
|
||||
} pos;
|
||||
struct {
|
||||
unsigned width, height;
|
||||
} size;
|
||||
} data;
|
||||
|
||||
unsigned showPosition:1;
|
||||
} WGeometryView;
|
||||
|
||||
|
||||
|
||||
static void handleEvents(XEvent *event, void *clientData);
|
||||
static void paint(WGeometryView *gview);
|
||||
|
||||
|
||||
WGeometryView*
|
||||
WCreateGeometryView(WMScreen *scr)
|
||||
{
|
||||
WGeometryView *gview;
|
||||
char buffer[64];
|
||||
static W_Class widgetClass = 0;
|
||||
|
||||
if (!widgetClass) {
|
||||
widgetClass = W_RegisterUserWidget();
|
||||
}
|
||||
|
||||
gview = malloc(sizeof(WGeometryView));
|
||||
if (!gview) {
|
||||
return NULL;
|
||||
}
|
||||
memset(gview, 0, sizeof(WGeometryView));
|
||||
|
||||
gview->widgetClass = widgetClass;
|
||||
|
||||
gview->view = W_CreateTopView(scr);
|
||||
if (!gview->view) {
|
||||
free(gview);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
gview->view->self = gview;
|
||||
|
||||
gview->font = WMSystemFontOfSize(scr, 12);
|
||||
if (!gview->font) {
|
||||
W_DestroyView(gview->view);
|
||||
free(gview);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
{
|
||||
WMColor *black = WMBlackColor(scr);
|
||||
WMColor *gray = WMGrayColor(scr);
|
||||
XGCValues gcv;
|
||||
|
||||
gcv.foreground = WMColorPixel(black);
|
||||
gcv.background = WMColorPixel(gray);
|
||||
|
||||
gview->gc = XCreateGC(WMScreenDisplay(scr), W_DRAWABLE(scr),
|
||||
GCForeground|GCBackground, &gcv);
|
||||
|
||||
WMReleaseColor(black);
|
||||
WMReleaseColor(gray);
|
||||
}
|
||||
|
||||
WMCreateEventHandler(gview->view, ExposureMask, handleEvents, gview);
|
||||
|
||||
sprintf(buffer, "%+05i, %+05i", 0, 0);
|
||||
|
||||
gview->textSize.width = WMWidthOfString(gview->font, buffer,
|
||||
strlen(buffer));
|
||||
gview->textSize.height = WMFontHeight(gview->font);
|
||||
|
||||
W_ResizeView(gview->view, gview->textSize.width+8,
|
||||
gview->textSize.height+6);
|
||||
|
||||
return gview;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WSetGeometryViewShownPosition(WGeometryView *gview, int x, int y)
|
||||
{
|
||||
gview->showPosition = 1;
|
||||
gview->data.pos.x = x;
|
||||
gview->data.pos.y = y;
|
||||
|
||||
paint(gview);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
WSetGeometryViewShownSize(WGeometryView *gview,
|
||||
unsigned width, unsigned height)
|
||||
{
|
||||
gview->showPosition = 0;
|
||||
gview->data.size.width = width;
|
||||
gview->data.size.height = height;
|
||||
|
||||
paint(gview);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
paint(WGeometryView *gview)
|
||||
{
|
||||
char buffer[64];
|
||||
|
||||
if (gview->showPosition) {
|
||||
sprintf(buffer, "%+5i , %+5i ", gview->data.pos.x, gview->data.pos.y);
|
||||
} else {
|
||||
sprintf(buffer, "%+5i x %+5i ", gview->data.size.width, gview->data.size.height);
|
||||
}
|
||||
|
||||
WMDrawImageString(W_VIEW_SCREEN(gview->view),
|
||||
W_VIEW_DRAWABLE(gview->view),
|
||||
gview->gc, gview->font,
|
||||
(W_VIEW_WIDTH(gview->view)-gview->textSize.width)/2,
|
||||
(W_VIEW_HEIGHT(gview->view)-gview->textSize.height)/2,
|
||||
buffer, strlen(buffer));
|
||||
|
||||
W_DrawRelief(W_VIEW_SCREEN(gview->view), W_VIEW_DRAWABLE(gview->view),
|
||||
0, 0, W_VIEW_WIDTH(gview->view), W_VIEW_HEIGHT(gview->view),
|
||||
WRRaised);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
handleEvents(XEvent *event, void *clientData)
|
||||
{
|
||||
WGeometryView *gview = (WGeometryView*)clientData;
|
||||
|
||||
switch (event->type) {
|
||||
case Expose:
|
||||
paint(gview);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
16
src/geomview.h
Normal file
16
src/geomview.h
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
|
||||
typedef struct W_GeometryView WGeometryView;
|
||||
|
||||
|
||||
WGeometryView *WCreateGeometryView(WMScreen *scr);
|
||||
|
||||
void WSetGeometryViewShownPosition(WGeometryView *gview, int x, int y);
|
||||
|
||||
void WSetGeometryViewShownSize(WGeometryView *gview,
|
||||
unsigned width, unsigned height);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user