Bug 1107902 - Unable to add accounts when a DWM registry key is missing: port bug 1065998 and other syncing of Windows8WindowFrameColor.jsm. r=paenglab, a=standard8
authorMagnus Melin <mkmelin+mozilla@iki.fi>
Sat, 13 Dec 2014 13:47:59 +0200
changeset 25654 1c9a7bd42aa398a60d3f6d1fb18c3647e90eb706
parent 25653 3c3d7829f5f31620f8e0dd4e218c2b2781f3c99c
child 25655 0a756bf838d773f4820d35e6b68611ed5e63031a
push id1850
push userclokep@gmail.com
push dateWed, 08 Mar 2017 19:29:12 +0000
treeherdercomm-esr52@028df196b2d9 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerspaenglab, standard8
bugs1107902, 1065998
Bug 1107902 - Unable to add accounts when a DWM registry key is missing: port bug 1065998 and other syncing of Windows8WindowFrameColor.jsm. r=paenglab, a=standard8
mail/base/modules/Windows8WindowFrameColor.jsm
--- a/mail/base/modules/Windows8WindowFrameColor.jsm
+++ b/mail/base/modules/Windows8WindowFrameColor.jsm
@@ -4,30 +4,44 @@
 
 "use strict";
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 this.EXPORTED_SYMBOLS = ["Windows8WindowFrameColor"];
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/WindowsRegistry.jsm");
+let Registry = Cu.import("resource://gre/modules/WindowsRegistry.jsm").WindowsRegistry;
 
 const Windows8WindowFrameColor = {
   _windowFrameColor: null,
 
   get: function() {
     if (this._windowFrameColor)
       return this._windowFrameColor;
 
-    let windowFrameColor = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
-                                                      "Software\\Microsoft\\Windows\\DWM",
-                                                      "ColorizationColor");
+    const HKCU = Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER;
+    const dwmKey = "Software\\Microsoft\\Windows\\DWM";
+    let customizationColor = Registry.readRegKey(HKCU, dwmKey,
+                                                 "ColorizationColor");
+    if (!customizationColor) {
+      // Seems to be the default color (hardcoded because of bug 1065998, bug 1107902)
+      return [158, 158, 158];
+    }
     // The color returned from the Registry is in decimal form.
-    let windowFrameColorHex = windowFrameColor.toString(16);
+    let customizationColorHex = customizationColor.toString(16);
     // Zero-pad the number just to make sure that it is 8 digits.
-    windowFrameColorHex = ("00000000" + windowFrameColorHex).substr(-8);
-    let windowFrameColorArray = windowFrameColorHex.match(/../g);
-    let [pixelA, pixelR, pixelG, pixelB] = windowFrameColorArray.map(function(val) parseInt(val, 16));
+    customizationColorHex = ("00000000" + customizationColorHex).substr(-8);
+    let customizationColorArray = customizationColorHex.match(/../g);
+    let [unused, fgR, fgG, fgB] = customizationColorArray.map(function(val) parseInt(val, 16));
+    let colorizationColorBalance = Registry.readRegKey(HKCU, dwmKey,
+                                                       "ColorizationColorBalance") || 78;
+     // Window frame base color when Color Intensity is at 0, see bug 1004576.
+    let frameBaseColor = 217;
+    let alpha = colorizationColorBalance / 100;
 
-    return this._windowFrameColor = [pixelR, pixelG, pixelB];
+    // Alpha-blend the foreground color with the frame base color.
+    let r = Math.round(fgR * alpha + frameBaseColor * (1 - alpha));
+    let g = Math.round(fgG * alpha + frameBaseColor * (1 - alpha));
+    let b = Math.round(fgB * alpha + frameBaseColor * (1 - alpha));
+    return this._windowFrameColor = [r, g, b];
   },
 };