Bug 1044039 - Reimplement Qt widget look and feel. r=romaxa
authorTom Schuster <evilpies@gmail.com>
Tue, 07 Oct 2014 16:05:17 +0200
changeset 209167 349506d5ebd58244de004897028894e953aa2e0d
parent 209166 cd26af44624458c588bb11dbfbec6bc06b471df2
child 209168 7bcb80591690a0b70b8ee1854a7924cddc688003
push id27608
push userryanvm@gmail.com
push dateTue, 07 Oct 2014 20:04:42 +0000
treeherdermozilla-central@0c8ae792f1c0 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersromaxa
bugs1044039
milestone35.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1044039 - Reimplement Qt widget look and feel. r=romaxa
widget/qt/nsLookAndFeel.cpp
--- a/widget/qt/nsLookAndFeel.cpp
+++ b/widget/qt/nsLookAndFeel.cpp
@@ -12,104 +12,98 @@
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #include <QGuiApplication>
 #include <QFont>
 #include <QScreen>
+#include <QPalette>
+#include <QStyle>
+#include <QStyleFactory>
 
 #include "nsLookAndFeel.h"
 #include "nsStyleConsts.h"
 #include "gfxFont.h"
 #include "gfxFontConstants.h"
 #include "mozilla/gfx/2D.h"
 
 static const char16_t UNICODE_BULLET = 0x2022;
 
+#define QCOLOR_TO_NS_RGB(c)                     \
+  ((nscolor)NS_RGB(c.red(),c.green(),c.blue()))
+
 nsLookAndFeel::nsLookAndFeel()
     : nsXPLookAndFeel()
 {
 }
 
 nsLookAndFeel::~nsLookAndFeel()
 {
 }
 
 nsresult
 nsLookAndFeel::NativeGetColor(ColorID aID, nscolor &aColor)
 {
     nsresult rv = NS_OK;
 
-#define BASE_ACTIVE_COLOR     NS_RGB(0xaa,0xaa,0xaa)
-#define BASE_NORMAL_COLOR     NS_RGB(0xff,0xff,0xff)
-#define BASE_SELECTED_COLOR   NS_RGB(0xaa,0xaa,0xaa)
-#define BG_ACTIVE_COLOR       NS_RGB(0xff,0xff,0xff)
-#define BG_INSENSITIVE_COLOR  NS_RGB(0xaa,0xaa,0xaa)
-#define BG_NORMAL_COLOR       NS_RGB(0xff,0xff,0xff)
 #define BG_PRELIGHT_COLOR     NS_RGB(0xee,0xee,0xee)
-#define BG_SELECTED_COLOR     NS_RGB(0x99,0x99,0x99)
-#define DARK_NORMAL_COLOR     NS_RGB(0x88,0x88,0x88)
-#define FG_INSENSITIVE_COLOR  NS_RGB(0x44,0x44,0x44)
-#define FG_NORMAL_COLOR       NS_RGB(0x00,0x00,0x00)
 #define FG_PRELIGHT_COLOR     NS_RGB(0x77,0x77,0x77)
-#define FG_SELECTED_COLOR     NS_RGB(0xaa,0xaa,0xaa)
-#define LIGHT_NORMAL_COLOR    NS_RGB(0xaa,0xaa,0xaa)
-#define TEXT_ACTIVE_COLOR     NS_RGB(0x99,0x99,0x99)
-#define TEXT_NORMAL_COLOR     NS_RGB(0x00,0x00,0x00)
-#define TEXT_SELECTED_COLOR   NS_RGB(0x00,0x00,0x00)
+#define RED_COLOR             NS_RGB(0xff,0x00,0x00)
+
+    QPalette palette = QGuiApplication::palette();
 
     switch (aID) {
         // These colors don't seem to be used for anything anymore in Mozilla
         // (except here at least TextSelectBackground and TextSelectForeground)
         // The CSS2 colors below are used.
     case eColorID_WindowBackground:
-        aColor = BASE_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_WindowForeground:
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::WindowText));
         break;
     case eColorID_WidgetBackground:
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_WidgetForeground:
-        aColor = FG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::WindowText));
         break;
     case eColorID_WidgetSelectBackground:
-        aColor = BG_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_WidgetSelectForeground:
-        aColor = FG_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::WindowText));
         break;
     case eColorID_Widget3DHighlight:
         aColor = NS_RGB(0xa0,0xa0,0xa0);
         break;
     case eColorID_Widget3DShadow:
         aColor = NS_RGB(0x40,0x40,0x40);
         break;
     case eColorID_TextBackground:
         // not used?
-        aColor = BASE_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_TextForeground:
         // not used?
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::WindowText));
         break;
     case eColorID_TextSelectBackground:
     case eColorID_IMESelectedRawTextBackground:
     case eColorID_IMESelectedConvertedTextBackground:
         // still used
-        aColor = BASE_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Highlight));
         break;
     case eColorID_TextSelectForeground:
     case eColorID_IMESelectedRawTextForeground:
     case eColorID_IMESelectedConvertedTextForeground:
         // still used
-        aColor = TEXT_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::HighlightedText));
         break;
     case eColorID_IMERawInputBackground:
     case eColorID_IMEConvertedTextBackground:
         aColor = NS_TRANSPARENT;
         break;
     case eColorID_IMERawInputForeground:
     case eColorID_IMEConvertedTextForeground:
         aColor = NS_SAME_AS_FOREGROUND_COLOR;
@@ -118,186 +112,186 @@ nsLookAndFeel::NativeGetColor(ColorID aI
     case eColorID_IMEConvertedTextUnderline:
         aColor = NS_SAME_AS_FOREGROUND_COLOR;
         break;
     case eColorID_IMESelectedRawTextUnderline:
     case eColorID_IMESelectedConvertedTextUnderline:
         aColor = NS_TRANSPARENT;
         break;
     case eColorID_SpellCheckerUnderline:
-      aColor = NS_RGB(0xff, 0, 0);
-      break;
+        aColor = RED_COLOR;
+        break;
 
         // css2  http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
     case eColorID_activeborder:
         // active window border
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_activecaption:
         // active window caption background
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_appworkspace:
         // MDI background color
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_background:
         // desktop background
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_captiontext:
         // text in active window caption, size box, and scrollbar arrow box (!)
-        aColor = FG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     case eColorID_graytext:
         // disabled text in windows, menus, etc.
-        aColor = FG_INSENSITIVE_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Disabled, QPalette::Text));
         break;
     case eColorID_highlight:
         // background of selected item
-        aColor = BASE_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Highlight));
         break;
     case eColorID_highlighttext:
         // text of selected item
-        aColor = TEXT_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::HighlightedText));
         break;
     case eColorID_inactiveborder:
         // inactive window border
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Disabled, QPalette::Window));
         break;
     case eColorID_inactivecaption:
         // inactive window caption
-        aColor = BG_INSENSITIVE_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Disabled, QPalette::Window));
         break;
     case eColorID_inactivecaptiontext:
         // text in inactive window caption
-        aColor = FG_INSENSITIVE_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Disabled, QPalette::Text));
         break;
     case eColorID_infobackground:
         // tooltip background color
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::ToolTipBase));
         break;
     case eColorID_infotext:
         // tooltip text color
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::ToolTipText));
         break;
     case eColorID_menu:
         // menu background
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID_menutext:
         // menu text
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     case eColorID_scrollbar:
         // scrollbar gray area
-        aColor = BG_ACTIVE_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Mid));
         break;
 
     case eColorID_threedface:
     case eColorID_buttonface:
         // 3-D face color
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Button));
         break;
 
     case eColorID_buttontext:
         // text on push buttons
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::ButtonText));
         break;
 
     case eColorID_buttonhighlight:
         // 3-D highlighted edge color
     case eColorID_threedhighlight:
         // 3-D highlighted outer edge color
-        aColor = LIGHT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Dark));
         break;
 
     case eColorID_threedlightshadow:
         // 3-D highlighted inner edge color
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Light));
         break;
 
     case eColorID_buttonshadow:
         // 3-D shadow edge color
     case eColorID_threedshadow:
         // 3-D shadow inner edge color
-        aColor = DARK_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Dark));
         break;
 
     case eColorID_threeddarkshadow:
         // 3-D shadow outer edge color
-        aColor = NS_RGB(0,0,0);
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Shadow));
         break;
 
     case eColorID_window:
     case eColorID_windowframe:
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
 
     case eColorID_windowtext:
-        aColor = FG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
 
     case eColorID__moz_eventreerow:
     case eColorID__moz_field:
-        aColor = BASE_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Base));
         break;
     case eColorID__moz_fieldtext:
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     case eColorID__moz_dialog:
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID__moz_dialogtext:
-        aColor = FG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::WindowText));
         break;
     case eColorID__moz_dragtargetzone:
-        aColor = BG_SELECTED_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Window));
         break;
     case eColorID__moz_buttondefault:
         // default button border color
-        aColor = NS_RGB(0,0,0);
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Button));
         break;
     case eColorID__moz_buttonhoverface:
         aColor = BG_PRELIGHT_COLOR;
         break;
     case eColorID__moz_buttonhovertext:
         aColor = FG_PRELIGHT_COLOR;
         break;
     case eColorID__moz_cellhighlight:
     case eColorID__moz_html_cellhighlight:
-        aColor = BASE_ACTIVE_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Highlight));
         break;
     case eColorID__moz_cellhighlighttext:
     case eColorID__moz_html_cellhighlighttext:
-        aColor = TEXT_ACTIVE_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::HighlightedText));
         break;
     case eColorID__moz_menuhover:
         aColor = BG_PRELIGHT_COLOR;
         break;
     case eColorID__moz_menuhovertext:
-        aColor = FG_PRELIGHT_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     case eColorID__moz_oddtreerow:
         aColor = NS_TRANSPARENT;
         break;
     case eColorID__moz_nativehyperlinktext:
         aColor = NS_SAME_AS_FOREGROUND_COLOR;
         break;
     case eColorID__moz_comboboxtext:
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     case eColorID__moz_combobox:
-        aColor = BG_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Base));
         break;
     case eColorID__moz_menubartext:
-        aColor = TEXT_NORMAL_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     case eColorID__moz_menubarhovertext:
-        aColor = FG_PRELIGHT_COLOR;
+        aColor = QCOLOR_TO_NS_RGB(palette.color(QPalette::Normal, QPalette::Text));
         break;
     default:
         /* default color is BLACK */
         aColor = 0;
         rv = NS_ERROR_FAILURE;
         break;
     }