summaryrefslogtreecommitdiffstats
path: root/widget/gonk/nsLookAndFeel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'widget/gonk/nsLookAndFeel.cpp')
-rw-r--r--widget/gonk/nsLookAndFeel.cpp465
1 files changed, 465 insertions, 0 deletions
diff --git a/widget/gonk/nsLookAndFeel.cpp b/widget/gonk/nsLookAndFeel.cpp
new file mode 100644
index 000000000..120f257df
--- /dev/null
+++ b/widget/gonk/nsLookAndFeel.cpp
@@ -0,0 +1,465 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* Copyright 2012 Mozilla Foundation and Mozilla contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * 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 "nsLookAndFeel.h"
+#include "nsStyleConsts.h"
+#include "gfxFont.h"
+#include "gfxFontConstants.h"
+#include "mozilla/gfx/2D.h"
+#include "cutils/properties.h"
+
+static const char16_t UNICODE_BULLET = 0x2022;
+
+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)
+
+ 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;
+ break;
+ case eColorID_WindowForeground:
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+ case eColorID_WidgetBackground:
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_WidgetForeground:
+ aColor = FG_NORMAL_COLOR;
+ break;
+ case eColorID_WidgetSelectBackground:
+ aColor = BG_SELECTED_COLOR;
+ break;
+ case eColorID_WidgetSelectForeground:
+ aColor = FG_SELECTED_COLOR;
+ 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;
+ break;
+ case eColorID_TextForeground:
+ // not used?
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+ case eColorID_TextSelectBackground:
+ aColor = NS_RGBA(0x33,0xb5,0xe5,0x66);
+ break;
+ case eColorID_IMESelectedRawTextBackground:
+ case eColorID_IMESelectedConvertedTextBackground:
+ // still used
+ aColor = BASE_SELECTED_COLOR;
+ break;
+ case eColorID_TextSelectForegroundCustom:
+ aColor = NS_RGB(0x4d,0x4d,0x4d);
+ break;
+ case eColorID_TextSelectForeground:
+ aColor = NS_CHANGE_COLOR_IF_SAME_AS_BG;
+ break;
+ case eColorID_IMESelectedRawTextForeground:
+ case eColorID_IMESelectedConvertedTextForeground:
+ // still used
+ aColor = TEXT_SELECTED_COLOR;
+ break;
+ case eColorID_IMERawInputBackground:
+ case eColorID_IMEConvertedTextBackground:
+ aColor = NS_TRANSPARENT;
+ break;
+ case eColorID_IMERawInputForeground:
+ case eColorID_IMEConvertedTextForeground:
+ aColor = NS_SAME_AS_FOREGROUND_COLOR;
+ break;
+ case eColorID_IMERawInputUnderline:
+ 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;
+
+ // css2 http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
+ case eColorID_activeborder:
+ // active window border
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_activecaption:
+ // active window caption background
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_appworkspace:
+ // MDI background color
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_background:
+ // desktop background
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_captiontext:
+ // text in active window caption, size box, and scrollbar arrow box (!)
+ aColor = FG_NORMAL_COLOR;
+ break;
+ case eColorID_graytext:
+ // disabled text in windows, menus, etc.
+ aColor = FG_INSENSITIVE_COLOR;
+ break;
+ case eColorID_highlight:
+ // background of selected item
+ aColor = BASE_SELECTED_COLOR;
+ break;
+ case eColorID_highlighttext:
+ // text of selected item
+ aColor = TEXT_SELECTED_COLOR;
+ break;
+ case eColorID_inactiveborder:
+ // inactive window border
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_inactivecaption:
+ // inactive window caption
+ aColor = BG_INSENSITIVE_COLOR;
+ break;
+ case eColorID_inactivecaptiontext:
+ // text in inactive window caption
+ aColor = FG_INSENSITIVE_COLOR;
+ break;
+ case eColorID_infobackground:
+ // tooltip background color
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_infotext:
+ // tooltip text color
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+ case eColorID_menu:
+ // menu background
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID_menutext:
+ // menu text
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+ case eColorID_scrollbar:
+ // scrollbar gray area
+ aColor = BG_ACTIVE_COLOR;
+ break;
+
+ case eColorID_threedface:
+ case eColorID_buttonface:
+ // 3-D face color
+ aColor = BG_NORMAL_COLOR;
+ break;
+
+ case eColorID_buttontext:
+ // text on push buttons
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+
+ case eColorID_buttonhighlight:
+ // 3-D highlighted edge color
+ case eColorID_threedhighlight:
+ // 3-D highlighted outer edge color
+ aColor = LIGHT_NORMAL_COLOR;
+ break;
+
+ case eColorID_threedlightshadow:
+ // 3-D highlighted inner edge color
+ aColor = BG_NORMAL_COLOR;
+ break;
+
+ case eColorID_buttonshadow:
+ // 3-D shadow edge color
+ case eColorID_threedshadow:
+ // 3-D shadow inner edge color
+ aColor = DARK_NORMAL_COLOR;
+ break;
+
+ case eColorID_threeddarkshadow:
+ // 3-D shadow outer edge color
+ aColor = NS_RGB(0,0,0);
+ break;
+
+ case eColorID_window:
+ case eColorID_windowframe:
+ aColor = BG_NORMAL_COLOR;
+ break;
+
+ case eColorID_windowtext:
+ aColor = FG_NORMAL_COLOR;
+ break;
+
+ case eColorID__moz_eventreerow:
+ case eColorID__moz_field:
+ aColor = BASE_NORMAL_COLOR;
+ break;
+ case eColorID__moz_fieldtext:
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+ case eColorID__moz_dialog:
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID__moz_dialogtext:
+ aColor = FG_NORMAL_COLOR;
+ break;
+ case eColorID__moz_dragtargetzone:
+ aColor = BG_SELECTED_COLOR;
+ break;
+ case eColorID__moz_buttondefault:
+ // default button border color
+ aColor = NS_RGB(0,0,0);
+ 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;
+ break;
+ case eColorID__moz_cellhighlighttext:
+ case eColorID__moz_html_cellhighlighttext:
+ aColor = TEXT_ACTIVE_COLOR;
+ break;
+ case eColorID__moz_menuhover:
+ aColor = BG_PRELIGHT_COLOR;
+ break;
+ case eColorID__moz_menuhovertext:
+ aColor = FG_PRELIGHT_COLOR;
+ 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;
+ break;
+ case eColorID__moz_combobox:
+ aColor = BG_NORMAL_COLOR;
+ break;
+ case eColorID__moz_menubartext:
+ aColor = TEXT_NORMAL_COLOR;
+ break;
+ case eColorID__moz_menubarhovertext:
+ aColor = FG_PRELIGHT_COLOR;
+ break;
+ default:
+ /* default color is BLACK */
+ aColor = 0;
+ rv = NS_ERROR_FAILURE;
+ break;
+ }
+
+ return rv;
+}
+
+nsresult
+nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+{
+ nsresult rv = nsXPLookAndFeel::GetIntImpl(aID, aResult);
+ if (NS_SUCCEEDED(rv))
+ return rv;
+
+ rv = NS_OK;
+
+ switch (aID) {
+ case eIntID_CaretBlinkTime:
+ aResult = 500;
+ break;
+
+ case eIntID_CaretWidth:
+ aResult = 1;
+ break;
+
+ case eIntID_ShowCaretDuringSelection:
+ aResult = 0;
+ break;
+
+ case eIntID_SelectTextfieldsOnKeyFocus:
+ // Select textfield content when focused by kbd
+ // used by EventStateManager::sTextfieldSelectModel
+ aResult = 1;
+ break;
+
+ case eIntID_SubmenuDelay:
+ aResult = 200;
+ break;
+
+ case eIntID_TooltipDelay:
+ aResult = 500;
+ break;
+
+ case eIntID_MenusCanOverlapOSBar:
+ // we want XUL popups to be able to overlap the task bar.
+ aResult = 1;
+ break;
+
+ case eIntID_ScrollArrowStyle:
+ aResult = eScrollArrowStyle_Single;
+ break;
+
+ case eIntID_ScrollSliderStyle:
+ aResult = eScrollThumbStyle_Proportional;
+ break;
+
+ case eIntID_TouchEnabled:
+ aResult = 1;
+ break;
+
+ case eIntID_WindowsDefaultTheme:
+ case eIntID_WindowsThemeIdentifier:
+ case eIntID_OperatingSystemVersionIdentifier:
+ aResult = 0;
+ rv = NS_ERROR_NOT_IMPLEMENTED;
+ break;
+
+ case eIntID_IMERawInputUnderlineStyle:
+ case eIntID_IMEConvertedTextUnderlineStyle:
+ aResult = NS_STYLE_TEXT_DECORATION_STYLE_SOLID;
+ break;
+
+ case eIntID_IMESelectedRawTextUnderlineStyle:
+ case eIntID_IMESelectedConvertedTextUnderline:
+ aResult = NS_STYLE_TEXT_DECORATION_STYLE_NONE;
+ break;
+
+ case eIntID_SpellCheckerUnderlineStyle:
+ aResult = NS_STYLE_TEXT_DECORATION_STYLE_WAVY;
+ break;
+
+ case eIntID_ScrollbarButtonAutoRepeatBehavior:
+ aResult = 0;
+ break;
+
+ case eIntID_PhysicalHomeButton: {
+ char propValue[PROPERTY_VALUE_MAX];
+ property_get("ro.moz.has_home_button", propValue, "1");
+ aResult = atoi(propValue);
+ break;
+ }
+
+ case eIntID_ContextMenuOffsetVertical:
+ case eIntID_ContextMenuOffsetHorizontal:
+ aResult = 2;
+ break;
+
+ default:
+ aResult = 0;
+ rv = NS_ERROR_FAILURE;
+ }
+
+ return rv;
+}
+
+nsresult
+nsLookAndFeel::GetFloatImpl(FloatID aID, float &aResult)
+{
+ nsresult res = nsXPLookAndFeel::GetFloatImpl(aID, aResult);
+ if (NS_SUCCEEDED(res))
+ return res;
+ res = NS_OK;
+
+ switch (aID) {
+ case eFloatID_IMEUnderlineRelativeSize:
+ aResult = 1.0f;
+ break;
+ case eFloatID_SpellCheckerUnderlineRelativeSize:
+ aResult = 1.0f;
+ break;
+ default:
+ aResult = -1.0;
+ res = NS_ERROR_FAILURE;
+ }
+ return res;
+}
+
+/*virtual*/
+bool
+nsLookAndFeel::GetFontImpl(FontID aID, nsString& aFontName,
+ gfxFontStyle& aFontStyle,
+ float aDevPixPerCSSPixel)
+{
+ aFontName.AssignLiteral("\"Fira Sans\"");
+ aFontStyle.style = NS_FONT_STYLE_NORMAL;
+ aFontStyle.weight = NS_FONT_WEIGHT_NORMAL;
+ aFontStyle.stretch = NS_FONT_STRETCH_NORMAL;
+ aFontStyle.size = 9.0 * 96.0f / 72.0f;
+ aFontStyle.systemFont = true;
+ return true;
+}
+
+/*virtual*/
+bool
+nsLookAndFeel::GetEchoPasswordImpl() {
+ return true;
+}
+
+/*virtual*/
+uint32_t
+nsLookAndFeel::GetPasswordMaskDelayImpl()
+{
+ // Same value on Android framework
+ return 1500;
+}
+
+/* virtual */
+char16_t
+nsLookAndFeel::GetPasswordCharacterImpl()
+{
+ return UNICODE_BULLET;
+}