[Pkg-mozext-commits] [firetray] 05/14: * Make menu icons "transparent" during initialization. * Replace winnt menu icons with smaller ones.

David Prévot taffit at moszumanska.debian.org
Mon Sep 15 02:00:34 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository firetray.

commit 9628bee08ea31a2ecb77ed2d3a0f9b9a307be533
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Sun Sep 14 15:25:50 2014 +0200

    * Make menu icons "transparent" during initialization.
    * Replace winnt menu icons with smaller ones.
---
 src/chrome/skin/icons/winnt/application-exit.bmp | Bin 2358 -> 1644 bytes
 src/chrome/skin/icons/winnt/document-new.bmp     | Bin 2358 -> 1644 bytes
 src/chrome/skin/icons/winnt/gtk-apply.bmp        | Bin 1654 -> 1644 bytes
 src/chrome/skin/icons/winnt/gtk-edit.bmp         | Bin 2358 -> 1516 bytes
 src/chrome/skin/icons/winnt/gtk-preferences.bmp  | Bin 2358 -> 1644 bytes
 src/modules/ctypes/winnt/gdi32.jsm               |   4 ++
 src/modules/ctypes/winnt/user32.jsm              |   3 ++
 src/modules/winnt/FiretrayStatusIcon.jsm         |  52 +++++++++++++++++++----
 8 files changed, 50 insertions(+), 9 deletions(-)

diff --git a/src/chrome/skin/icons/winnt/application-exit.bmp b/src/chrome/skin/icons/winnt/application-exit.bmp
index 99e6f29..b4c7d6f 100644
Binary files a/src/chrome/skin/icons/winnt/application-exit.bmp and b/src/chrome/skin/icons/winnt/application-exit.bmp differ
diff --git a/src/chrome/skin/icons/winnt/document-new.bmp b/src/chrome/skin/icons/winnt/document-new.bmp
index e7cf0af..b91bef3 100644
Binary files a/src/chrome/skin/icons/winnt/document-new.bmp and b/src/chrome/skin/icons/winnt/document-new.bmp differ
diff --git a/src/chrome/skin/icons/winnt/gtk-apply.bmp b/src/chrome/skin/icons/winnt/gtk-apply.bmp
index 7b5681a..125a98d 100644
Binary files a/src/chrome/skin/icons/winnt/gtk-apply.bmp and b/src/chrome/skin/icons/winnt/gtk-apply.bmp differ
diff --git a/src/chrome/skin/icons/winnt/gtk-edit.bmp b/src/chrome/skin/icons/winnt/gtk-edit.bmp
index 38b0a87..b9b1367 100644
Binary files a/src/chrome/skin/icons/winnt/gtk-edit.bmp and b/src/chrome/skin/icons/winnt/gtk-edit.bmp differ
diff --git a/src/chrome/skin/icons/winnt/gtk-preferences.bmp b/src/chrome/skin/icons/winnt/gtk-preferences.bmp
index 4d579e6..6c48c8b 100644
Binary files a/src/chrome/skin/icons/winnt/gtk-preferences.bmp and b/src/chrome/skin/icons/winnt/gtk-preferences.bmp differ
diff --git a/src/modules/ctypes/winnt/gdi32.jsm b/src/modules/ctypes/winnt/gdi32.jsm
index c8b430f..ba99226 100644
--- a/src/modules/ctypes/winnt/gdi32.jsm
+++ b/src/modules/ctypes/winnt/gdi32.jsm
@@ -43,6 +43,7 @@ function gdi32_defines(lib) {
   this.NOMIRRORBITMAP = win32.DWORD(0x80000000); /* Do not Mirror the bitmap in this call */
   this.CAPTUREBLT     = win32.DWORD(0x40000000); /* Include layered windows */
   lib.lazy_bind("CreateCompatibleBitmap", win32.HBITMAP, win32.HDC, ctypes.int, ctypes.int);
+  lib.lazy_bind("CreateBitmap", win32.HBITMAP, ctypes.int, ctypes.int, win32.UINT, win32.UINT, ctypes.voidptr_t);
   lib.lazy_bind("CreateBitmapIndirect", win32.HBITMAP, win32.BITMAP.ptr);
   lib.lazy_bind("GetObjectW", ctypes.int, win32.HGDIOBJ, ctypes.int, win32.LPVOID);
   lib.lazy_bind("GetCurrentObject", win32.HGDIOBJ, win32.HDC, win32.UINT);
@@ -177,6 +178,9 @@ function gdi32_defines(lib) {
   this.PBITMAPINFO = this.BITMAPINFO.ptr;
   lib.lazy_bind("SetDIBits", ctypes.int, win32.HDC, win32.HBITMAP, win32.UINT, win32.UINT, ctypes.voidptr_t, this.BITMAPINFO.ptr, win32.UINT);
 
+  lib.lazy_bind("GetPixel", win32.COLORREF, win32.HDC, ctypes.int, ctypes.int);
+  lib.lazy_bind("SetPixel", win32.COLORREF, win32.HDC, ctypes.int, ctypes.int, win32.COLORREF);
+
 }
 
 new ctypes_library(GDI32_LIBNAME, GDI32_ABIS, gdi32_defines, this);
diff --git a/src/modules/ctypes/winnt/user32.jsm b/src/modules/ctypes/winnt/user32.jsm
index 054f262..d29022e 100644
--- a/src/modules/ctypes/winnt/user32.jsm
+++ b/src/modules/ctypes/winnt/user32.jsm
@@ -412,6 +412,9 @@ function user32_defines(lib) {
   this.SWP_DEFERERASE     = 0x2000;
   this.SWP_ASYNCWINDOWPOS = 0x4000;
 
+  lib.lazy_bind("GetSysColor", win32.DWORD, ctypes.int);
+  this.COLOR_MENU = 4;
+
 }
 
 new ctypes_library(USER32_LIBNAME, USER32_ABIS, user32_defines, this);
diff --git a/src/modules/winnt/FiretrayStatusIcon.jsm b/src/modules/winnt/FiretrayStatusIcon.jsm
index f2acb10..8f90320 100644
--- a/src/modules/winnt/FiretrayStatusIcon.jsm
+++ b/src/modules/winnt/FiretrayStatusIcon.jsm
@@ -29,14 +29,13 @@ if ("undefined" == typeof(firetray.Handler))
 
 const ICON_CHROME_PATH = "chrome://firetray/skin/icons/winnt";
 const ICON_CHROME_FILES = {
-  'blank-icon': ICON_CHROME_PATH+"/blank-icon.bmp",
-  'mail-unread': ICON_CHROME_PATH+"/mail-unread.ico",
-  // these are for the popup menu:
-  'prefs': ICON_CHROME_PATH+"/gtk-preferences.bmp",
-  'quit': ICON_CHROME_PATH+"/application-exit.bmp",
-  'new-wnd': ICON_CHROME_PATH+"/document-new.bmp",
-  'new-msg': ICON_CHROME_PATH+"/gtk-edit.bmp",
-  'reset': ICON_CHROME_PATH+"/gtk-apply.bmp"
+  'blank-icon': { use:'tray', path:ICON_CHROME_PATH+"/blank-icon.bmp" },
+  'mail-unread': { use:'tray', path:ICON_CHROME_PATH+"/mail-unread.ico" },
+  'prefs': { use:'menu', path:ICON_CHROME_PATH+"/gtk-preferences.bmp" },
+  'quit': { use:'menu', path:ICON_CHROME_PATH+"/application-exit.bmp" },
+  'new-wnd': { use:'menu', path:ICON_CHROME_PATH+"/document-new.bmp" },
+  'new-msg': { use:'menu', path:ICON_CHROME_PATH+"/gtk-edit.bmp" },
+  'reset': { use:'menu', path:ICON_CHROME_PATH+"/gtk-apply.bmp" },
 };
 
 
@@ -97,8 +96,13 @@ firetray.StatusIcon = {
     /* we'll take the first icon in the .ico file. To get the icon count in the
      file, pass ctypes.cast(ctypes.int(-1), win32.UINT); */
     for (let imgName in ICON_CHROME_FILES) {
-      let path = firetray.Utils.chromeToPath(ICON_CHROME_FILES[imgName]);
+      let path = firetray.Utils.chromeToPath(ICON_CHROME_FILES[imgName].path);
       let img = this.loadImageFromFile(path);
+      if (img && ICON_CHROME_FILES[imgName].use == 'menu')
+        /* Ideally we should rebuild the menu each time it is shown as the menu
+         color may change. But, let's just consider it's not worth it for
+         now. */
+        img.himg = this.makeBitMapTransparent(img.himg);
       if (img)
         this[this.IMG_TYPES[img['type']]['map']].insert(imgName, img['himg']);
     }
@@ -418,6 +422,36 @@ firetray.StatusIcon = {
       log.error("icon '"+name+"' not defined.");
     }
     return hicon;
+  },
+
+  // http://www.dreamincode.net/forums/topic/281612-how-to-make-bitmaps-on-menus-transparent-in-c-win32/
+  makeBitMapTransparent: function(hbmSrc) {
+    log.debug("hbmSrc="+hbmSrc);
+    let hdcSrc = gdi32.CreateCompatibleDC(null);
+    let hdcDst = gdi32.CreateCompatibleDC(null);
+    if (!hdcSrc || !hdcSrc) return null;
+
+    let bm = new win32.BITMAP();
+    let err = gdi32.GetObjectW(hbmSrc, win32.BITMAP.size, bm.address());
+    let hbmOld = ctypes.cast(gdi32.SelectObject(hdcSrc, hbmSrc), win32.HBITMAP);
+    let width = bm.bmWidth, height = bm.bmHeight;
+    let hbmNew = gdi32.CreateBitmap(width, height, bm.bmPlanes, bm.bmBitsPixel, null);
+    gdi32.SelectObject(hdcDst, hbmNew);
+
+    gdi32.BitBlt(hdcDst,0,0,width, height,hdcSrc,0,0,gdi32.SRCCOPY);
+
+    let clrTP = gdi32.GetPixel(hdcDst, 0, 0);          // color of first pixel
+    let clrBK = user32.GetSysColor(user32.COLOR_MENU); // current background color
+
+    for (let nRow=0, len=height; nRow<len; ++nRow)
+      for (let nCol=0, len=width; nCol<len; ++nCol)
+        if (firetray.js.strEquals(gdi32.GetPixel(hdcDst, nCol, nRow), clrTP))
+          gdi32.SetPixel(hdcDst, nCol, nRow, clrBK);
+
+    gdi32.DeleteDC(hdcDst);
+    gdi32.DeleteDC(hdcSrc);
+
+    return hbmNew;
   }
 
 }; // firetray.StatusIcon

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firetray.git



More information about the Pkg-mozext-commits mailing list