]> git.pld-linux.org Git - packages/WindowMaker.git/commitdiff
- outdated
authorJakub Bogusz <qboosh@pld-linux.org>
Thu, 9 Mar 2006 17:10:37 +0000 (17:10 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    WindowMaker-updateIconImage.patch -> 1.2

WindowMaker-updateIconImage.patch [deleted file]

diff --git a/WindowMaker-updateIconImage.patch b/WindowMaker-updateIconImage.patch
deleted file mode 100644 (file)
index 8d20fc2..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-diff -urN WindowMaker-0.91.0/src/wmspec.c WindowMaker-0.91.0.patch/src/wmspec.c
---- WindowMaker-0.91.0/src/wmspec.c    2004-10-24 21:36:15.000000000 +0200
-+++ WindowMaker-0.91.0.patch/src/wmspec.c      2005-01-12 23:31:41.833101648 +0100
-@@ -369,57 +369,108 @@
-     return -1;
- }
-+/*
-+ * Find the best icon to be used by Window Maker for appicon/miniwindows.
-+ * Currently the algorithm is to take the image with the size closest
-+ * to icon_size x icon_size, but never bigger than that.
-+ *
-+ * This algorithm is very poorly implemented and needs to be redone (it can
-+ * easily select images with very large widths and very small heights over
-+ * square images, if the area of the former is closer to the desired one).
-+ *
-+ * The logic can also be changed to accept bigger images and scale them down.
-+ */
-+static CARD32*
-+findBestIcon(CARD32 *data, unsigned long items)
-+{
-+    long size, wanted, d, distance;
-+    unsigned long i;
-+    CARD32 *icon;
-+
-+    /* better use only 75% of icon_size. For 64x64 this means 48x48
-+     * This leaves room around the icon for the miniwindow title and
-+     * results in better overall aesthetics -Dan */
-+    wanted = wPreferences.icon_size * wPreferences.icon_size;
-+
-+    for (icon=NULL, distance=LONG_MAX, i=0L; i<items-1; ) {
-+        size = data[i] * data[i+1];
-+        if (size==0)
-+            break;
-+        d = wanted - size;
-+        if (d>=0 && d<=distance && (i+size+2)<=items) {
-+            distance = d;
-+            icon = &data[i];
-+        }
-+        i += size+2;
-+    }
-+
-+    return icon;
-+}
-+
-+
-+static RImage*
-+makeRImageFromARGBData(CARD32 *data)
-+{
-+    int size, width, height, i;
-+    RImage *image;
-+    unsigned char *imgdata;
-+    CARD32 pixel;
-+
-+    width  = data[0];
-+    height = data[1];
-+    size   = width * height;
-+
-+    if (size == 0)
-+        return NULL;
-+
-+    image = RCreateImage(width, height, True);
-+
-+    for (imgdata=image->data, i=2; i<size+2; i++, imgdata+=4) {
-+        pixel = data[i];
-+        imgdata[3] = (pixel >> 24) & 0xff; /* A */
-+        imgdata[0] = (pixel >> 16) & 0xff; /* R */
-+        imgdata[1] = (pixel >>  8) & 0xff; /* G */
-+        imgdata[2] = (pixel >>  0) & 0xff; /* B */
-+    }
-+
-+    return image;
-+}
-+
- static void
- updateIconImage(WScreen *scr, WWindow *wwin)
- {
--    Atom actual_type_return;
--    int actual_format_return;
--    unsigned long nitems_return, bytes_after_return;
--    unsigned char *prop_return;
--    int rc = XGetWindowProperty(dpy, wwin->client_win, net_wm_icon, 0, ~0, False,
--                                XA_CARDINAL, &actual_type_return, &actual_format_return,
--                                &nitems_return, &bytes_after_return, &prop_return);
--
--    if (rc==Success && prop_return) {
--        unsigned int *data = (unsigned int *)prop_return;
--        unsigned int pos = 0, len = 0;
--        unsigned int best_pos = 0, best_tmp = ~0;
--        extern WPreferences wPreferences;
--        unsigned int pref_size = wPreferences.icon_size;
--        unsigned int pref_sq = pref_size*pref_size;
--        char *src, *dst;
--        RImage *new_rimage;
--
--        do {
--            len = data[pos+0]*data[pos+1];
--            unsigned int tmp = pref_sq-len;
--            if (tmp < best_tmp && tmp > 0) {
--                best_tmp = tmp;
--                best_pos = pos;
--            }
--            pos += 2+len;
--        } while (pos < nitems_return && len != 0);
-+    CARD32 *property, *data;
-+    unsigned long items, rest;
-+    Atom type;
-+    int format;
-+    RImage *image;
-+
-+    if (XGetWindowProperty(dpy, wwin->client_win, net_wm_icon, 0L, LONG_MAX,
-+                           False, XA_CARDINAL, &type, &format, &items, &rest,
-+                           (unsigned char**)&property)!=Success || !property) {
-+          return;
-+    }
--        new_rimage = RCreateImage(data[best_pos+0], data[best_pos+1], True);
--        len = data[best_pos+0] * data[best_pos+1];
--        src = (char*)&data[best_pos+2];
--        dst = new_rimage->data;
--        for (pos=0; pos<len; ++pos, src+=4, dst+=4) {
--            dst[0] = src[2]; /* R */
--            dst[1] = src[1]; /* G */
--            dst[2] = src[0]; /* B */
--            dst[3] = src[3]; /* A */
-+    if (type!=XA_CARDINAL || format!=32 || items<2) {
-+        XFree(property);
-+        return;
-         }
--        if (new_rimage) {
-+    data = findBestIcon(property, items);
-+    if (!data) {
-+        XFree(property);
-+        return;
-+    }
-+
-+    image = makeRImageFromARGBData(data);
-+
-+    if (image) {
-             if (wwin->net_icon_image)
-                 RReleaseImage(wwin->net_icon_image);
--            wwin->net_icon_image = new_rimage;
-+      wwin->net_icon_image = image;
-         }
--
--        XFree(prop_return);
--    }
-+    XFree(property);
- }
This page took 0.112945 seconds and 4 git commands to generate.