/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef __nsILookAndFeel #define __nsILookAndFeel #include "nsISupports.h" #include "nsColor.h" // for |#ifdef NS_DEBUG| struct nsSize; // {EE288A5F-B98B-4105-B4AE-884F21588A92} #define NS_ILOOKANDFEEL_IID \ { 0xee288a5f, 0xb98b, 0x4105, \ { 0xb4, 0xae, 0x88, 0x4f, 0x21, 0x58, 0x8a, 0x92 } } class nsILookAndFeel: public nsISupports { public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_ILOOKANDFEEL_IID) // When modifying this list, also modify nsXPLookAndFeel::sColorPrefs // in widget/src/xpwidgts/nsXPLookAndFeel.cpp. typedef enum { // WARNING : NO NEGATIVE VALUE IN THIS ENUMERATION // see patch in bug 57757 for more information eColor_WindowBackground, eColor_WindowForeground, eColor_WidgetBackground, eColor_WidgetForeground, eColor_WidgetSelectBackground, eColor_WidgetSelectForeground, eColor_Widget3DHighlight, eColor_Widget3DShadow, eColor_TextBackground, eColor_TextForeground, eColor_TextSelectBackground, eColor_TextSelectForeground, eColor_TextSelectBackgroundDisabled, eColor_TextSelectBackgroundAttention, eColor_TextHighlightBackground, eColor_TextHighlightForeground, eColor_IMERawInputBackground, eColor_IMERawInputForeground, eColor_IMERawInputUnderline, eColor_IMESelectedRawTextBackground, eColor_IMESelectedRawTextForeground, eColor_IMESelectedRawTextUnderline, eColor_IMEConvertedTextBackground, eColor_IMEConvertedTextForeground, eColor_IMEConvertedTextUnderline, eColor_IMESelectedConvertedTextBackground, eColor_IMESelectedConvertedTextForeground, eColor_IMESelectedConvertedTextUnderline, eColor_SpellCheckerUnderline, // New CSS 2 color definitions eColor_activeborder, eColor_activecaption, eColor_appworkspace, eColor_background, eColor_buttonface, eColor_buttonhighlight, eColor_buttonshadow, eColor_buttontext, eColor_captiontext, eColor_graytext, eColor_highlight, eColor_highlighttext, eColor_inactiveborder, eColor_inactivecaption, eColor_inactivecaptiontext, eColor_infobackground, eColor_infotext, eColor_menu, eColor_menutext, eColor_scrollbar, eColor_threeddarkshadow, eColor_threedface, eColor_threedhighlight, eColor_threedlightshadow, eColor_threedshadow, eColor_window, eColor_windowframe, eColor_windowtext, eColor__moz_buttondefault, // Colors which will hopefully become CSS3 eColor__moz_field, eColor__moz_fieldtext, eColor__moz_dialog, eColor__moz_dialogtext, eColor__moz_dragtargetzone, //used to highlight valid regions to drop something onto eColor__moz_cellhighlight, //used to cell text background, selected but not focus eColor__moz_cellhighlighttext, //used to cell text, selected but not focus eColor__moz_html_cellhighlight, //used to html select cell text background, selected but not focus eColor__moz_html_cellhighlighttext, //used to html select cell text, selected but not focus eColor__moz_buttonhoverface, //used to button text background, when mouse is over eColor__moz_buttonhovertext, //used to button text, when mouse is over eColor__moz_menuhover, //used to menu item background, when mouse is over eColor__moz_menuhovertext, //used to menu item text, when mouse is over eColor__moz_menubartext, //used to menu bar item text eColor__moz_menubarhovertext, //used to menu bar item text, when mouse is over // On platforms where these colors are the same as // -moz-field, use -moz-fieldtext as foreground color eColor__moz_eventreerow, eColor__moz_oddtreerow, // colors needed by the Mac OS X theme eColor__moz_mac_chrome_active, // background color of chrome toolbars in active windows eColor__moz_mac_chrome_inactive, // background color of chrome toolbars in inactive windows eColor__moz_mac_focusring, //ring around text fields and lists eColor__moz_mac_menuselect, //colour used when mouse is over a menu item eColor__moz_mac_menushadow, //colour used to do shadows on menu items eColor__moz_mac_menutextdisable, // color used to display text for disabled menu items eColor__moz_mac_menutextselect, //colour used to display text while mouse is over a menu item eColor__moz_mac_disabledtoolbartext, // text color of disabled text on toolbars //all of the accent colours eColor__moz_mac_accentlightesthighlight, eColor__moz_mac_accentregularhighlight, eColor__moz_mac_accentface, eColor__moz_mac_accentlightshadow, eColor__moz_mac_accentregularshadow, eColor__moz_mac_accentdarkshadow, eColor__moz_mac_accentdarkestshadow, //new in 10.2 eColor__moz_mac_alternateprimaryhighlight, //active list highlight eColor__moz_mac_secondaryhighlight, //inactive light hightlight // vista rebars eColor__moz_win_mediatext, // media rebar text eColor__moz_win_communicationstext, // communications rebar text // Hyperlink color extracted from the system, not affected by the browser.anchor_color user pref. // There is no OS-specified safe background color for this text, // but it is used regularly within Windows and the Gnome DE on Dialog and Window colors. eColor__moz_nativehyperlinktext, // Combo box widgets eColor__moz_comboboxtext, eColor__moz_combobox, // keep this one last, please eColor_LAST_COLOR } nsColorID; // When modifying this list, also modify nsXPLookAndFeel::sIntPrefs // in widget/src/xpwidgts/nsXPLookAndFeel.cpp. typedef enum { eMetric_WindowTitleHeight, eMetric_WindowBorderWidth, eMetric_WindowBorderHeight, eMetric_Widget3DBorder, eMetric_TextFieldBorder, // Native border size eMetric_TextFieldHeight, eMetric_TextVerticalInsidePadding, // needed only because of GTK eMetric_TextShouldUseVerticalInsidePadding, // needed only because of GTK eMetric_TextHorizontalInsideMinimumPadding, eMetric_TextShouldUseHorizontalInsideMinimumPadding, // needed only because of GTK eMetric_ButtonHorizontalInsidePaddingNavQuirks, eMetric_ButtonHorizontalInsidePaddingOffsetNavQuirks, eMetric_CheckboxSize, eMetric_RadioboxSize, eMetric_ListShouldUseHorizontalInsideMinimumPadding, // needed only because of GTK eMetric_ListHorizontalInsideMinimumPadding, eMetric_ListShouldUseVerticalInsidePadding, // needed only because of GTK eMetric_ListVerticalInsidePadding, // needed only because of GTK eMetric_CaretBlinkTime, // default, may be overriden by OS eMetric_CaretWidth, // pixel width of caret eMetric_ShowCaretDuringSelection, // show the caret when text is selected? eMetric_SelectTextfieldsOnKeyFocus, // select textfields when focused via tab/accesskey? eMetric_SubmenuDelay, // delay before submenus open eMetric_MenusCanOverlapOSBar, // can popups overlap menu/task bar? eMetric_SkipNavigatingDisabledMenuItem, // skip navigating to disabled menu item? eMetric_DragFullWindow, // show window contents while dragging? eMetric_DragThresholdX, // begin a drag if the mouse is moved further than the threshold while the button is down eMetric_DragThresholdY, eMetric_UseAccessibilityTheme, // Accessibility theme being used? eMetric_IsScreenReaderActive, // Screen reader being used? eMetric_ScrollArrowStyle, // position of scroll arrows in a scrollbar eMetric_ScrollSliderStyle, // is scroll thumb proportional or fixed? eMetric_ScrollButtonLeftMouseButtonAction, // each button can take one of four values: eMetric_ScrollButtonMiddleMouseButtonAction, // 0 - scrolls one line, 1 - scrolls one page eMetric_ScrollButtonRightMouseButtonAction, // 2 - scrolls to end, 3 - button ignored eMetric_TreeOpenDelay, // delay for opening spring loaded folders eMetric_TreeCloseDelay, // delay for closing spring loaded folders eMetric_TreeLazyScrollDelay, // delay for triggering the tree scrolling eMetric_TreeScrollDelay, // delay for scrolling the tree eMetric_TreeScrollLinesMax, // the maximum number of lines to be scrolled at ones eMetric_TabFocusModel, // What type of tab-order to use /* * A Boolean value to determine whether the Windows default theme is * being used. * * The value of this metric is not used on other platforms. These platforms * should return NS_ERROR_NOT_IMPLEMENTED when queried for this metric. */ eMetric_WindowsDefaultTheme, /* * A Boolean value to determine whether the DWM compositor is being used * * This metric is not used on non-Windows platforms. These platforms * should return NS_ERROR_NOT_IMPLEMENTED when queried for this metric. */ eMetric_DWMCompositor, /* * A Boolean value to determine whether Windows is themed (Classic vs. * uxtheme) * * This is Windows-specific and is not implemented on other platforms * (will return the default of NS_ERROR_FAILURE). */ eMetric_WindowsClassic, /* * A Boolean value to determine whether the Mac graphite theme is * being used. * * The value of this metric is not used on other platforms. These platforms * should return NS_ERROR_NOT_IMPLEMENTED when queried for this metric. */ eMetric_MacGraphiteTheme, /* * eMetric_AlertNotificationOrigin indicates from which corner of the * screen alerts slide in, and from which direction (horizontal/vertical). * 0, the default, represents bottom right, sliding vertically. * Use any bitwise combination of the following constants: * NS_ALERT_HORIZONTAL (1), NS_ALERT_LEFT (2), NS_ALERT_TOP (4). * * 6 4 * +-----------+ * 7| |5 * | | * 3| |1 * +-----------+ * 2 0 */ eMetric_AlertNotificationOrigin, /** * If true, clicking on a scrollbar (not as in dragging the thumb) defaults * to scrolling the view corresponding to the clicked point. Otherwise, we * only do so if the scrollbar is clicked using the middle mouse button or * if shift is pressed when the scrollbar is clicked. */ eMetric_ScrollToClick, /** * IME and spell checker underline styles, the values should be * NS_DECORATION_LINE_STYLE_*. They are defined below. */ eMetric_IMERawInputUnderlineStyle, eMetric_IMESelectedRawTextUnderlineStyle, eMetric_IMEConvertedTextUnderlineStyle, eMetric_IMESelectedConvertedTextUnderline, eMetric_SpellCheckerUnderlineStyle, /** * If this metric != 0, show icons in menus. */ eMetric_ImagesInMenus } nsMetricID; enum { eMetric_ScrollArrowStartBackward = 0x1000, eMetric_ScrollArrowStartForward = 0x0100, eMetric_ScrollArrowEndBackward = 0x0010, eMetric_ScrollArrowEndForward = 0x0001, eMetric_ScrollArrowStyleSingle = // single arrow at each end eMetric_ScrollArrowStartBackward|eMetric_ScrollArrowEndForward, eMetric_ScrollArrowStyleBothAtBottom = // both arrows at bottom/right, none at top/left eMetric_ScrollArrowEndBackward|eMetric_ScrollArrowEndForward, eMetric_ScrollArrowStyleBothAtEachEnd = // both arrows at both ends eMetric_ScrollArrowEndBackward|eMetric_ScrollArrowEndForward| eMetric_ScrollArrowStartBackward|eMetric_ScrollArrowStartForward, eMetric_ScrollArrowStyleBothAtTop = // both arrows at top/left, none at bottom/right eMetric_ScrollArrowStartBackward|eMetric_ScrollArrowStartForward }; enum { eMetric_ScrollThumbStyleNormal, eMetric_ScrollThumbStyleProportional }; // When modifying this list, also modify nsXPLookAndFeel::sFloatPrefs // in widget/src/xpwidgts/nsXPLookAndFeel.cpp. typedef enum { eMetricFloat_TextFieldVerticalInsidePadding, eMetricFloat_TextFieldHorizontalInsidePadding, eMetricFloat_TextAreaVerticalInsidePadding, eMetricFloat_TextAreaHorizontalInsidePadding, eMetricFloat_ListVerticalInsidePadding, eMetricFloat_ListHorizontalInsidePadding, eMetricFloat_ButtonVerticalInsidePadding, eMetricFloat_ButtonHorizontalInsidePadding, eMetricFloat_IMEUnderlineRelativeSize, eMetricFloat_SpellCheckerUnderlineRelativeSize, // The width/height ratio of the cursor. If used, the CaretWidth int metric // should be added to the calculated caret width. eMetricFloat_CaretAspectRatio } nsMetricFloatID; NS_IMETHOD GetColor(const nsColorID aID, nscolor &aColor) = 0; NS_IMETHOD GetMetric(const nsMetricID aID, PRInt32 & aMetric) = 0; NS_IMETHOD GetMetric(const nsMetricFloatID aID, float & aMetric) = 0; virtual PRUnichar GetPasswordCharacter() { return PRUnichar('*'); } NS_IMETHOD LookAndFeelChanged() = 0; #ifdef NS_DEBUG typedef enum { eMetricSize_TextField = 0, eMetricSize_TextArea = 1, eMetricSize_ListBox = 2, eMetricSize_ComboBox = 3, eMetricSize_Radio = 4, eMetricSize_CheckBox = 5, eMetricSize_Button = 6 } nsMetricNavWidgetID; typedef enum { eMetricSize_Courier = 0, eMetricSize_SansSerif = 1 } nsMetricNavFontID; // This method returns the actual (or nearest estimate) // of the Navigator size for a given form control for a given font // and font size. This is used in NavQuirks mode to see how closely // we match its size NS_IMETHOD GetNavSize(const nsMetricNavWidgetID aWidgetID, const nsMetricNavFontID aFontID, const PRInt32 aFontSize, nsSize &aSize) = 0; #endif }; NS_DEFINE_STATIC_IID_ACCESSOR(nsILookAndFeel, NS_ILOOKANDFEEL_IID) // On the Mac, GetColor(eColor_TextSelectForeground, color) returns this // constant to specify that the foreground color should not be changed // (ie. a colored text keeps its colors when selected). // Of course if other plaforms work like the Mac, they can use it too. #define NS_DONT_CHANGE_COLOR NS_RGB(0x01, 0x01, 0x01) // ----------------------------------------------------------------- // Special colors for eColor_IME* and eColor_SpellCheckerUnderline // ----------------------------------------------------------------- // For background color only. #define NS_TRANSPARENT NS_RGBA(0x01, 0x00, 0x00, 0x00) // For foreground color only. #define NS_SAME_AS_FOREGROUND_COLOR NS_RGBA(0x02, 0x00, 0x00, 0x00) #define NS_40PERCENT_FOREGROUND_COLOR NS_RGBA(0x03, 0x00, 0x00, 0x00) #define NS_IS_SELECTION_SPECIAL_COLOR(c) ((c) == NS_TRANSPARENT || \ (c) == NS_SAME_AS_FOREGROUND_COLOR || \ (c) == NS_40PERCENT_FOREGROUND_COLOR) // ------------------------------------------------- // Underline styles for eMetric_IME*UnderlineStyle // ------------------------------------------------- #define NS_UNDERLINE_STYLE_NONE 0 #define NS_UNDERLINE_STYLE_DOTTED 1 #define NS_UNDERLINE_STYLE_DASHED 2 #define NS_UNDERLINE_STYLE_SOLID 3 #define NS_UNDERLINE_STYLE_DOUBLE 4 #define NS_UNDERLINE_STYLE_WAVY 5 #define NS_IS_VALID_UNDERLINE_STYLE(s) \ (NS_UNDERLINE_STYLE_NONE <= (s) && (s) <= NS_UNDERLINE_STYLE_WAVY) // ------------------------------------------ // Bits for eMetric_AlertNotificationOrigin // ------------------------------------------ #define NS_ALERT_HORIZONTAL 1 #define NS_ALERT_LEFT 2 #define NS_ALERT_TOP 4 #endif /* __nsILookAndFeel */