1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-03-09 02:55:52 +01:00

Code update for Window Maker version 0.50.0

Read changes in ChangeLog and NEWS
This commit is contained in:
dan
1999-01-06 15:22:33 +00:00
parent 16698efd45
commit 0261c32636
232 changed files with 20628 additions and 8087 deletions

View File

@@ -29,9 +29,9 @@ static void destroyColorWell(ColorWell *cPtr);
static void paintColorWell(ColorWell *cPtr);
static void handleEvents(XEvent *event, void *data);
#if 0
static void handleDragEvents(XEvent *event, void *data);
#endif
static void handleActionEvents(XEvent *event, void *data);
static void resizeColorWell();
@@ -73,6 +73,7 @@ WMCreateColorWell(WMWidget *parent)
free(cPtr);
return NULL;
}
cPtr->view->self = cPtr;
cPtr->colorView = W_CreateView(cPtr->view);
if (!cPtr->colorView) {
@@ -80,19 +81,22 @@ WMCreateColorWell(WMWidget *parent)
free(cPtr);
return NULL;
}
cPtr->colorView->self = cPtr;
WMCreateEventHandler(cPtr->view, ExposureMask|StructureNotifyMask
|ClientMessageMask, handleEvents, cPtr);
WMCreateEventHandler(cPtr->colorView, ExposureMask, handleEvents, cPtr);
#if 0
WMCreateEventHandler(cPtr->colorView, ButtonPressMask|Button1MotionMask,
handleDragEvents, cPtr);
#endif
WMCreateEventHandler(cPtr->colorView, ButtonPressMask|ButtonMotionMask
|EnterWindowMask, handleDragEvents, cPtr);
WMCreateEventHandler(cPtr->view, ButtonPressMask, handleActionEvents,
cPtr);
cPtr->colorView->flags.mapWhenRealized = 1;
cPtr->flags.bordered = 1;
resizeColorWell(cPtr, DEFAULT_WIDTH, DEFAULT_HEIGHT);
@@ -119,6 +123,17 @@ WMGetColorWellColor(WMColorWell *cPtr)
return cPtr->color;
}
void
WSetColorWellBordered(WMColorWell *cPtr, Bool flag)
{
if (cPtr->flags.bordered != flag) {
cPtr->flags.bordered = flag;
resizeColorWell(cPtr, cPtr->view->size.width, cPtr->view->size.height);
}
}
#define MIN(a,b) ((a) > (b) ? (b) : (a))
static void
@@ -126,19 +141,28 @@ resizeColorWell(WMColorWell *cPtr, unsigned int width, unsigned int height)
{
int bw;
if (width < MIN_WIDTH)
width = MIN_WIDTH;
if (height < MIN_HEIGHT)
height = MIN_HEIGHT;
if (cPtr->flags.bordered) {
bw = (int)((float)MIN(width, height)*0.24);
W_ResizeView(cPtr->view, width, height);
W_ResizeView(cPtr->colorView, width-2*bw, height-2*bw);
if (width < MIN_WIDTH)
width = MIN_WIDTH;
if (height < MIN_HEIGHT)
height = MIN_HEIGHT;
if (cPtr->colorView->pos.x!=bw || cPtr->colorView->pos.y!=bw)
W_MoveView(cPtr->colorView, bw, bw);
bw = (int)((float)MIN(width, height)*0.24);
W_ResizeView(cPtr->view, width, height);
W_ResizeView(cPtr->colorView, width-2*bw, height-2*bw);
if (cPtr->colorView->pos.x!=bw || cPtr->colorView->pos.y!=bw)
W_MoveView(cPtr->colorView, bw, bw);
} else {
W_ResizeView(cPtr->view, width, height);
W_ResizeView(cPtr->colorView, width, height);
W_MoveView(cPtr->colorView, 0, 0);
}
}
@@ -184,7 +208,7 @@ handleEvents(XEvent *event, void *data)
}
}
#if 0
static WMPixmap*
makeDragPixmap(WMColorWell *cPtr)
{
@@ -201,6 +225,116 @@ makeDragPixmap(WMColorWell *cPtr)
}
static void
slideView(WMView *view, int srcX, int srcY, int dstX, int dstY)
{
double x, y, dx, dy;
int i;
srcX -= 8;
srcY -= 8;
dstX -= 8;
dstY -= 8;
x = srcX;
y = srcY;
dx = (double)(dstX-srcX)/20.0;
dy = (double)(dstY-srcY)/20.0;
for (i = 0; i < 20; i++) {
W_MoveView(view, x, y);
XFlush(view->screen->display);
x += dx;
y += dy;
}
}
static void
dragColor(ColorWell *cPtr, XEvent *event, WMPixmap *image)
{
WMView *dragView;
WMScreen *scr = cPtr->view->screen;
Display *dpy = scr->display;
XColor black = {0, 0,0,0, DoRed|DoGreen|DoBlue};
XColor green = {0, 0x4500,0xb000,0x4500, DoRed|DoGreen|DoBlue};
XColor back = {0, 0xffff,0xffff,0xffff, DoRed|DoGreen|DoBlue};
Bool done = False;
WMColorWell *activeWell = NULL;
dragView = W_CreateTopView(scr);
W_ResizeView(dragView, 16, 16);
dragView->attribFlags |= CWOverrideRedirect | CWSaveUnder;
dragView->attribs.event_mask = StructureNotifyMask;
dragView->attribs.override_redirect = True;
dragView->attribs.save_under = True;
W_MoveView(dragView, event->xmotion.x_root-8, event->xmotion.y_root-8);
W_RealizeView(dragView);
W_MapView(dragView);
XSetWindowBackgroundPixmap(dpy, dragView->window, WMGetPixmapXID(image));
XClearWindow(dpy, dragView->window);
XGrabPointer(dpy, dragView->window, True,
ButtonMotionMask|ButtonReleaseMask|EnterWindowMask,
GrabModeSync, GrabModeAsync,
scr->rootWin, scr->defaultCursor, CurrentTime);
while (!done) {
XEvent ev;
WMView *view;
XAllowEvents(dpy, SyncPointer, CurrentTime);
WMNextEvent(dpy, &ev);
switch (ev.type) {
case ButtonRelease:
if (activeWell != NULL) {
WMSetColorWellColor(activeWell, cPtr->color);
} else {
slideView(dragView, ev.xbutton.x_root, ev.xbutton.y_root,
event->xmotion.x_root, event->xmotion.y_root);
}
done = True;
break;
case EnterNotify:
view = W_GetViewForXWindow(dpy, ev.xcrossing.window);
if (view && view->self && W_CLASS(view->self) == WC_ColorWell
&& view->self != activeWell && view->self != cPtr) {
activeWell = view->self;
XRecolorCursor(dpy, scr->defaultCursor, &green, &back);
} else if (view->self!=NULL && view->self != activeWell) {
XRecolorCursor(dpy, scr->defaultCursor, &black, &back);
activeWell = NULL;
}
break;
case MotionNotify:
W_MoveView(dragView, ev.xmotion.x_root-8, ev.xmotion.y_root-8);
break;
default:
WMHandleEvent(&ev);
break;
}
}
XUngrabPointer(dpy, CurrentTime);
XRecolorCursor(dpy, scr->defaultCursor, &black, &back);
W_DestroyView(dragView);
}
static void
handleDragEvents(XEvent *event, void *data)
@@ -214,20 +348,24 @@ handleDragEvents(XEvent *event, void *data)
cPtr->ipoint.y = event->xbutton.y;
}
break;
case MotionNotify:
if (event->xmotion.state & Button1Mask) {
if (abs(cPtr->ipoint.x - event->xmotion.x) > 4
|| abs(cPtr->ipoint.y - event->xmotion.y) > 4) {
WMSize offs;
WMPixmap *pixmap;
offs.width = 2;
offs.height = 2;
pixmap = makeDragPixmap(cPtr);
/*
WMDragImageFromView(cPtr->view, pixmap, cPtr->view->pos,
offs, event, True);
* */
dragColor(cPtr, event, pixmap);
WMReleasePixmap(pixmap);
}
@@ -235,7 +373,7 @@ handleDragEvents(XEvent *event, void *data)
break;
}
}
#endif
static void