widget/gonk/nsLookAndFeel.cpp

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
     2 /* Copyright 2012 Mozilla Foundation and Mozilla contributors
     3  *
     4  * Licensed under the Apache License, Version 2.0 (the "License");
     5  * you may not use this file except in compliance with the License.
     6  * You may obtain a copy of the License at
     7  *
     8  *     http://www.apache.org/licenses/LICENSE-2.0
     9  *
    10  * Unless required by applicable law or agreed to in writing, software
    11  * distributed under the License is distributed on an "AS IS" BASIS,
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  * See the License for the specific language governing permissions and
    14  * limitations under the License.
    15  */
    17 #include "nsLookAndFeel.h"
    18 #include "nsStyleConsts.h"
    19 #include "gfxFont.h"
    20 #include "gfxFontConstants.h"
    21 #include "mozilla/gfx/2D.h"
    22 #include "cutils/properties.h"
    24 static const char16_t UNICODE_BULLET = 0x2022;
    26 nsLookAndFeel::nsLookAndFeel()
    27     : nsXPLookAndFeel()
    28 {
    29 }
    31 nsLookAndFeel::~nsLookAndFeel()
    32 {
    33 }
    35 nsresult
    36 nsLookAndFeel::NativeGetColor(ColorID aID, nscolor &aColor)
    37 {
    38     nsresult rv = NS_OK;
    40 #define BASE_ACTIVE_COLOR     NS_RGB(0xaa,0xaa,0xaa)
    41 #define BASE_NORMAL_COLOR     NS_RGB(0xff,0xff,0xff)
    42 #define BASE_SELECTED_COLOR   NS_RGB(0xaa,0xaa,0xaa)
    43 #define BG_ACTIVE_COLOR       NS_RGB(0xff,0xff,0xff)
    44 #define BG_INSENSITIVE_COLOR  NS_RGB(0xaa,0xaa,0xaa)
    45 #define BG_NORMAL_COLOR       NS_RGB(0xff,0xff,0xff)
    46 #define BG_PRELIGHT_COLOR     NS_RGB(0xee,0xee,0xee)
    47 #define BG_SELECTED_COLOR     NS_RGB(0x99,0x99,0x99)
    48 #define DARK_NORMAL_COLOR     NS_RGB(0x88,0x88,0x88)
    49 #define FG_INSENSITIVE_COLOR  NS_RGB(0x44,0x44,0x44)
    50 #define FG_NORMAL_COLOR       NS_RGB(0x00,0x00,0x00)
    51 #define FG_PRELIGHT_COLOR     NS_RGB(0x77,0x77,0x77)
    52 #define FG_SELECTED_COLOR     NS_RGB(0xaa,0xaa,0xaa)
    53 #define LIGHT_NORMAL_COLOR    NS_RGB(0xaa,0xaa,0xaa)
    54 #define TEXT_ACTIVE_COLOR     NS_RGB(0x99,0x99,0x99)
    55 #define TEXT_NORMAL_COLOR     NS_RGB(0x00,0x00,0x00)
    56 #define TEXT_SELECTED_COLOR   NS_RGB(0x00,0x00,0x00)
    58     switch (aID) {
    59         // These colors don't seem to be used for anything anymore in Mozilla
    60         // (except here at least TextSelectBackground and TextSelectForeground)
    61         // The CSS2 colors below are used.
    62     case eColorID_WindowBackground:
    63         aColor = BASE_NORMAL_COLOR;
    64         break;
    65     case eColorID_WindowForeground:
    66         aColor = TEXT_NORMAL_COLOR;
    67         break;
    68     case eColorID_WidgetBackground:
    69         aColor = BG_NORMAL_COLOR;
    70         break;
    71     case eColorID_WidgetForeground:
    72         aColor = FG_NORMAL_COLOR;
    73         break;
    74     case eColorID_WidgetSelectBackground:
    75         aColor = BG_SELECTED_COLOR;
    76         break;
    77     case eColorID_WidgetSelectForeground:
    78         aColor = FG_SELECTED_COLOR;
    79         break;
    80     case eColorID_Widget3DHighlight:
    81         aColor = NS_RGB(0xa0,0xa0,0xa0);
    82         break;
    83     case eColorID_Widget3DShadow:
    84         aColor = NS_RGB(0x40,0x40,0x40);
    85         break;
    86     case eColorID_TextBackground:
    87         // not used?
    88         aColor = BASE_NORMAL_COLOR;
    89         break;
    90     case eColorID_TextForeground:
    91         // not used?
    92         aColor = TEXT_NORMAL_COLOR;
    93         break;
    94     case eColorID_TextSelectBackground:
    95     case eColorID_IMESelectedRawTextBackground:
    96     case eColorID_IMESelectedConvertedTextBackground:
    97         // still used
    98         aColor = BASE_SELECTED_COLOR;
    99         break;
   100     case eColorID_TextSelectForeground:
   101     case eColorID_IMESelectedRawTextForeground:
   102     case eColorID_IMESelectedConvertedTextForeground:
   103         // still used
   104         aColor = TEXT_SELECTED_COLOR;
   105         break;
   106     case eColorID_IMERawInputBackground:
   107     case eColorID_IMEConvertedTextBackground:
   108         aColor = NS_TRANSPARENT;
   109         break;
   110     case eColorID_IMERawInputForeground:
   111     case eColorID_IMEConvertedTextForeground:
   112         aColor = NS_SAME_AS_FOREGROUND_COLOR;
   113         break;
   114     case eColorID_IMERawInputUnderline:
   115     case eColorID_IMEConvertedTextUnderline:
   116         aColor = NS_SAME_AS_FOREGROUND_COLOR;
   117         break;
   118     case eColorID_IMESelectedRawTextUnderline:
   119     case eColorID_IMESelectedConvertedTextUnderline:
   120         aColor = NS_TRANSPARENT;
   121         break;
   122     case eColorID_SpellCheckerUnderline:
   123       aColor = NS_RGB(0xff, 0, 0);
   124       break;
   126         // css2  http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
   127     case eColorID_activeborder:
   128         // active window border
   129         aColor = BG_NORMAL_COLOR;
   130         break;
   131     case eColorID_activecaption:
   132         // active window caption background
   133         aColor = BG_NORMAL_COLOR;
   134         break;
   135     case eColorID_appworkspace:
   136         // MDI background color
   137         aColor = BG_NORMAL_COLOR;
   138         break;
   139     case eColorID_background:
   140         // desktop background
   141         aColor = BG_NORMAL_COLOR;
   142         break;
   143     case eColorID_captiontext:
   144         // text in active window caption, size box, and scrollbar arrow box (!)
   145         aColor = FG_NORMAL_COLOR;
   146         break;
   147     case eColorID_graytext:
   148         // disabled text in windows, menus, etc.
   149         aColor = FG_INSENSITIVE_COLOR;
   150         break;
   151     case eColorID_highlight:
   152         // background of selected item
   153         aColor = BASE_SELECTED_COLOR;
   154         break;
   155     case eColorID_highlighttext:
   156         // text of selected item
   157         aColor = TEXT_SELECTED_COLOR;
   158         break;
   159     case eColorID_inactiveborder:
   160         // inactive window border
   161         aColor = BG_NORMAL_COLOR;
   162         break;
   163     case eColorID_inactivecaption:
   164         // inactive window caption
   165         aColor = BG_INSENSITIVE_COLOR;
   166         break;
   167     case eColorID_inactivecaptiontext:
   168         // text in inactive window caption
   169         aColor = FG_INSENSITIVE_COLOR;
   170         break;
   171     case eColorID_infobackground:
   172         // tooltip background color
   173         aColor = BG_NORMAL_COLOR;
   174         break;
   175     case eColorID_infotext:
   176         // tooltip text color
   177         aColor = TEXT_NORMAL_COLOR;
   178         break;
   179     case eColorID_menu:
   180         // menu background
   181         aColor = BG_NORMAL_COLOR;
   182         break;
   183     case eColorID_menutext:
   184         // menu text
   185         aColor = TEXT_NORMAL_COLOR;
   186         break;
   187     case eColorID_scrollbar:
   188         // scrollbar gray area
   189         aColor = BG_ACTIVE_COLOR;
   190         break;
   192     case eColorID_threedface:
   193     case eColorID_buttonface:
   194         // 3-D face color
   195         aColor = BG_NORMAL_COLOR;
   196         break;
   198     case eColorID_buttontext:
   199         // text on push buttons
   200         aColor = TEXT_NORMAL_COLOR;
   201         break;
   203     case eColorID_buttonhighlight:
   204         // 3-D highlighted edge color
   205     case eColorID_threedhighlight:
   206         // 3-D highlighted outer edge color
   207         aColor = LIGHT_NORMAL_COLOR;
   208         break;
   210     case eColorID_threedlightshadow:
   211         // 3-D highlighted inner edge color
   212         aColor = BG_NORMAL_COLOR;
   213         break;
   215     case eColorID_buttonshadow:
   216         // 3-D shadow edge color
   217     case eColorID_threedshadow:
   218         // 3-D shadow inner edge color
   219         aColor = DARK_NORMAL_COLOR;
   220         break;
   222     case eColorID_threeddarkshadow:
   223         // 3-D shadow outer edge color
   224         aColor = NS_RGB(0,0,0);
   225         break;
   227     case eColorID_window:
   228     case eColorID_windowframe:
   229         aColor = BG_NORMAL_COLOR;
   230         break;
   232     case eColorID_windowtext:
   233         aColor = FG_NORMAL_COLOR;
   234         break;
   236     case eColorID__moz_eventreerow:
   237     case eColorID__moz_field:
   238         aColor = BASE_NORMAL_COLOR;
   239         break;
   240     case eColorID__moz_fieldtext:
   241         aColor = TEXT_NORMAL_COLOR;
   242         break;
   243     case eColorID__moz_dialog:
   244         aColor = BG_NORMAL_COLOR;
   245         break;
   246     case eColorID__moz_dialogtext:
   247         aColor = FG_NORMAL_COLOR;
   248         break;
   249     case eColorID__moz_dragtargetzone:
   250         aColor = BG_SELECTED_COLOR;
   251         break;
   252     case eColorID__moz_buttondefault:
   253         // default button border color
   254         aColor = NS_RGB(0,0,0);
   255         break;
   256     case eColorID__moz_buttonhoverface:
   257         aColor = BG_PRELIGHT_COLOR;
   258         break;
   259     case eColorID__moz_buttonhovertext:
   260         aColor = FG_PRELIGHT_COLOR;
   261         break;
   262     case eColorID__moz_cellhighlight:
   263     case eColorID__moz_html_cellhighlight:
   264         aColor = BASE_ACTIVE_COLOR;
   265         break;
   266     case eColorID__moz_cellhighlighttext:
   267     case eColorID__moz_html_cellhighlighttext:
   268         aColor = TEXT_ACTIVE_COLOR;
   269         break;
   270     case eColorID__moz_menuhover:
   271         aColor = BG_PRELIGHT_COLOR;
   272         break;
   273     case eColorID__moz_menuhovertext:
   274         aColor = FG_PRELIGHT_COLOR;
   275         break;
   276     case eColorID__moz_oddtreerow:
   277         aColor = NS_TRANSPARENT;
   278         break;
   279     case eColorID__moz_nativehyperlinktext:
   280         aColor = NS_SAME_AS_FOREGROUND_COLOR;
   281         break;
   282     case eColorID__moz_comboboxtext:
   283         aColor = TEXT_NORMAL_COLOR;
   284         break;
   285     case eColorID__moz_combobox:
   286         aColor = BG_NORMAL_COLOR;
   287         break;
   288     case eColorID__moz_menubartext:
   289         aColor = TEXT_NORMAL_COLOR;
   290         break;
   291     case eColorID__moz_menubarhovertext:
   292         aColor = FG_PRELIGHT_COLOR;
   293         break;
   294     default:
   295         /* default color is BLACK */
   296         aColor = 0;
   297         rv = NS_ERROR_FAILURE;
   298         break;
   299     }
   301     return rv;
   302 }
   304 nsresult
   305 nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
   306 {
   307     nsresult rv = nsXPLookAndFeel::GetIntImpl(aID, aResult);
   308     if (NS_SUCCEEDED(rv))
   309         return rv;
   311     rv = NS_OK;
   313     switch (aID) {
   314         case eIntID_CaretBlinkTime:
   315             aResult = 500;
   316             break;
   318         case eIntID_CaretWidth:
   319             aResult = 1;
   320             break;
   322         case eIntID_ShowCaretDuringSelection:
   323             aResult = 0;
   324             break;
   326         case eIntID_SelectTextfieldsOnKeyFocus:
   327             // Select textfield content when focused by kbd
   328             // used by EventStateManager::sTextfieldSelectModel
   329             aResult = 1;
   330             break;
   332         case eIntID_SubmenuDelay:
   333             aResult = 200;
   334             break;
   336         case eIntID_TooltipDelay:
   337             aResult = 500;
   338             break;
   340         case eIntID_MenusCanOverlapOSBar:
   341             // we want XUL popups to be able to overlap the task bar.
   342             aResult = 1;
   343             break;
   345         case eIntID_ScrollArrowStyle:
   346             aResult = eScrollArrowStyle_Single;
   347             break;
   349         case eIntID_ScrollSliderStyle:
   350             aResult = eScrollThumbStyle_Proportional;
   351             break;
   353         case eIntID_TouchEnabled:
   354             aResult = 1;
   355             break;
   357         case eIntID_WindowsDefaultTheme:
   358         case eIntID_WindowsThemeIdentifier:
   359         case eIntID_OperatingSystemVersionIdentifier:
   360             aResult = 0;
   361             rv = NS_ERROR_NOT_IMPLEMENTED;
   362             break;
   364         case eIntID_IMERawInputUnderlineStyle:
   365         case eIntID_IMEConvertedTextUnderlineStyle:
   366             aResult = NS_STYLE_TEXT_DECORATION_STYLE_SOLID;
   367             break;
   369         case eIntID_IMESelectedRawTextUnderlineStyle:
   370         case eIntID_IMESelectedConvertedTextUnderline:
   371             aResult = NS_STYLE_TEXT_DECORATION_STYLE_NONE;
   372             break;
   374         case eIntID_SpellCheckerUnderlineStyle:
   375             aResult = NS_STYLE_TEXT_DECORATION_STYLE_WAVY;
   376             break;
   378         case eIntID_ScrollbarButtonAutoRepeatBehavior:
   379             aResult = 0;
   380             break;
   382         case eIntID_PhysicalHomeButton: {
   383             char propValue[PROPERTY_VALUE_MAX];
   384             property_get("ro.moz.has_home_button", propValue, "1");
   385             aResult = atoi(propValue);
   386             break;
   387         }
   389         default:
   390             aResult = 0;
   391             rv = NS_ERROR_FAILURE;
   392     }
   394     return rv;
   395 }
   397 nsresult
   398 nsLookAndFeel::GetFloatImpl(FloatID aID, float &aResult)
   399 {
   400   nsresult res = nsXPLookAndFeel::GetFloatImpl(aID, aResult);
   401   if (NS_SUCCEEDED(res))
   402     return res;
   403   res = NS_OK;
   405   switch (aID) {
   406     case eFloatID_IMEUnderlineRelativeSize:
   407         aResult = 1.0f;
   408         break;
   409     case eFloatID_SpellCheckerUnderlineRelativeSize:
   410         aResult = 1.0f;
   411         break;
   412     default:
   413         aResult = -1.0;
   414         res = NS_ERROR_FAILURE;
   415     }
   416   return res;
   417 }
   419 /*virtual*/
   420 bool
   421 nsLookAndFeel::GetFontImpl(FontID aID, nsString& aFontName,
   422                            gfxFontStyle& aFontStyle,
   423                            float aDevPixPerCSSPixel)
   424 {
   425     aFontName.AssignLiteral("\"Fira Sans OT\"");
   426     aFontStyle.style = NS_FONT_STYLE_NORMAL;
   427     aFontStyle.weight = NS_FONT_WEIGHT_NORMAL;
   428     aFontStyle.stretch = NS_FONT_STRETCH_NORMAL;
   429     aFontStyle.size = 9.0 * 96.0f / 72.0f;
   430     aFontStyle.systemFont = true;
   431     return true;
   432 }
   434 /*virtual*/
   435 bool
   436 nsLookAndFeel::GetEchoPasswordImpl() {
   437     return true;
   438 }
   440 /*virtual*/
   441 uint32_t
   442 nsLookAndFeel::GetPasswordMaskDelayImpl()
   443 {
   444     // Same value on Android framework
   445     return 1500;
   446 }
   448 /* virtual */
   449 char16_t
   450 nsLookAndFeel::GetPasswordCharacterImpl()
   451 {
   452     return UNICODE_BULLET;
   453 }

mercurial