mirror of
https://github.com/gnustep/libs-back.git
synced 2025-05-31 17:31:33 +00:00
Create a icon pixmap for windowmaker.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@19777 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
b413542445
commit
b9709b714f
2 changed files with 109 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2004-07-26 15:37 Matt Rice <ratmice@yahoo.com>
|
||||||
|
Alexander Malmberg <alexander@malmberg.org>
|
||||||
|
|
||||||
|
* Source/x11/XGServerWindow.m (-_createAppIconPixmaps): New method.
|
||||||
|
(-orderwindow:::): Use -_createAppIconPixmaps to set IconPixmapHint
|
||||||
|
if we're using windowmaker.
|
||||||
|
|
||||||
2004-07-14 Adam Fedor <fedor@gnu.org>
|
2004-07-14 Adam Fedor <fedor@gnu.org>
|
||||||
|
|
||||||
* Documentation/Back/Standards.txt: update.
|
* Documentation/Back/Standards.txt: update.
|
||||||
|
|
|
@ -194,6 +194,11 @@ typedef struct {
|
||||||
/* The atom */
|
/* The atom */
|
||||||
#define _XA_MOTIF_WM_HINTS "_MOTIF_WM_HINTS"
|
#define _XA_MOTIF_WM_HINTS "_MOTIF_WM_HINTS"
|
||||||
|
|
||||||
|
|
||||||
|
Pixmap
|
||||||
|
xgps_cursor_mask(Display *xdpy, Drawable draw, const char *data,
|
||||||
|
int w, int h, int colors);
|
||||||
|
|
||||||
/* Now the code */
|
/* Now the code */
|
||||||
|
|
||||||
/* Set the style `styleMask' for the XWindow `window' using motif
|
/* Set the style `styleMask' for the XWindow `window' using motif
|
||||||
|
@ -1499,6 +1504,85 @@ NSDebugLLog(@"Frame", @"X2O %d, %@, %@", win->number,
|
||||||
DPSinitclip(ctxt);
|
DPSinitclip(ctxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Build a Pixmap of our icon so the windowmaker dock will remember our
|
||||||
|
icon when we quit.
|
||||||
|
|
||||||
|
ICCCM really only allows 1-bit pixmaps for IconPixmapHint, but this code is
|
||||||
|
only used if windowmaker is the window manager, and windowmaker can handle
|
||||||
|
real color pixmaps.
|
||||||
|
*/
|
||||||
|
static Pixmap xIconPixmap;
|
||||||
|
static Pixmap xIconMask;
|
||||||
|
static BOOL didCreatePixmaps;
|
||||||
|
|
||||||
|
-(int) _createAppIconPixmaps
|
||||||
|
{
|
||||||
|
NSImage *image;
|
||||||
|
NSBitmapImageRep *rep;
|
||||||
|
int i, j, w, h, samples, screen;
|
||||||
|
unsigned char *data;
|
||||||
|
XColor pixelColor;
|
||||||
|
GC pixgc;
|
||||||
|
RColor pixelRColor;
|
||||||
|
RContext *rcontext;
|
||||||
|
|
||||||
|
NSAssert(!didCreatePixmaps, @"called _createAppIconPixmap twice");
|
||||||
|
|
||||||
|
didCreatePixmaps = YES;
|
||||||
|
|
||||||
|
image = [NSApp applicationIconImage];
|
||||||
|
rep = (NSBitmapImageRep *)[image bestRepresentationForDevice:nil];
|
||||||
|
|
||||||
|
if (![rep isKindOfClass: [NSBitmapImageRep class]])
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if ([rep bitsPerSample] != 8
|
||||||
|
|| (![[rep colorSpaceName] isEqual: NSDeviceRGBColorSpace]
|
||||||
|
&& ![[rep colorSpaceName] isEqual: NSCalibratedRGBColorSpace])
|
||||||
|
|| [rep isPlanar])
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
data = [rep bitmapData];
|
||||||
|
screen = [[[self screenList] objectAtIndex: 0] intValue];
|
||||||
|
xIconPixmap = XCreatePixmap(dpy,
|
||||||
|
[self xDisplayRootWindowForScreen:screen],
|
||||||
|
[rep pixelsWide], [rep pixelsHigh],
|
||||||
|
DefaultDepth(dpy, screen));
|
||||||
|
pixgc = XCreateGC(dpy, xIconPixmap, 0, NULL);
|
||||||
|
|
||||||
|
h = [rep pixelsHigh];
|
||||||
|
w = [rep pixelsWide];
|
||||||
|
samples = [rep samplesPerPixel];
|
||||||
|
rcontext = [self xrContextForScreen: screen];
|
||||||
|
|
||||||
|
for (i = 0; i < h; i++)
|
||||||
|
{
|
||||||
|
unsigned char *d = data;
|
||||||
|
for (j = 0; j < w; j++)
|
||||||
|
{
|
||||||
|
pixelRColor.red = d[0];
|
||||||
|
pixelRColor.green = d[1];
|
||||||
|
pixelRColor.blue = d[2];
|
||||||
|
|
||||||
|
RGetClosestXColor(rcontext, &pixelRColor, &pixelColor);
|
||||||
|
XSetForeground(dpy, pixgc, pixelColor. pixel);
|
||||||
|
XDrawPoint(dpy, xIconPixmap, pixgc, j, i);
|
||||||
|
d += samples;
|
||||||
|
}
|
||||||
|
data += [rep bytesPerRow];
|
||||||
|
}
|
||||||
|
|
||||||
|
XFreeGC(dpy, pixgc);
|
||||||
|
|
||||||
|
xIconMask = xgps_cursor_mask(dpy, ROOT, [rep bitmapData],
|
||||||
|
[rep pixelsWide],
|
||||||
|
[rep pixelsHigh],
|
||||||
|
[rep samplesPerPixel]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
- (void) orderwindow: (int)op : (int)otherWin : (int)winNum
|
- (void) orderwindow: (int)op : (int)otherWin : (int)winNum
|
||||||
{
|
{
|
||||||
gswindow_device_t *window;
|
gswindow_device_t *window;
|
||||||
|
@ -1537,6 +1621,23 @@ NSDebugLLog(@"Frame", @"X2O %d, %@, %@", win->number,
|
||||||
gen_hints.initial_state = WithdrawnState;
|
gen_hints.initial_state = WithdrawnState;
|
||||||
gen_hints.window_group = ROOT;
|
gen_hints.window_group = ROOT;
|
||||||
gen_hints.icon_window = window->ident;
|
gen_hints.icon_window = window->ident;
|
||||||
|
|
||||||
|
if (!didCreatePixmaps)
|
||||||
|
{
|
||||||
|
[self _createAppIconPixmaps];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xIconPixmap)
|
||||||
|
{
|
||||||
|
gen_hints.flags |= IconPixmapHint;
|
||||||
|
gen_hints.icon_pixmap = xIconPixmap;
|
||||||
|
}
|
||||||
|
if (xIconMask);
|
||||||
|
{
|
||||||
|
gen_hints.flags |= IconMaskHint;
|
||||||
|
gen_hints.icon_mask = xIconMask;
|
||||||
|
}
|
||||||
|
|
||||||
XSetWMHints(dpy, ROOT, &gen_hints);
|
XSetWMHints(dpy, ROOT, &gen_hints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue