Instead of Color, we have Light and Dark in the registry. So each theme extension will specify dark and light color values for each "customizable element" like DocColor etc. Under appearance we have three radio buttons - light/dark/system. If system is selected then light/dark colors are switched based on the system's theme. if explicitly light/dark is selected - that color is used from the registry. ColorConfigValue now has three entries nColor, nLightColor, nDarkColor. nColor is used as a cache for the color being used at the moment. This is to avoid otherwise expensive function calls + hundreds of modifications in the codebase just to change nColor. nColor is cached either when the theme is loaded or when changes are committed in `ColorConfig_Impl::ImplCommit()`. Now, if Automatic theme is selected then themes is disabled and the application uses the system colors. If some other scheme is selected like "CustomTheme" etc, then LibreOffice themes/UI color customization is enabled and the theme colors are used. Instead of a scroll window, now we have a combobox for the registry entries and a single color dropdown to select the color value. This color dropdown is for convinience in case the user wants to change some specific color that's bothering him. For themeing, theme extensions should be used. API CHANGE + remove Color in favour of Light and Dark + AppBackground has additional two - BackgroundType and Bitmap + remove officecfg::Office::Common::Misc::Appearnce in favor of officecfg::Office::Common::Appearance::ApplicationAppearance + move LibreofficeTheme under officecfg::Office::Common::Appearance UI + it looks like https://i.imgur.com/UMxjfuC.png which is a little different from how the [mockup] on the ticket describes it, and that's because of lack of time due to upcomming feature freeze. + system/light/dark allow the user to switch between light/dark modes based on either the system theme (system) or by manually specifying light/dark. + ui themeing and color customization is disabled when automatic theme is selected, and enabled otherwise. [mockup]: https://bug-attachments.documentfoundation.org/attachment.cgi?id=197469 Change-Id: I1a7f70dfe44b81f863814f87e8d46e146c0e3d5a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174835 Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org> Tested-by: Jenkins Reviewed-by: Sahil Gautam <sahil.gautam.extern@allotropia.de>
2944 lines
78 KiB
C++
2944 lines
78 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you 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 .
|
|
*/
|
|
|
|
#include <vcl/themecolors.hxx>
|
|
#include <config_folders.h>
|
|
|
|
#include <officecfg/Office/Common.hxx>
|
|
|
|
#ifdef _WIN32
|
|
#include <win/svsys.h>
|
|
#endif
|
|
|
|
#include <comphelper/processfactory.hxx>
|
|
#include <o3tl/test_info.hxx>
|
|
#include <rtl/bootstrap.hxx>
|
|
|
|
#include <i18nlangtag/mslangid.hxx>
|
|
#include <i18nlangtag/languagetag.hxx>
|
|
|
|
#include <comphelper/lok.hxx>
|
|
|
|
#include <vcl/graphicfilter.hxx>
|
|
#include <IconThemeScanner.hxx>
|
|
#include <IconThemeSelector.hxx>
|
|
#include <vcl/IconThemeInfo.hxx>
|
|
#include <vcl/svapp.hxx>
|
|
#include <vcl/event.hxx>
|
|
#include <vcl/settings.hxx>
|
|
#include <vcl/i18nhelp.hxx>
|
|
#include <configsettings.hxx>
|
|
#include <vcl/outdev.hxx>
|
|
|
|
#include <unotools/fontcfg.hxx>
|
|
#include <unotools/localedatawrapper.hxx>
|
|
#include <unotools/confignode.hxx>
|
|
#include <unotools/configmgr.hxx>
|
|
#include <unotools/syslocale.hxx>
|
|
#include <unotools/syslocaleoptions.hxx>
|
|
|
|
#include <salframe.hxx>
|
|
#include <svdata.hxx>
|
|
|
|
using namespace ::com::sun::star;
|
|
|
|
struct ImplMouseData
|
|
{
|
|
MouseSettingsOptions mnOptions = MouseSettingsOptions::NONE;
|
|
sal_uInt64 mnDoubleClkTime = 500;
|
|
sal_Int32 mnDoubleClkWidth = 2;
|
|
sal_Int32 mnDoubleClkHeight = 2;
|
|
sal_Int32 mnStartDragWidth = 2 ;
|
|
sal_Int32 mnStartDragHeight = 2;
|
|
sal_Int32 mnButtonRepeat = 90;
|
|
sal_Int32 mnMenuDelay = 150;
|
|
MouseFollowFlags mnFollow = MouseFollowFlags::Menu;
|
|
MouseMiddleButtonAction mnMiddleButtonAction= MouseMiddleButtonAction::AutoScroll;
|
|
MouseWheelBehaviour mnWheelBehavior = MouseWheelBehaviour::FocusOnly;
|
|
|
|
bool operator==(const ImplMouseData& rSet) const = default;
|
|
};
|
|
|
|
namespace
|
|
{
|
|
constexpr Size getInitListBoxPreviewDefaultLogicSize()
|
|
{
|
|
#ifdef IOS
|
|
return Size(30, 30);
|
|
#else
|
|
return Size(15, 7);
|
|
#endif
|
|
}
|
|
|
|
// Structures simplifying comparison in StyleSettings::operator ==, where for some reason
|
|
// not all members of ImplStyleData are compared. Adding elements here would automatically
|
|
// participate in the default comparison methods.
|
|
|
|
struct ColorSet
|
|
{
|
|
Color maActiveBorderColor;
|
|
Color maActiveColor;
|
|
Color maActiveTextColor;
|
|
Color maAlternatingRowColor;
|
|
Color maDefaultButtonTextColor;
|
|
Color maButtonTextColor;
|
|
Color maDefaultActionButtonTextColor;
|
|
Color maActionButtonTextColor;
|
|
Color maFlatButtonTextColor;
|
|
Color maDefaultButtonRolloverTextColor;
|
|
Color maButtonRolloverTextColor;
|
|
Color maDefaultActionButtonRolloverTextColor;
|
|
Color maActionButtonRolloverTextColor;
|
|
Color maFlatButtonRolloverTextColor;
|
|
Color maDefaultButtonPressedRolloverTextColor;
|
|
Color maButtonPressedRolloverTextColor;
|
|
Color maDefaultActionButtonPressedRolloverTextColor;
|
|
Color maActionButtonPressedRolloverTextColor;
|
|
Color maFlatButtonPressedRolloverTextColor;
|
|
Color maCheckedColor;
|
|
Color maDarkShadowColor;
|
|
Color maDeactiveBorderColor;
|
|
Color maDeactiveColor;
|
|
Color maDeactiveTextColor;
|
|
Color maDialogColor;
|
|
Color maDialogTextColor;
|
|
Color maDisableColor;
|
|
Color maFaceColor;
|
|
Color maFieldColor;
|
|
Color maFieldTextColor;
|
|
Color maFieldRolloverTextColor;
|
|
Color maGroupTextColor;
|
|
Color maHelpColor;
|
|
Color maHelpTextColor;
|
|
Color maAccentColor;
|
|
Color maHighlightColor;
|
|
Color maHighlightTextColor;
|
|
Color maLabelTextColor;
|
|
Color maLightBorderColor;
|
|
Color maLightColor;
|
|
Color maLinkColor;
|
|
Color maMenuBarColor;
|
|
Color maMenuBarRolloverColor;
|
|
Color maMenuBorderColor;
|
|
Color maMenuColor;
|
|
Color maMenuHighlightColor;
|
|
Color maMenuHighlightTextColor;
|
|
Color maMenuTextColor;
|
|
Color maListBoxWindowBackgroundColor;
|
|
Color maListBoxWindowTextColor;
|
|
Color maListBoxWindowHighlightColor;
|
|
Color maListBoxWindowHighlightTextColor;
|
|
Color maMenuBarTextColor;
|
|
Color maMenuBarRolloverTextColor;
|
|
Color maMenuBarHighlightTextColor;
|
|
Color maMonoColor;
|
|
Color maRadioCheckTextColor;
|
|
Color maShadowColor;
|
|
Color maWarningColor;
|
|
Color maWarningTextColor;
|
|
Color maErrorColor;
|
|
Color maErrorTextColor;
|
|
Color maVisitedLinkColor;
|
|
Color maToolTextColor;
|
|
Color maWindowColor;
|
|
Color maWindowTextColor;
|
|
Color maWorkspaceColor;
|
|
Color maActiveTabColor;
|
|
Color maInactiveTabColor;
|
|
Color maTabTextColor;
|
|
Color maTabRolloverTextColor;
|
|
Color maTabHighlightTextColor;
|
|
|
|
bool operator==(const ColorSet&) const = default;
|
|
};
|
|
|
|
struct FontSet
|
|
{
|
|
vcl::Font maAppFont;
|
|
vcl::Font maHelpFont;
|
|
vcl::Font maTitleFont;
|
|
vcl::Font maFloatTitleFont;
|
|
vcl::Font maMenuFont;
|
|
vcl::Font maToolFont;
|
|
vcl::Font maLabelFont;
|
|
vcl::Font maRadioCheckFont;
|
|
vcl::Font maPushButtonFont;
|
|
vcl::Font maFieldFont;
|
|
vcl::Font maIconFont;
|
|
vcl::Font maTabFont;
|
|
vcl::Font maGroupFont;
|
|
|
|
bool operator==(const FontSet&) const = default;
|
|
};
|
|
}
|
|
|
|
struct ImplStyleData
|
|
{
|
|
ImplStyleData();
|
|
|
|
void SetStandardStyles();
|
|
|
|
ColorSet maColors;
|
|
FontSet maFonts;
|
|
sal_Int32 mnTitleHeight;
|
|
sal_Int32 mnFloatTitleHeight;
|
|
sal_Int32 mnScrollBarSize = 16;
|
|
sal_Int32 mnSpinSize = 16;
|
|
sal_Int32 mnCursorSize = 2;
|
|
sal_Int32 mnAntialiasedMin = 0;
|
|
sal_uInt64 mnCursorBlinkTime = STYLE_CURSOR_NOBLINKTIME;
|
|
DragFullOptions mnDragFullOptions = DragFullOptions::All;
|
|
SelectionOptions mnSelectionOptions = SelectionOptions::NONE;
|
|
DisplayOptions mnDisplayOptions = DisplayOptions::NONE;
|
|
ToolbarIconSize mnToolbarIconSize = ToolbarIconSize::Unknown;
|
|
StyleSettingsOptions mnOptions = StyleSettingsOptions::NONE;
|
|
TriState meUseImagesInMenus = TRISTATE_INDET;
|
|
std::optional<vcl::IconThemeScanner> mutable
|
|
mIconThemeScanner;
|
|
vcl::IconThemeSelector mIconThemeSelector;
|
|
|
|
OUString mIconTheme;
|
|
sal_Int32 mnMinThumbSize = 16;
|
|
TriState meContextMenuShortcuts = TRISTATE_INDET;
|
|
DialogStyle maDialogStyle;
|
|
|
|
bool mnUseFlatMenus : 1;
|
|
bool mbHighContrast : 1;
|
|
bool mbUseSystemUIFonts : 1;
|
|
/**
|
|
* Disabling AA doesn't actually disable AA of fonts, instead it is taken
|
|
* from system settings.
|
|
*/
|
|
bool mbUseFontAAFromSystem : 1;
|
|
bool mbUseSubpixelAA : 1;
|
|
bool mbAutoMnemonic : 1 = true;
|
|
bool mnUseFlatBorders : 1;
|
|
bool mbPreferredUseImagesInMenus : 1;
|
|
bool mbSkipDisabledInMenus : 1;
|
|
bool mbHideDisabledMenuItems : 1;
|
|
bool mbPreferredContextMenuShortcuts : 1;
|
|
//mbPrimaryButtonWarpsSlider == true for "jump to here" behavior for primary button, otherwise
|
|
//primary means scroll by single page. Secondary button takes the alternative behaviour
|
|
bool mbPrimaryButtonWarpsSlider : 1;
|
|
bool mbPreviewUsesCheckeredBackground : 1 = true;
|
|
|
|
sal_uInt16 mnEdgeBlending = 35;
|
|
Color maEdgeBlendingTopLeftColor = Color(0xC0, 0xC0, 0xC0);
|
|
Color maEdgeBlendingBottomRightColor = Color(0x40, 0x40, 0x40);
|
|
sal_uInt16 mnListBoxMaximumLineCount = 25;
|
|
|
|
// For some reason this isn't actually the column count that gets used, at least on iOS, but
|
|
// instead what SvtAccessibilityOptions_Impl::GetColorValueSetColumnCount() in
|
|
// svtools/source/config/accessibilityoptions.cxx returns.
|
|
sal_uInt16 mnColorValueSetColumnCount = 12;
|
|
ComboBoxTextSelectionMode meComboBoxTextSelectionMode = ComboBoxTextSelectionMode::SelectText;
|
|
Size maListBoxPreviewDefaultLogicSize = getInitListBoxPreviewDefaultLogicSize();
|
|
// on-demand calculated in GetListBoxPreviewDefaultPixelSize()
|
|
Size mutable maListBoxPreviewDefaultPixelSize;
|
|
BitmapEx mutable maAppBackgroundBitmap; // cache AppBackground bitmap
|
|
OUString mutable maAppBackgroundBitmapFileName; // cache AppBackground bitmap file name
|
|
|
|
bool operator==(const ImplStyleData& rSet) const;
|
|
};
|
|
|
|
struct ImplMiscData
|
|
{
|
|
ImplMiscData();
|
|
bool mbEnableLocalizedDecimalSep;
|
|
TriState mnDisablePrinting;
|
|
};
|
|
|
|
struct ImplHelpData
|
|
{
|
|
sal_Int32 mnTipTimeout = 3000;
|
|
};
|
|
|
|
struct ImplAllSettingsData
|
|
{
|
|
ImplAllSettingsData();
|
|
ImplAllSettingsData( const ImplAllSettingsData& rData );
|
|
~ImplAllSettingsData();
|
|
|
|
MouseSettings maMouseSettings;
|
|
StyleSettings maStyleSettings;
|
|
MiscSettings maMiscSettings;
|
|
HelpSettings maHelpSettings;
|
|
SvtSysLocale maSysLocale;
|
|
LanguageTag maLocale;
|
|
LanguageTag maUILocale;
|
|
mutable std::unique_ptr<LocaleDataWrapper> mpLocaleDataWrapper;
|
|
mutable std::unique_ptr<LocaleDataWrapper> mpUILocaleDataWrapper;
|
|
mutable std::unique_ptr<LocaleDataWrapper> mpNeutralLocaleDataWrapper;
|
|
mutable std::unique_ptr<vcl::I18nHelper> mpI18nHelper;
|
|
mutable std::unique_ptr<vcl::I18nHelper> mpUII18nHelper;
|
|
|
|
bool operator==(const ImplAllSettingsData& rSet) const;
|
|
};
|
|
|
|
void
|
|
MouseSettings::SetOptions(MouseSettingsOptions nOptions)
|
|
{
|
|
mxData->mnOptions = nOptions;
|
|
}
|
|
|
|
MouseSettingsOptions
|
|
MouseSettings::GetOptions() const
|
|
{
|
|
return mxData->mnOptions;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetDoubleClickTime( sal_uInt64 nDoubleClkTime )
|
|
{
|
|
mxData->mnDoubleClkTime = nDoubleClkTime;
|
|
}
|
|
|
|
sal_uInt64
|
|
MouseSettings::GetDoubleClickTime() const
|
|
{
|
|
return mxData->mnDoubleClkTime;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetDoubleClickWidth( sal_Int32 nDoubleClkWidth )
|
|
{
|
|
mxData->mnDoubleClkWidth = nDoubleClkWidth;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetDoubleClickWidth() const
|
|
{
|
|
return mxData->mnDoubleClkWidth;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetDoubleClickHeight( sal_Int32 nDoubleClkHeight )
|
|
{
|
|
mxData->mnDoubleClkHeight = nDoubleClkHeight;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetDoubleClickHeight() const
|
|
{
|
|
return mxData->mnDoubleClkHeight;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetStartDragWidth( sal_Int32 nDragWidth )
|
|
{
|
|
mxData->mnStartDragWidth = nDragWidth;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetStartDragWidth() const
|
|
{
|
|
return mxData->mnStartDragWidth;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetStartDragHeight( sal_Int32 nDragHeight )
|
|
{
|
|
mxData->mnStartDragHeight = nDragHeight;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetStartDragHeight() const
|
|
{
|
|
return mxData->mnStartDragHeight;
|
|
}
|
|
|
|
sal_uInt16
|
|
MouseSettings::GetStartDragCode()
|
|
{
|
|
return MOUSE_LEFT;
|
|
}
|
|
|
|
sal_uInt16
|
|
MouseSettings::GetContextMenuCode()
|
|
{
|
|
return MOUSE_RIGHT;
|
|
}
|
|
|
|
sal_uInt16
|
|
MouseSettings::GetContextMenuClicks()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetScrollRepeat()
|
|
{
|
|
return 100;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetButtonStartRepeat()
|
|
{
|
|
return 370;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetButtonRepeat( sal_Int32 nRepeat )
|
|
{
|
|
mxData->mnButtonRepeat = nRepeat;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetButtonRepeat() const
|
|
{
|
|
return mxData->mnButtonRepeat;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetActionDelay()
|
|
{
|
|
return 250;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetMenuDelay( sal_Int32 nDelay )
|
|
{
|
|
mxData->mnMenuDelay = nDelay;
|
|
}
|
|
|
|
sal_Int32
|
|
MouseSettings::GetMenuDelay() const
|
|
{
|
|
return mxData->mnMenuDelay;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetFollow( MouseFollowFlags nFollow )
|
|
{
|
|
mxData->mnFollow = nFollow;
|
|
}
|
|
|
|
MouseFollowFlags
|
|
MouseSettings::GetFollow() const
|
|
{
|
|
return mxData->mnFollow;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetMiddleButtonAction( MouseMiddleButtonAction nAction )
|
|
{
|
|
mxData->mnMiddleButtonAction = nAction;
|
|
}
|
|
|
|
MouseMiddleButtonAction
|
|
MouseSettings::GetMiddleButtonAction() const
|
|
{
|
|
return mxData->mnMiddleButtonAction;
|
|
}
|
|
|
|
void
|
|
MouseSettings::SetWheelBehavior( MouseWheelBehaviour nBehavior )
|
|
{
|
|
mxData->mnWheelBehavior = nBehavior;
|
|
}
|
|
|
|
MouseWheelBehaviour
|
|
MouseSettings::GetWheelBehavior() const
|
|
{
|
|
return mxData->mnWheelBehavior;
|
|
}
|
|
|
|
MouseSettings::MouseSettings() = default;
|
|
MouseSettings::MouseSettings(const MouseSettings&) = default;
|
|
MouseSettings::~MouseSettings() = default;
|
|
MouseSettings& MouseSettings::operator=(const MouseSettings&) = default;
|
|
|
|
// Until Clang 14, P2085R0 is unsupported, and the operator can't be default outside of declaration
|
|
bool MouseSettings::operator ==( const MouseSettings& rSet ) const
|
|
{
|
|
return mxData == rSet.mxData;
|
|
}
|
|
|
|
ImplStyleData::ImplStyleData()
|
|
{
|
|
SetStandardStyles();
|
|
}
|
|
|
|
void ImplStyleData::SetStandardStyles()
|
|
{
|
|
vcl::Font aStdFont( FAMILY_SWISS, Size( 0, 8 ) );
|
|
aStdFont.SetCharSet( osl_getThreadTextEncoding() );
|
|
aStdFont.SetWeight( WEIGHT_NORMAL );
|
|
if (!comphelper::IsFuzzing())
|
|
aStdFont.SetFamilyName(utl::DefaultFontConfiguration::get().getUserInterfaceFont(LanguageTag(u"en"_ustr)));
|
|
else
|
|
aStdFont.SetFamilyName(u"Liberation Sans"_ustr);
|
|
maFonts.maAppFont = aStdFont;
|
|
maFonts.maHelpFont = aStdFont;
|
|
maFonts.maMenuFont = aStdFont;
|
|
maFonts.maToolFont = aStdFont;
|
|
maFonts.maGroupFont = aStdFont;
|
|
maFonts.maLabelFont = aStdFont;
|
|
maFonts.maRadioCheckFont = aStdFont;
|
|
maFonts.maPushButtonFont = aStdFont;
|
|
maFonts.maFieldFont = aStdFont;
|
|
maFonts.maIconFont = aStdFont;
|
|
maFonts.maTabFont = aStdFont;
|
|
|
|
aStdFont.SetWeight( WEIGHT_BOLD );
|
|
maFonts.maFloatTitleFont = maFonts.maTitleFont = std::move(aStdFont);
|
|
|
|
maColors.maFaceColor = COL_LIGHTGRAY;
|
|
maColors.maCheckedColor = Color( 0xCC, 0xCC, 0xCC );
|
|
maColors.maLightColor = COL_WHITE;
|
|
maColors.maLightBorderColor = COL_LIGHTGRAY;
|
|
maColors.maShadowColor = COL_GRAY;
|
|
maColors.maDarkShadowColor = COL_BLACK;
|
|
|
|
maColors.maWarningColor = Color(0xFE, 0xEF, 0xB3); // tdf#105829
|
|
maColors.maWarningTextColor = Color(0x70, 0x43, 0x00);
|
|
maColors.maErrorColor = Color(0xFF, 0xBA, 0xBA);
|
|
maColors.maErrorTextColor = Color(0x7A, 0x00, 0x06);
|
|
|
|
maColors.maDefaultButtonTextColor = COL_BLACK;
|
|
maColors.maButtonTextColor = COL_BLACK;
|
|
maColors.maDefaultActionButtonTextColor = COL_BLACK;
|
|
maColors.maActionButtonTextColor = COL_BLACK;
|
|
maColors.maFlatButtonTextColor = COL_BLACK;
|
|
maColors.maDefaultButtonRolloverTextColor = COL_BLACK;
|
|
maColors.maButtonRolloverTextColor = COL_BLACK;
|
|
maColors.maDefaultActionButtonRolloverTextColor = COL_BLACK;
|
|
maColors.maActionButtonRolloverTextColor = COL_BLACK;
|
|
maColors.maFlatButtonRolloverTextColor = COL_BLACK;
|
|
maColors.maDefaultButtonPressedRolloverTextColor = COL_BLACK;
|
|
maColors.maButtonPressedRolloverTextColor = COL_BLACK;
|
|
maColors.maDefaultActionButtonPressedRolloverTextColor = COL_BLACK;
|
|
maColors.maActionButtonPressedRolloverTextColor = COL_BLACK;
|
|
maColors.maFlatButtonPressedRolloverTextColor = COL_BLACK;
|
|
|
|
maColors.maRadioCheckTextColor = COL_BLACK;
|
|
maColors.maGroupTextColor = COL_BLACK;
|
|
maColors.maLabelTextColor = COL_BLACK;
|
|
maColors.maWindowColor = COL_WHITE;
|
|
maColors.maWindowTextColor = COL_BLACK;
|
|
maColors.maDialogColor = COL_LIGHTGRAY;
|
|
maColors.maDialogTextColor = COL_BLACK;
|
|
maColors.maWorkspaceColor = Color( 0xDF, 0xDF, 0xDE );
|
|
maColors.maMonoColor = COL_BLACK;
|
|
maColors.maFieldColor = COL_WHITE;
|
|
maColors.maFieldTextColor = COL_BLACK;
|
|
maColors.maFieldRolloverTextColor = COL_BLACK;
|
|
maColors.maActiveBorderColor = COL_LIGHTGRAY;
|
|
maColors.maDeactiveColor = COL_GRAY;
|
|
maColors.maDeactiveTextColor = COL_LIGHTGRAY;
|
|
maColors.maDeactiveBorderColor = COL_LIGHTGRAY;
|
|
maColors.maMenuColor = COL_LIGHTGRAY;
|
|
maColors.maMenuBarColor = COL_LIGHTGRAY;
|
|
maColors.maMenuBarRolloverColor = COL_BLUE;
|
|
maColors.maMenuBorderColor = COL_LIGHTGRAY;
|
|
maColors.maMenuTextColor = COL_BLACK;
|
|
maColors.maListBoxWindowBackgroundColor = COL_WHITE;
|
|
maColors.maListBoxWindowTextColor = COL_BLACK;
|
|
maColors.maListBoxWindowHighlightColor = COL_BLUE;
|
|
maColors.maListBoxWindowHighlightTextColor = COL_WHITE;
|
|
maColors.maMenuBarTextColor = COL_BLACK;
|
|
maColors.maMenuBarRolloverTextColor = COL_WHITE;
|
|
maColors.maMenuBarHighlightTextColor = COL_WHITE;
|
|
maColors.maMenuHighlightColor = COL_BLUE;
|
|
maColors.maMenuHighlightTextColor = COL_WHITE;
|
|
maColors.maAccentColor = COL_RED;
|
|
maColors.maHighlightColor = COL_BLUE;
|
|
maColors.maHighlightTextColor = COL_WHITE;
|
|
// make active like highlight, except with a small contrast
|
|
maColors.maActiveColor = maColors.maHighlightColor;
|
|
maColors.maActiveColor.IncreaseLuminance(32);
|
|
maColors.maActiveTextColor = maColors.maHighlightTextColor;
|
|
maColors.maActiveTabColor = COL_WHITE;
|
|
maColors.maInactiveTabColor = COL_LIGHTGRAY;
|
|
maColors.maTabTextColor = COL_BLACK;
|
|
maColors.maTabRolloverTextColor = COL_BLACK;
|
|
maColors.maTabHighlightTextColor = COL_BLACK;
|
|
maColors.maDisableColor = COL_GRAY;
|
|
maColors.maHelpColor = Color( 0xFF, 0xFF, 0xE0 );
|
|
maColors.maHelpTextColor = COL_BLACK;
|
|
maColors.maLinkColor = COL_BLUE;
|
|
maColors.maVisitedLinkColor = Color( 0x00, 0x00, 0xCC );
|
|
maColors.maToolTextColor = COL_BLACK;
|
|
maColors.maAlternatingRowColor = Color( 0xEE, 0xEE, 0xEE );
|
|
|
|
mnTitleHeight = 18;
|
|
mnFloatTitleHeight = 13;
|
|
mbHighContrast = false;
|
|
mbUseSystemUIFonts = true;
|
|
mbUseFontAAFromSystem = true;
|
|
mbUseSubpixelAA = true;
|
|
mnUseFlatBorders = false;
|
|
mnUseFlatMenus = false;
|
|
mbPreferredUseImagesInMenus = true;
|
|
mbSkipDisabledInMenus = false;
|
|
mbHideDisabledMenuItems = false;
|
|
mbPreferredContextMenuShortcuts = true;
|
|
mbPrimaryButtonWarpsSlider = false;
|
|
}
|
|
|
|
StyleSettings::StyleSettings() = default;
|
|
StyleSettings::StyleSettings(const StyleSettings&) = default;
|
|
StyleSettings::~StyleSettings() = default;
|
|
StyleSettings& StyleSettings::operator=(const StyleSettings&) = default;
|
|
|
|
void
|
|
StyleSettings::SetFaceColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFaceColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFaceColor() const
|
|
{
|
|
return mxData->maColors.maFaceColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetCheckedColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maCheckedColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetCheckedColor() const
|
|
{
|
|
return mxData->maColors.maCheckedColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetLightColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maLightColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetLightColor() const
|
|
{
|
|
return mxData->maColors.maLightColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetLightBorderColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maLightBorderColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetLightBorderColor() const
|
|
{
|
|
return mxData->maColors.maLightBorderColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetWarningColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maWarningColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetWarningColor() const
|
|
{
|
|
return mxData->maColors.maWarningColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetWarningTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maWarningTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetWarningTextColor() const
|
|
{
|
|
return mxData->maColors.maWarningTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetErrorColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maErrorColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetErrorColor() const
|
|
{
|
|
return mxData->maColors.maErrorColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetErrorTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maErrorTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetErrorTextColor() const
|
|
{
|
|
return mxData->maColors.maErrorTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetShadowColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maShadowColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetShadowColor() const
|
|
{
|
|
return mxData->maColors.maShadowColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDarkShadowColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDarkShadowColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDarkShadowColor() const
|
|
{
|
|
return mxData->maColors.maDarkShadowColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDefaultButtonTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDefaultButtonTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDefaultButtonTextColor() const
|
|
{
|
|
return mxData->maColors.maDefaultButtonTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetButtonTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maButtonTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetButtonTextColor() const
|
|
{
|
|
return mxData->maColors.maButtonTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDefaultActionButtonTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDefaultActionButtonTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDefaultActionButtonTextColor() const
|
|
{
|
|
return mxData->maColors.maDefaultActionButtonTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActionButtonTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActionButtonTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActionButtonTextColor() const
|
|
{
|
|
return mxData->maColors.maActionButtonTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFlatButtonTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFlatButtonTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFlatButtonTextColor() const
|
|
{
|
|
return mxData->maColors.maFlatButtonTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDefaultButtonRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDefaultButtonRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDefaultButtonRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maDefaultButtonRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetButtonRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maButtonRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetButtonRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maButtonRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDefaultActionButtonRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDefaultActionButtonRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDefaultActionButtonRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maDefaultActionButtonRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActionButtonRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActionButtonRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActionButtonRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maActionButtonRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFlatButtonRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFlatButtonRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFlatButtonRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maFlatButtonRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDefaultButtonPressedRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDefaultButtonPressedRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDefaultButtonPressedRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maDefaultButtonPressedRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetButtonPressedRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maButtonPressedRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetButtonPressedRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maButtonPressedRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDefaultActionButtonPressedRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDefaultActionButtonPressedRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDefaultActionButtonPressedRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maDefaultActionButtonPressedRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActionButtonPressedRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActionButtonPressedRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActionButtonPressedRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maActionButtonPressedRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFlatButtonPressedRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFlatButtonPressedRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFlatButtonPressedRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maFlatButtonPressedRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetRadioCheckTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maRadioCheckTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetRadioCheckTextColor() const
|
|
{
|
|
return mxData->maColors.maRadioCheckTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetGroupTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maGroupTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetGroupTextColor() const
|
|
{
|
|
return mxData->maColors.maGroupTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetLabelTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maLabelTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetLabelTextColor() const
|
|
{
|
|
return mxData->maColors.maLabelTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetWindowColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maWindowColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetWindowColor() const
|
|
{
|
|
return mxData->maColors.maWindowColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetWindowTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maWindowTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetWindowTextColor() const
|
|
{
|
|
return mxData->maColors.maWindowTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDialogColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDialogColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDialogColor() const
|
|
{
|
|
return mxData->maColors.maDialogColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDialogTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDialogTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDialogTextColor() const
|
|
{
|
|
return mxData->maColors.maDialogTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetWorkspaceColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maWorkspaceColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetWorkspaceColor() const
|
|
{
|
|
return mxData->maColors.maWorkspaceColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFieldColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFieldColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFieldColor() const
|
|
{
|
|
return mxData->maColors.maFieldColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFieldTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFieldTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFieldTextColor() const
|
|
{
|
|
return mxData->maColors.maFieldTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFieldRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maFieldRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetFieldRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maFieldRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActiveColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActiveColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActiveColor() const
|
|
{
|
|
return mxData->maColors.maActiveColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActiveTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActiveTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActiveTextColor() const
|
|
{
|
|
return mxData->maColors.maActiveTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActiveBorderColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActiveBorderColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActiveBorderColor() const
|
|
{
|
|
return mxData->maColors.maActiveBorderColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDeactiveColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDeactiveColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDeactiveColor() const
|
|
{
|
|
return mxData->maColors.maDeactiveColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDeactiveTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDeactiveTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDeactiveTextColor() const
|
|
{
|
|
return mxData->maColors.maDeactiveTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDeactiveBorderColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDeactiveBorderColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDeactiveBorderColor() const
|
|
{
|
|
return mxData->maColors.maDeactiveBorderColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetAccentColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maAccentColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetAccentColor() const
|
|
{
|
|
return mxData->maColors.maAccentColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHighlightColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maHighlightColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetHighlightColor() const
|
|
{
|
|
return mxData->maColors.maHighlightColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHighlightTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maHighlightTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetHighlightTextColor() const
|
|
{
|
|
return mxData->maColors.maHighlightTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDisableColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maDisableColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetDisableColor() const
|
|
{
|
|
return mxData->maColors.maDisableColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHelpColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maHelpColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetHelpColor() const
|
|
{
|
|
return mxData->maColors.maHelpColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHelpTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maHelpTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetHelpTextColor() const
|
|
{
|
|
return mxData->maColors.maHelpTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuColor() const
|
|
{
|
|
return mxData->maColors.maMenuColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuBarColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuBarColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuBarColor() const
|
|
{
|
|
return mxData->maColors.maMenuBarColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuBarRolloverColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuBarRolloverColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuBarRolloverColor() const
|
|
{
|
|
return mxData->maColors.maMenuBarRolloverColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuBorderColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuBorderColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuBorderColor() const
|
|
{
|
|
return mxData->maColors.maMenuBorderColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuTextColor() const
|
|
{
|
|
return mxData->maColors.maMenuTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuBarTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuBarTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuBarTextColor() const
|
|
{
|
|
return mxData->maColors.maMenuBarTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuBarRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuBarRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuBarRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maMenuBarRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuBarHighlightTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuBarHighlightTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuBarHighlightTextColor() const
|
|
{
|
|
return mxData->maColors.maMenuBarHighlightTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuHighlightColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuHighlightColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuHighlightColor() const
|
|
{
|
|
return mxData->maColors.maMenuHighlightColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuHighlightTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMenuHighlightTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMenuHighlightTextColor() const
|
|
{
|
|
return mxData->maColors.maMenuHighlightTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetListBoxWindowBackgroundColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maListBoxWindowBackgroundColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetListBoxWindowBackgroundColor() const
|
|
{
|
|
return mxData->maColors.maListBoxWindowBackgroundColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetListBoxWindowTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maListBoxWindowTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetListBoxWindowTextColor() const
|
|
{
|
|
return mxData->maColors.maListBoxWindowTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetListBoxWindowHighlightColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maListBoxWindowHighlightColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetListBoxWindowHighlightColor() const
|
|
{
|
|
return mxData->maColors.maListBoxWindowHighlightColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetListBoxWindowHighlightTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maListBoxWindowHighlightTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetListBoxWindowHighlightTextColor() const
|
|
{
|
|
return mxData->maColors.maListBoxWindowHighlightTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetTabTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maTabTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetTabTextColor() const
|
|
{
|
|
return mxData->maColors.maTabTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetTabRolloverTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maTabRolloverTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetTabRolloverTextColor() const
|
|
{
|
|
return mxData->maColors.maTabRolloverTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetTabHighlightTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maTabHighlightTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetTabHighlightTextColor() const
|
|
{
|
|
return mxData->maColors.maTabHighlightTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetLinkColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maLinkColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetLinkColor() const
|
|
{
|
|
return mxData->maColors.maLinkColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetVisitedLinkColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maVisitedLinkColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetVisitedLinkColor() const
|
|
{
|
|
return mxData->maColors.maVisitedLinkColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetToolTextColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maToolTextColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetToolTextColor() const
|
|
{
|
|
return mxData->maColors.maToolTextColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMonoColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maMonoColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetMonoColor() const
|
|
{
|
|
return mxData->maColors.maMonoColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetActiveTabColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maActiveTabColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetActiveTabColor() const
|
|
{
|
|
return mxData->maColors.maActiveTabColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetInactiveTabColor( const Color& rColor )
|
|
{
|
|
mxData->maColors.maInactiveTabColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetInactiveTabColor() const
|
|
{
|
|
return mxData->maColors.maInactiveTabColor;
|
|
}
|
|
|
|
void StyleSettings::SetAlternatingRowColor(const Color& rColor)
|
|
{
|
|
mxData->maColors.maAlternatingRowColor = rColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetAlternatingRowColor() const
|
|
{
|
|
return mxData->maColors.maAlternatingRowColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetUseSystemUIFonts( bool bUseSystemUIFonts )
|
|
{
|
|
mxData->mbUseSystemUIFonts = bUseSystemUIFonts;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetUseSystemUIFonts() const
|
|
{
|
|
return mxData->mbUseSystemUIFonts;
|
|
}
|
|
|
|
void StyleSettings::SetUseFontAAFromSystem(bool bUseFontAAFromSystem)
|
|
{
|
|
mxData->mbUseFontAAFromSystem = bUseFontAAFromSystem;
|
|
}
|
|
|
|
bool StyleSettings::GetUseFontAAFromSystem() const
|
|
{
|
|
return mxData->mbUseFontAAFromSystem;
|
|
}
|
|
|
|
void StyleSettings::SetUseSubpixelAA(bool val)
|
|
{
|
|
mxData->mbUseSubpixelAA = val;
|
|
}
|
|
|
|
bool StyleSettings::GetUseSubpixelAA() const
|
|
{
|
|
return mxData->mbUseSubpixelAA;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetUseFlatBorders( bool bUseFlatBorders )
|
|
{
|
|
mxData->mnUseFlatBorders = bUseFlatBorders;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetUseFlatBorders() const
|
|
{
|
|
return mxData->mnUseFlatBorders;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetUseFlatMenus( bool bUseFlatMenus )
|
|
{
|
|
mxData->mnUseFlatMenus = bUseFlatMenus;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetUseFlatMenus() const
|
|
{
|
|
return mxData->mnUseFlatMenus;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetUseImagesInMenus( TriState eUseImagesInMenus )
|
|
{
|
|
mxData->meUseImagesInMenus = eUseImagesInMenus;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetPreferredUseImagesInMenus( bool bPreferredUseImagesInMenus )
|
|
{
|
|
mxData->mbPreferredUseImagesInMenus = bPreferredUseImagesInMenus;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetPreferredUseImagesInMenus() const
|
|
{
|
|
return mxData->mbPreferredUseImagesInMenus;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetSkipDisabledInMenus( bool bSkipDisabledInMenus )
|
|
{
|
|
mxData->mbSkipDisabledInMenus = bSkipDisabledInMenus;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetSkipDisabledInMenus() const
|
|
{
|
|
return mxData->mbSkipDisabledInMenus;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHideDisabledMenuItems( bool bHideDisabledMenuItems )
|
|
{
|
|
mxData->mbHideDisabledMenuItems = bHideDisabledMenuItems;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetHideDisabledMenuItems() const
|
|
{
|
|
return mxData->mbHideDisabledMenuItems;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetContextMenuShortcuts( TriState eContextMenuShortcuts )
|
|
{
|
|
mxData->meContextMenuShortcuts = eContextMenuShortcuts;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetContextMenuShortcuts() const
|
|
{
|
|
switch (mxData->meContextMenuShortcuts)
|
|
{
|
|
case TRISTATE_FALSE:
|
|
return false;
|
|
case TRISTATE_TRUE:
|
|
return true;
|
|
default: // TRISTATE_INDET:
|
|
return GetPreferredContextMenuShortcuts();
|
|
}
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetPreferredContextMenuShortcuts( bool bContextMenuShortcuts )
|
|
{
|
|
mxData->mbPreferredContextMenuShortcuts = bContextMenuShortcuts;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetPreferredContextMenuShortcuts() const
|
|
{
|
|
return mxData->mbPreferredContextMenuShortcuts;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetPrimaryButtonWarpsSlider( bool bPrimaryButtonWarpsSlider )
|
|
{
|
|
mxData->mbPrimaryButtonWarpsSlider = bPrimaryButtonWarpsSlider;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetPrimaryButtonWarpsSlider() const
|
|
{
|
|
return mxData->mbPrimaryButtonWarpsSlider;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetAppFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maAppFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetAppFont() const
|
|
{
|
|
return mxData->maFonts.maAppFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHelpFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maHelpFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetHelpFont() const
|
|
{
|
|
return mxData->maFonts.maHelpFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetTitleFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maTitleFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetTitleFont() const
|
|
{
|
|
return mxData->maFonts.maTitleFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFloatTitleFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maFloatTitleFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetFloatTitleFont() const
|
|
{
|
|
return mxData->maFonts.maFloatTitleFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMenuFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maMenuFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetMenuFont() const
|
|
{
|
|
return mxData->maFonts.maMenuFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetToolFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maToolFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetToolFont() const
|
|
{
|
|
return mxData->maFonts.maToolFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetGroupFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maGroupFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetGroupFont() const
|
|
{
|
|
return mxData->maFonts.maGroupFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetLabelFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maLabelFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetLabelFont() const
|
|
{
|
|
return mxData->maFonts.maLabelFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetRadioCheckFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maRadioCheckFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetRadioCheckFont() const
|
|
{
|
|
return mxData->maFonts.maRadioCheckFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetPushButtonFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maPushButtonFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetPushButtonFont() const
|
|
{
|
|
return mxData->maFonts.maPushButtonFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFieldFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maFieldFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetFieldFont() const
|
|
{
|
|
return mxData->maFonts.maFieldFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetIconFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maIconFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetIconFont() const
|
|
{
|
|
return mxData->maFonts.maIconFont;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetTabFont( const vcl::Font& rFont )
|
|
{
|
|
mxData->maFonts.maTabFont = rFont;
|
|
}
|
|
|
|
const vcl::Font&
|
|
StyleSettings::GetTabFont() const
|
|
{
|
|
return mxData->maFonts.maTabFont;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetBorderSize()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetTitleHeight( sal_Int32 nSize )
|
|
{
|
|
mxData->mnTitleHeight = nSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetTitleHeight() const
|
|
{
|
|
return mxData->mnTitleHeight;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetFloatTitleHeight( sal_Int32 nSize )
|
|
{
|
|
mxData->mnFloatTitleHeight = nSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetFloatTitleHeight() const
|
|
{
|
|
return mxData->mnFloatTitleHeight;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetScrollBarSize( sal_Int32 nSize )
|
|
{
|
|
mxData->mnScrollBarSize = nSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetScrollBarSize() const
|
|
{
|
|
return mxData->mnScrollBarSize;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetMinThumbSize( sal_Int32 nSize )
|
|
{
|
|
mxData->mnMinThumbSize = nSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetMinThumbSize() const
|
|
{
|
|
return mxData->mnMinThumbSize;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetSpinSize( sal_Int32 nSize )
|
|
{
|
|
mxData->mnSpinSize = nSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetSpinSize() const
|
|
{
|
|
return mxData->mnSpinSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetSplitSize()
|
|
{
|
|
return 3;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetCursorSize( sal_Int32 nSize )
|
|
{
|
|
mxData->mnCursorSize = nSize;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetCursorSize() const
|
|
{
|
|
return mxData->mnCursorSize;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetCursorBlinkTime( sal_uInt64 nBlinkTime )
|
|
{
|
|
mxData->mnCursorBlinkTime = nBlinkTime;
|
|
}
|
|
|
|
sal_uInt64
|
|
StyleSettings::GetCursorBlinkTime() const
|
|
{
|
|
return mxData->mnCursorBlinkTime;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDragFullOptions( DragFullOptions nOptions )
|
|
{
|
|
mxData->mnDragFullOptions = nOptions;
|
|
}
|
|
|
|
DragFullOptions
|
|
StyleSettings::GetDragFullOptions() const
|
|
{
|
|
return mxData->mnDragFullOptions;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetSelectionOptions( SelectionOptions nOptions )
|
|
{
|
|
mxData->mnSelectionOptions = nOptions;
|
|
}
|
|
|
|
SelectionOptions
|
|
StyleSettings::GetSelectionOptions() const
|
|
{
|
|
return mxData->mnSelectionOptions;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetDisplayOptions( DisplayOptions nOptions )
|
|
{
|
|
mxData->mnDisplayOptions = nOptions;
|
|
}
|
|
|
|
DisplayOptions
|
|
StyleSettings::GetDisplayOptions() const
|
|
{
|
|
return mxData->mnDisplayOptions;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetAntialiasingMinPixelHeight( sal_Int32 nMinPixel )
|
|
{
|
|
mxData->mnAntialiasedMin = nMinPixel;
|
|
}
|
|
|
|
sal_Int32
|
|
StyleSettings::GetAntialiasingMinPixelHeight() const
|
|
{
|
|
return mxData->mnAntialiasedMin;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetOptions( StyleSettingsOptions nOptions )
|
|
{
|
|
mxData->mnOptions = nOptions;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetAutoMnemonic( bool bAutoMnemonic )
|
|
{
|
|
mxData->mbAutoMnemonic = bAutoMnemonic;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetAutoMnemonic() const
|
|
{
|
|
return mxData->mbAutoMnemonic;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetDockingFloatsSupported()
|
|
{
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return pSVData->maNWFData.mbCanDetermineWindowPosition;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetToolbarIconSize( ToolbarIconSize nSize )
|
|
{
|
|
mxData->mnToolbarIconSize = nSize;
|
|
}
|
|
|
|
ToolbarIconSize
|
|
StyleSettings::GetToolbarIconSize() const
|
|
{
|
|
return mxData->mnToolbarIconSize;
|
|
}
|
|
|
|
Size StyleSettings::GetToolbarIconSizePixel() const
|
|
{
|
|
switch (GetToolbarIconSize())
|
|
{
|
|
case ToolbarIconSize::Large:
|
|
return Size(24, 24);
|
|
case ToolbarIconSize::Size32:
|
|
return Size(32, 32);
|
|
case ToolbarIconSize::Small:
|
|
default:
|
|
return Size(16, 16);
|
|
}
|
|
}
|
|
|
|
const DialogStyle&
|
|
StyleSettings::GetDialogStyle() const
|
|
{
|
|
return mxData->maDialogStyle;
|
|
}
|
|
|
|
static BitmapEx readBitmapEx(const OUString& rPath)
|
|
{
|
|
OUString aPath(rPath);
|
|
rtl::Bootstrap::expandMacros(aPath);
|
|
|
|
// import the image
|
|
Graphic aGraphic;
|
|
if (GraphicFilter::LoadGraphic(aPath, OUString(), aGraphic) != ERRCODE_NONE)
|
|
return BitmapEx();
|
|
return aGraphic.GetBitmapEx();
|
|
}
|
|
|
|
static void setupAppBackgroundBitmap(OUString& rAppBackBitmapFileName, BitmapEx& rAppBackBitmap)
|
|
{
|
|
if (Application::IsHeadlessModeEnabled()
|
|
|| !ThemeColors::GetThemeColors().GetAppBackUseBitmap())
|
|
return;
|
|
|
|
OUString sAppBackgroundBitmap = ThemeColors::GetThemeColors().GetAppBackBitmapFileName();
|
|
if (rAppBackBitmapFileName == sAppBackgroundBitmap)
|
|
return;
|
|
|
|
rAppBackBitmapFileName = sAppBackgroundBitmap;
|
|
|
|
if (!rAppBackBitmapFileName.isEmpty())
|
|
{
|
|
rAppBackBitmap = readBitmapEx("$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER "/gallery/backgrounds/"
|
|
+ rAppBackBitmapFileName);
|
|
}
|
|
|
|
if (rAppBackBitmap.IsEmpty())
|
|
{
|
|
SAL_WARN("vcl.app", "Failed to load AppBackground bitmap file: " << rAppBackBitmapFileName);
|
|
ThemeColors::GetThemeColors().SetAppBackUseBitmap(false);
|
|
}
|
|
}
|
|
|
|
BitmapEx const& StyleSettings::GetAppBackgroundBitmap() const
|
|
{
|
|
setupAppBackgroundBitmap(mxData->maAppBackgroundBitmapFileName, mxData->maAppBackgroundBitmap);
|
|
return mxData->maAppBackgroundBitmap;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetEdgeBlending(sal_uInt16 nCount)
|
|
{
|
|
mxData->mnEdgeBlending = nCount;
|
|
}
|
|
|
|
sal_uInt16
|
|
StyleSettings::GetEdgeBlending() const
|
|
{
|
|
return mxData->mnEdgeBlending;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetEdgeBlendingTopLeftColor() const
|
|
{
|
|
return mxData->maEdgeBlendingTopLeftColor;
|
|
}
|
|
|
|
const Color&
|
|
StyleSettings::GetEdgeBlendingBottomRightColor() const
|
|
{
|
|
return mxData->maEdgeBlendingBottomRightColor;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetListBoxMaximumLineCount(sal_uInt16 nCount)
|
|
{
|
|
mxData->mnListBoxMaximumLineCount = nCount;
|
|
}
|
|
|
|
sal_uInt16
|
|
StyleSettings::GetListBoxMaximumLineCount() const
|
|
{
|
|
return mxData->mnListBoxMaximumLineCount;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetColorValueSetColumnCount(sal_uInt16 nCount)
|
|
{
|
|
mxData->mnColorValueSetColumnCount = nCount;
|
|
}
|
|
|
|
sal_uInt16
|
|
StyleSettings::GetColorValueSetColumnCount() const
|
|
{
|
|
return mxData->mnColorValueSetColumnCount;
|
|
}
|
|
|
|
sal_uInt16
|
|
StyleSettings::GetListBoxPreviewDefaultLineWidth()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
void StyleSettings::SetComboBoxTextSelectionMode(
|
|
ComboBoxTextSelectionMode eMode)
|
|
{
|
|
mxData->meComboBoxTextSelectionMode = eMode;
|
|
}
|
|
|
|
ComboBoxTextSelectionMode StyleSettings::GetComboBoxTextSelectionMode() const
|
|
{
|
|
return mxData->meComboBoxTextSelectionMode;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetPreviewUsesCheckeredBackground(bool bNew)
|
|
{
|
|
mxData->mbPreviewUsesCheckeredBackground = bNew;
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetPreviewUsesCheckeredBackground() const
|
|
{
|
|
return mxData->mbPreviewUsesCheckeredBackground;
|
|
}
|
|
|
|
void StyleSettings::SetListBoxPreviewDefaultLogicSize(Size const& rSize)
|
|
{
|
|
auto* myData = mxData.get();
|
|
myData->maListBoxPreviewDefaultLogicSize = rSize;
|
|
mxData->maListBoxPreviewDefaultPixelSize = {}; // recalc
|
|
}
|
|
|
|
const Size& StyleSettings::GetListBoxPreviewDefaultPixelSize() const
|
|
{
|
|
if(0 == mxData->maListBoxPreviewDefaultPixelSize.Width() || 0 == mxData->maListBoxPreviewDefaultPixelSize.Height())
|
|
{
|
|
mxData->maListBoxPreviewDefaultPixelSize =
|
|
Application::GetDefaultDevice()->LogicToPixel(mxData->maListBoxPreviewDefaultLogicSize, MapMode(MapUnit::MapAppFont));
|
|
}
|
|
|
|
return mxData->maListBoxPreviewDefaultPixelSize;
|
|
}
|
|
|
|
void StyleSettings::Set3DColors( const Color& rColor )
|
|
{
|
|
auto* myData = mxData.get();
|
|
myData->maColors.maFaceColor = rColor;
|
|
myData->maColors.maLightBorderColor = rColor;
|
|
myData->maColors.maMenuBorderColor = rColor;
|
|
myData->maColors.maDarkShadowColor = COL_BLACK;
|
|
if ( rColor != COL_LIGHTGRAY )
|
|
{
|
|
myData->maColors.maLightColor = rColor;
|
|
myData->maColors.maShadowColor = rColor;
|
|
myData->maColors.maDarkShadowColor = rColor;
|
|
|
|
if (!rColor.IsDark())
|
|
{
|
|
myData->maColors.maLightColor.IncreaseLuminance(64);
|
|
myData->maColors.maShadowColor.DecreaseLuminance(64);
|
|
myData->maColors.maDarkShadowColor.DecreaseLuminance(100);
|
|
}
|
|
else
|
|
{
|
|
myData->maColors.maLightColor.DecreaseLuminance(64);
|
|
myData->maColors.maShadowColor.IncreaseLuminance(64);
|
|
myData->maColors.maDarkShadowColor.IncreaseLuminance(100);
|
|
}
|
|
|
|
sal_uInt8 nRed = (myData->maColors.maLightColor.GetRed() + myData->maColors.maShadowColor.GetRed()) / 2;
|
|
sal_uInt8 nGreen = (myData->maColors.maLightColor.GetGreen() + myData->maColors.maShadowColor.GetGreen()) / 2;
|
|
sal_uInt8 nBlue = (myData->maColors.maLightColor.GetBlue() + myData->maColors.maShadowColor.GetBlue()) / 2;
|
|
myData->maColors.maCheckedColor = Color(nRed, nGreen, nBlue);
|
|
}
|
|
else
|
|
{
|
|
myData->maColors.maCheckedColor = Color( 0x99, 0x99, 0x99 );
|
|
myData->maColors.maLightColor = COL_WHITE;
|
|
myData->maColors.maShadowColor = COL_GRAY;
|
|
}
|
|
}
|
|
|
|
void StyleSettings::SetCheckedColorSpecialCase( )
|
|
{
|
|
auto* myData = mxData.get();
|
|
// Light gray checked color special case
|
|
if ( GetFaceColor() == COL_LIGHTGRAY )
|
|
myData->maColors.maCheckedColor = Color(0xCC, 0xCC, 0xCC);
|
|
else
|
|
{
|
|
sal_uInt8 nRed = static_cast<sal_uInt8>((static_cast<sal_uInt16>(myData->maColors.maFaceColor.GetRed()) + static_cast<sal_uInt16>(myData->maColors.maLightColor.GetRed()))/2);
|
|
sal_uInt8 nGreen = static_cast<sal_uInt8>((static_cast<sal_uInt16>(myData->maColors.maFaceColor.GetGreen()) + static_cast<sal_uInt16>(myData->maColors.maLightColor.GetGreen()))/2);
|
|
sal_uInt8 nBlue = static_cast<sal_uInt8>((static_cast<sal_uInt16>(myData->maColors.maFaceColor.GetBlue()) + static_cast<sal_uInt16>(myData->maColors.maLightColor.GetBlue()))/2);
|
|
myData->maColors.maCheckedColor = Color(nRed, nGreen, nBlue);
|
|
}
|
|
}
|
|
|
|
bool StyleSettings::GetUseImagesInMenus() const
|
|
{
|
|
// icon mode selected in Tools -> Options... -> OpenOffice.org -> View
|
|
switch (mxData->meUseImagesInMenus) {
|
|
case TRISTATE_FALSE:
|
|
return false;
|
|
case TRISTATE_TRUE:
|
|
return true;
|
|
default: // TRISTATE_INDET:
|
|
return GetPreferredUseImagesInMenus();
|
|
}
|
|
}
|
|
|
|
void StyleSettings::SetStandardStyles()
|
|
{
|
|
mxData->SetStandardStyles();
|
|
}
|
|
|
|
Color StyleSettings::GetFaceGradientColor() const
|
|
{
|
|
// compute a brighter face color that can be used in gradients
|
|
// for a convex look (eg toolbars)
|
|
|
|
sal_uInt16 h, s, b;
|
|
GetFaceColor().RGBtoHSB( h, s, b );
|
|
if( s > 1) s=1;
|
|
if( b < 98) b=98;
|
|
return Color::HSBtoRGB( h, s, b );
|
|
}
|
|
|
|
Color StyleSettings::GetSeparatorColor() const
|
|
{
|
|
// compute a brighter shadow color for separators (used in toolbars or between menubar and toolbars on Windows XP)
|
|
sal_uInt16 h, s, b;
|
|
GetShadowColor().RGBtoHSB( h, s, b );
|
|
b += b/4;
|
|
s -= s/4;
|
|
return Color::HSBtoRGB( h, s, b );
|
|
}
|
|
|
|
// Until Clang 14, P2085R0 is unsupported, and the operator can't be default outside of declaration
|
|
bool StyleSettings::operator ==( const StyleSettings& rSet ) const
|
|
{
|
|
return mxData == rSet.mxData;
|
|
}
|
|
|
|
bool ImplStyleData::operator==(const ImplStyleData& rSet) const
|
|
{
|
|
if (mIconTheme != rSet.mIconTheme) {
|
|
return false;
|
|
}
|
|
|
|
if (mIconThemeSelector != rSet.mIconThemeSelector) {
|
|
return false;
|
|
}
|
|
|
|
return (mnOptions == rSet.mnOptions) &&
|
|
(mbAutoMnemonic == rSet.mbAutoMnemonic) &&
|
|
(mnDragFullOptions == rSet.mnDragFullOptions) &&
|
|
(mnSelectionOptions == rSet.mnSelectionOptions) &&
|
|
(mnDisplayOptions == rSet.mnDisplayOptions) &&
|
|
(mnCursorSize == rSet.mnCursorSize) &&
|
|
(mnCursorBlinkTime == rSet.mnCursorBlinkTime) &&
|
|
(mnTitleHeight == rSet.mnTitleHeight) &&
|
|
(mnFloatTitleHeight == rSet.mnFloatTitleHeight) &&
|
|
(mnScrollBarSize == rSet.mnScrollBarSize) &&
|
|
(mnMinThumbSize == rSet.mnMinThumbSize) &&
|
|
(mnSpinSize == rSet.mnSpinSize) &&
|
|
(mnAntialiasedMin == rSet.mnAntialiasedMin) &&
|
|
(mbHighContrast == rSet.mbHighContrast) &&
|
|
(mbUseSystemUIFonts == rSet.mbUseSystemUIFonts) &&
|
|
(mbUseFontAAFromSystem == rSet.mbUseFontAAFromSystem) &&
|
|
(mbUseSubpixelAA == rSet.mbUseSubpixelAA) &&
|
|
(mnUseFlatBorders == rSet.mnUseFlatBorders) &&
|
|
(mnUseFlatMenus == rSet.mnUseFlatMenus) &&
|
|
(maColors == rSet.maColors) &&
|
|
(maFonts == rSet.maFonts) &&
|
|
(meUseImagesInMenus == rSet.meUseImagesInMenus) &&
|
|
(mbPreferredUseImagesInMenus == rSet.mbPreferredUseImagesInMenus) &&
|
|
(mbSkipDisabledInMenus == rSet.mbSkipDisabledInMenus) &&
|
|
(mbHideDisabledMenuItems == rSet.mbHideDisabledMenuItems) &&
|
|
(mbPreferredContextMenuShortcuts == rSet.mbPreferredContextMenuShortcuts) &&
|
|
(meContextMenuShortcuts == rSet.meContextMenuShortcuts) &&
|
|
(mbPrimaryButtonWarpsSlider == rSet.mbPrimaryButtonWarpsSlider) &&
|
|
(mnEdgeBlending == rSet.mnEdgeBlending) &&
|
|
(maEdgeBlendingTopLeftColor == rSet.maEdgeBlendingTopLeftColor) &&
|
|
(maEdgeBlendingBottomRightColor == rSet.maEdgeBlendingBottomRightColor) &&
|
|
(mnListBoxMaximumLineCount == rSet.mnListBoxMaximumLineCount) &&
|
|
(mnColorValueSetColumnCount == rSet.mnColorValueSetColumnCount) &&
|
|
(maListBoxPreviewDefaultLogicSize == rSet.maListBoxPreviewDefaultLogicSize) &&
|
|
(mbPreviewUsesCheckeredBackground == rSet.mbPreviewUsesCheckeredBackground) &&
|
|
(maAppBackgroundBitmapFileName == rSet.maAppBackgroundBitmapFileName) &&
|
|
(maAppBackgroundBitmap == rSet.maAppBackgroundBitmap);
|
|
}
|
|
|
|
ImplMiscData::ImplMiscData() :
|
|
mnDisablePrinting(TRISTATE_INDET)
|
|
{
|
|
static const char* pEnv = getenv("SAL_DECIMALSEP_ENABLED" ); // set default without UI
|
|
mbEnableLocalizedDecimalSep = (pEnv != nullptr);
|
|
}
|
|
|
|
MiscSettings::MiscSettings()
|
|
: mxData(std::make_shared<ImplMiscData>())
|
|
{
|
|
}
|
|
|
|
bool MiscSettings::operator ==( const MiscSettings& rSet ) const
|
|
{
|
|
if ( mxData == rSet.mxData )
|
|
return true;
|
|
|
|
return (mxData->mnDisablePrinting == rSet.mxData->mnDisablePrinting ) &&
|
|
(mxData->mbEnableLocalizedDecimalSep == rSet.mxData->mbEnableLocalizedDecimalSep );
|
|
}
|
|
|
|
bool
|
|
MiscSettings::operator !=( const MiscSettings& rSet ) const
|
|
{
|
|
return !(*this == rSet);
|
|
}
|
|
|
|
bool MiscSettings::GetDisablePrinting() const
|
|
{
|
|
if( mxData->mnDisablePrinting == TRISTATE_INDET )
|
|
{
|
|
OUString aEnable =
|
|
vcl::SettingsConfigItem::get()->
|
|
getValue( u"DesktopManagement"_ustr,
|
|
u"DisablePrinting"_ustr );
|
|
mxData->mnDisablePrinting = aEnable.equalsIgnoreAsciiCase("true") ? TRISTATE_TRUE : TRISTATE_FALSE;
|
|
}
|
|
|
|
return mxData->mnDisablePrinting != TRISTATE_FALSE;
|
|
}
|
|
|
|
bool MiscSettings::GetEnableATToolSupport()
|
|
{
|
|
static const char* pEnv = getenv("SAL_ACCESSIBILITY_ENABLED");
|
|
if (pEnv && *pEnv)
|
|
return pEnv[0] != '0';
|
|
|
|
ImplSVData* pSVData = ImplGetSVData();
|
|
return pSVData->mxAccessBridge.is();
|
|
}
|
|
|
|
void MiscSettings::SetEnableLocalizedDecimalSep( bool bEnable )
|
|
{
|
|
// copy if other references exist
|
|
if (mxData.use_count() > 1)
|
|
{
|
|
mxData = std::make_shared<ImplMiscData>(*mxData);
|
|
}
|
|
mxData->mbEnableLocalizedDecimalSep = bEnable;
|
|
}
|
|
|
|
bool MiscSettings::GetEnableLocalizedDecimalSep() const
|
|
{
|
|
return mxData->mbEnableLocalizedDecimalSep;
|
|
}
|
|
|
|
int MiscSettings::GetDarkMode()
|
|
{
|
|
return officecfg::Office::Common::Appearance::ApplicationAppearance::get();
|
|
}
|
|
|
|
void MiscSettings::SetDarkMode(int nMode)
|
|
{
|
|
std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create());
|
|
officecfg::Office::Common::Appearance::ApplicationAppearance::set(nMode, batch);
|
|
batch->commit();
|
|
|
|
vcl::Window *pWin = Application::GetFirstTopLevelWindow();
|
|
while (pWin)
|
|
{
|
|
pWin->ImplGetFrame()->UpdateDarkMode();
|
|
pWin = Application::GetNextTopLevelWindow(pWin);
|
|
}
|
|
}
|
|
|
|
bool MiscSettings::GetUseDarkMode()
|
|
{
|
|
vcl::Window* pDefWindow = ImplGetDefaultWindow();
|
|
if (pDefWindow == nullptr)
|
|
return false;
|
|
return pDefWindow->ImplGetFrame()->GetUseDarkMode();
|
|
}
|
|
|
|
int MiscSettings::GetAppColorMode()
|
|
{
|
|
if (comphelper::IsFuzzing())
|
|
return 0;
|
|
return officecfg::Office::Common::Appearance::ApplicationAppearance::get();
|
|
}
|
|
|
|
void MiscSettings::SetAppColorMode(int nMode)
|
|
{
|
|
std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create());
|
|
officecfg::Office::Common::Appearance::ApplicationAppearance::set(nMode, batch);
|
|
batch->commit();
|
|
}
|
|
|
|
bool MiscSettings::GetUseReducedAnimation()
|
|
{
|
|
vcl::Window* pDefWindow = ImplGetDefaultWindow();
|
|
if (pDefWindow == nullptr)
|
|
return false;
|
|
return pDefWindow->ImplGetFrame()->GetUseReducedAnimation();
|
|
}
|
|
|
|
// tdf#115688: Let the user choose in the accessibility option page ("Tools" --> "Options" --> "Accessibility --> "Allow other animations") if the "marching ants" animation is allowed.
|
|
// tdf#161765: Let the user choose which animation settings to use: OS's / LO's
|
|
// New options: "System"/"No"/"Yes".
|
|
// Do respect OS's animation setting if the user has selected the option "System"
|
|
bool MiscSettings::IsAnimatedOthersAllowed()
|
|
{
|
|
sal_Int16 nAllowAnimatedOthers = officecfg::Office::Common::Accessibility::AllowAnimatedOthers::get();
|
|
bool bIsAllowed = false; // false is the default value, if someone sets the enum to other values than the allowed ones.
|
|
switch (nAllowAnimatedOthers)
|
|
{
|
|
case 0: // "System": Use OS's setting
|
|
bIsAllowed = ! MiscSettings::GetUseReducedAnimation();
|
|
break;
|
|
case 1: // "No": Disallow animation
|
|
bIsAllowed = false;
|
|
break;
|
|
case 2: // "Yes": Allow animation
|
|
bIsAllowed = true;
|
|
break;
|
|
default:
|
|
SAL_WARN( "accessibility", "Invalid value of AllowAnimatedOthers: 0x" << std::hex << nAllowAnimatedOthers << std::dec);
|
|
break;
|
|
}
|
|
return bIsAllowed;
|
|
}
|
|
|
|
// tdf#161765: Let the user choose which animation settings to use: OS's / LO's
|
|
// New options: "System"/"No"/"Yes".
|
|
// Do respect OS's animation setting if the user has selected the option "System"
|
|
bool MiscSettings::IsAnimatedGraphicAllowed()
|
|
{
|
|
sal_Int16 nAllowAnimatedGraphic = officecfg::Office::Common::Accessibility::AllowAnimatedGraphic::get();
|
|
bool bIsAllowed = false; // false is the default value, if someone sets the enum to other values than the allowed ones.
|
|
switch (nAllowAnimatedGraphic)
|
|
{
|
|
case 0: // "System": Use OS's setting
|
|
bIsAllowed = ! MiscSettings::GetUseReducedAnimation();
|
|
break;
|
|
case 1: // "No": Disallow animation
|
|
bIsAllowed = false;
|
|
break;
|
|
case 2: // "Yes": Allow animation
|
|
bIsAllowed = true;
|
|
break;
|
|
default:
|
|
SAL_WARN( "accessibility", "Invalid value of officecfg::Office::Common::Accessibility::AllowAnimatedGraphic: 0x" << std::hex << nAllowAnimatedGraphic << std::dec);
|
|
break;
|
|
}
|
|
return bIsAllowed;
|
|
}
|
|
|
|
// tdf#161765: Let the user choose which animation settings to use: OS's / LO's
|
|
// New options: "System"/"No"/"Yes".
|
|
// Do respect OS's animation setting if the user has selected the option "System"
|
|
bool MiscSettings::IsAnimatedTextAllowed()
|
|
{
|
|
sal_Int16 nAllowAnimatedText = officecfg::Office::Common::Accessibility::AllowAnimatedText::get();
|
|
bool bIsAllowed = false; // false is the default value, if someone sets the enum to other values than the allowed ones.
|
|
switch (nAllowAnimatedText)
|
|
{
|
|
case 0: // "System": Use OS's setting
|
|
bIsAllowed = ! MiscSettings::GetUseReducedAnimation();
|
|
break;
|
|
case 1: // "No": Disallow animation
|
|
bIsAllowed = false;
|
|
break;
|
|
case 2: // "Yes": Allow animation
|
|
bIsAllowed = true;
|
|
break;
|
|
default:
|
|
SAL_WARN( "accessibility", "Invalid value of officecfg::Office::Common::Accessibility::AllowAnimatedText: 0x" << std::hex << nAllowAnimatedText << std::dec);
|
|
break;
|
|
}
|
|
return bIsAllowed;
|
|
}
|
|
|
|
HelpSettings::HelpSettings()
|
|
: mxData(std::make_shared<ImplHelpData>())
|
|
{
|
|
}
|
|
|
|
bool HelpSettings::operator ==( const HelpSettings& rSet ) const
|
|
{
|
|
if ( mxData == rSet.mxData )
|
|
return true;
|
|
|
|
return (mxData->mnTipTimeout == rSet.mxData->mnTipTimeout );
|
|
}
|
|
|
|
sal_Int32
|
|
HelpSettings::GetTipDelay()
|
|
{
|
|
return 500;
|
|
}
|
|
|
|
void
|
|
HelpSettings::SetTipTimeout( sal_Int32 nTipTimeout )
|
|
{
|
|
// copy if other references exist
|
|
if (mxData.use_count() > 1)
|
|
{
|
|
mxData = std::make_shared<ImplHelpData>(*mxData);
|
|
}
|
|
mxData->mnTipTimeout = nTipTimeout;
|
|
}
|
|
|
|
sal_Int32
|
|
HelpSettings::GetTipTimeout() const
|
|
{
|
|
return mxData->mnTipTimeout;
|
|
}
|
|
|
|
sal_Int32
|
|
HelpSettings::GetBalloonDelay()
|
|
{
|
|
return 1500;
|
|
}
|
|
|
|
bool
|
|
HelpSettings::operator !=( const HelpSettings& rSet ) const
|
|
{
|
|
return !(*this == rSet);
|
|
}
|
|
|
|
ImplAllSettingsData::ImplAllSettingsData()
|
|
:
|
|
maLocale( maSysLocale.GetLanguageTag() ),
|
|
maUILocale( maSysLocale.GetUILanguageTag() )
|
|
{
|
|
if (!comphelper::IsFuzzing())
|
|
maMiscSettings.SetEnableLocalizedDecimalSep( maSysLocale.GetOptions().IsDecimalSeparatorAsLocale() );
|
|
}
|
|
|
|
ImplAllSettingsData::ImplAllSettingsData( const ImplAllSettingsData& rData ) :
|
|
maMouseSettings( rData.maMouseSettings ),
|
|
maStyleSettings( rData.maStyleSettings ),
|
|
maMiscSettings( rData.maMiscSettings ),
|
|
maHelpSettings( rData.maHelpSettings ),
|
|
maLocale( rData.maLocale ),
|
|
maUILocale( rData.maUILocale )
|
|
{
|
|
// Create the cache objects new when their getter is called.
|
|
}
|
|
|
|
ImplAllSettingsData::~ImplAllSettingsData()
|
|
{
|
|
mpLocaleDataWrapper.reset();
|
|
mpUILocaleDataWrapper.reset();
|
|
mpNeutralLocaleDataWrapper.reset();
|
|
mpI18nHelper.reset();
|
|
mpUII18nHelper.reset();
|
|
}
|
|
|
|
AllSettings::AllSettings() = default;
|
|
AllSettings::AllSettings(const AllSettings&) = default;
|
|
AllSettings::~AllSettings() = default;
|
|
AllSettings& AllSettings::operator=(const AllSettings&) = default;
|
|
|
|
AllSettingsFlags AllSettings::Update( AllSettingsFlags nFlags, const AllSettings& rSet )
|
|
{
|
|
const auto* constData = std::as_const(mxData).get();
|
|
AllSettingsFlags nChangeFlags = AllSettingsFlags::NONE;
|
|
|
|
if ( nFlags & AllSettingsFlags::MOUSE )
|
|
{
|
|
if (constData->maMouseSettings != rSet.mxData->maMouseSettings)
|
|
{
|
|
mxData->maMouseSettings = rSet.mxData->maMouseSettings;
|
|
nChangeFlags |= AllSettingsFlags::MOUSE;
|
|
}
|
|
}
|
|
|
|
if ( nFlags & AllSettingsFlags::STYLE )
|
|
{
|
|
if (constData->maStyleSettings != rSet.mxData->maStyleSettings)
|
|
{
|
|
mxData->maStyleSettings = rSet.mxData->maStyleSettings;
|
|
nChangeFlags |= AllSettingsFlags::STYLE;
|
|
}
|
|
}
|
|
|
|
if ( nFlags & AllSettingsFlags::MISC )
|
|
{
|
|
if (constData->maMiscSettings != rSet.mxData->maMiscSettings)
|
|
{
|
|
mxData->maMiscSettings = rSet.mxData->maMiscSettings;
|
|
nChangeFlags |= AllSettingsFlags::MISC;
|
|
}
|
|
}
|
|
|
|
if ( nFlags & AllSettingsFlags::LOCALE )
|
|
{
|
|
if (constData->maLocale != rSet.mxData->maLocale)
|
|
{
|
|
SetLanguageTag( rSet.mxData->maLocale );
|
|
nChangeFlags |= AllSettingsFlags::LOCALE;
|
|
}
|
|
}
|
|
|
|
return nChangeFlags;
|
|
}
|
|
|
|
AllSettingsFlags AllSettings::GetChangeFlags( const AllSettings& rSet ) const
|
|
{
|
|
|
|
AllSettingsFlags nChangeFlags = AllSettingsFlags::NONE;
|
|
|
|
if ( mxData->maStyleSettings != rSet.mxData->maStyleSettings )
|
|
nChangeFlags |= AllSettingsFlags::STYLE;
|
|
|
|
if ( mxData->maMiscSettings != rSet.mxData->maMiscSettings )
|
|
nChangeFlags |= AllSettingsFlags::MISC;
|
|
|
|
if ( mxData->maLocale != rSet.mxData->maLocale )
|
|
nChangeFlags |= AllSettingsFlags::LOCALE;
|
|
|
|
return nChangeFlags;
|
|
}
|
|
|
|
// Until Clang 14, P2085R0 is unsupported, and the operator can't be default outside of declaration
|
|
bool AllSettings::operator ==( const AllSettings& rSet ) const
|
|
{
|
|
return mxData == rSet.mxData;
|
|
}
|
|
|
|
bool ImplAllSettingsData::operator==(const ImplAllSettingsData& rSet) const
|
|
{
|
|
return (maMouseSettings == rSet.maMouseSettings) &&
|
|
(maStyleSettings == rSet.maStyleSettings) &&
|
|
(maMiscSettings == rSet.maMiscSettings) &&
|
|
(maHelpSettings == rSet.maHelpSettings) &&
|
|
(maLocale == rSet.maLocale);
|
|
}
|
|
|
|
void AllSettings::SetLanguageTag(const OUString& rLanguage, bool bCanonicalize)
|
|
{
|
|
SetLanguageTag(LanguageTag(rLanguage, bCanonicalize));
|
|
}
|
|
|
|
void AllSettings::SetLanguageTag( const LanguageTag& rLanguageTag )
|
|
{
|
|
if (std::as_const(mxData)->maLocale == rLanguageTag)
|
|
return;
|
|
|
|
auto* myData = mxData.get();
|
|
|
|
myData->maLocale
|
|
= rLanguageTag.isSystemLocale() ? GetSysLocale().GetLanguageTag() : rLanguageTag;
|
|
|
|
if ( myData->mpLocaleDataWrapper )
|
|
{
|
|
myData->mpLocaleDataWrapper.reset();
|
|
}
|
|
if ( myData->mpI18nHelper )
|
|
{
|
|
myData->mpI18nHelper.reset();
|
|
}
|
|
}
|
|
|
|
namespace
|
|
{
|
|
bool GetConfigLayoutRTL(bool bMath)
|
|
{
|
|
static const char* pEnv = getenv("SAL_RTL_ENABLED" );
|
|
static int nUIMirroring = -1; // -1: undef, 0: auto, 1: on 2: off
|
|
|
|
// environment always overrides
|
|
if( pEnv )
|
|
return true;
|
|
|
|
bool bRTL = false;
|
|
|
|
if( nUIMirroring == -1 )
|
|
{
|
|
nUIMirroring = 0; // ask configuration only once
|
|
utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithComponentContext(
|
|
comphelper::getProcessComponentContext(),
|
|
u"org.openoffice.Office.Common/I18N/CTL"_ustr ); // note: case sensitive !
|
|
if ( aNode.isValid() )
|
|
{
|
|
bool bTmp = bool();
|
|
css::uno::Any aValue = aNode.getNodeValue( u"UIMirroring"_ustr );
|
|
if( aValue >>= bTmp )
|
|
{
|
|
// found true or false; if it was nil, nothing is changed
|
|
nUIMirroring = bTmp ? 1 : 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
if( nUIMirroring == 0 ) // no config found (eg, setup) or default (nil) was set: check language
|
|
{
|
|
LanguageType aLang = SvtSysLocaleOptions().GetRealUILanguageTag().getLanguageType();
|
|
if (bMath)
|
|
bRTL = MsLangId::isRightToLeftMath( aLang );
|
|
else
|
|
bRTL = MsLangId::isRightToLeft( aLang );
|
|
}
|
|
else
|
|
bRTL = (nUIMirroring == 1);
|
|
|
|
return bRTL;
|
|
}
|
|
}
|
|
|
|
bool AllSettings::GetLayoutRTL()
|
|
{
|
|
if (comphelper::IsFuzzing())
|
|
return false;
|
|
return GetConfigLayoutRTL(false);
|
|
}
|
|
|
|
bool AllSettings::GetMathLayoutRTL()
|
|
{
|
|
if (comphelper::IsFuzzing())
|
|
return false;
|
|
return GetConfigLayoutRTL(true);
|
|
}
|
|
|
|
const LanguageTag& AllSettings::GetLanguageTag() const
|
|
{
|
|
if (comphelper::IsFuzzing())
|
|
{
|
|
static LanguageTag aRet(u"en-US"_ustr);
|
|
return aRet;
|
|
}
|
|
|
|
if (comphelper::LibreOfficeKit::isActive())
|
|
return comphelper::LibreOfficeKit::getLanguageTag();
|
|
|
|
assert(!mxData->maLocale.isSystemLocale());
|
|
|
|
return mxData->maLocale;
|
|
}
|
|
|
|
const LanguageTag& AllSettings::GetUILanguageTag() const
|
|
{
|
|
if (comphelper::IsFuzzing())
|
|
{
|
|
static LanguageTag aRet(u"en-US"_ustr);
|
|
return aRet;
|
|
}
|
|
|
|
if (comphelper::LibreOfficeKit::isActive())
|
|
return comphelper::LibreOfficeKit::getLanguageTag();
|
|
|
|
assert(!mxData->maUILocale.isSystemLocale());
|
|
|
|
return mxData->maUILocale;
|
|
}
|
|
|
|
const LocaleDataWrapper& AllSettings::GetLocaleDataWrapper() const
|
|
{
|
|
if ( !mxData->mpLocaleDataWrapper )
|
|
mxData->mpLocaleDataWrapper.reset( new LocaleDataWrapper(
|
|
comphelper::getProcessComponentContext(), GetLanguageTag() ) );
|
|
return *mxData->mpLocaleDataWrapper;
|
|
}
|
|
|
|
const LocaleDataWrapper& AllSettings::GetUILocaleDataWrapper() const
|
|
{
|
|
if ( !mxData->mpUILocaleDataWrapper )
|
|
mxData->mpUILocaleDataWrapper.reset( new LocaleDataWrapper(
|
|
comphelper::getProcessComponentContext(), GetUILanguageTag() ) );
|
|
return *mxData->mpUILocaleDataWrapper;
|
|
}
|
|
|
|
const LocaleDataWrapper& AllSettings::GetNeutralLocaleDataWrapper() const
|
|
{
|
|
if ( !mxData->mpNeutralLocaleDataWrapper )
|
|
mxData->mpNeutralLocaleDataWrapper.reset( new LocaleDataWrapper(
|
|
comphelper::getProcessComponentContext(), LanguageTag(u"en-US"_ustr) ) );
|
|
return *mxData->mpNeutralLocaleDataWrapper;
|
|
}
|
|
|
|
const vcl::I18nHelper& AllSettings::GetLocaleI18nHelper() const
|
|
{
|
|
if ( !mxData->mpI18nHelper ) {
|
|
mxData->mpI18nHelper.reset( new vcl::I18nHelper(
|
|
comphelper::getProcessComponentContext(), GetLanguageTag() ) );
|
|
}
|
|
return *mxData->mpI18nHelper;
|
|
}
|
|
|
|
const vcl::I18nHelper& AllSettings::GetUILocaleI18nHelper() const
|
|
{
|
|
if ( !mxData->mpUII18nHelper ) {
|
|
mxData->mpUII18nHelper.reset( new vcl::I18nHelper(
|
|
comphelper::getProcessComponentContext(), GetUILanguageTag() ) );
|
|
}
|
|
return *mxData->mpUII18nHelper;
|
|
}
|
|
|
|
void AllSettings::LocaleSettingsChanged( ConfigurationHints nHint )
|
|
{
|
|
AllSettings aAllSettings( Application::GetSettings() );
|
|
if ( nHint & ConfigurationHints::DecSep )
|
|
{
|
|
MiscSettings aMiscSettings = aAllSettings.GetMiscSettings();
|
|
bool bIsDecSepAsLocale = aAllSettings.GetSysLocale().GetOptions().IsDecimalSeparatorAsLocale();
|
|
if ( aMiscSettings.GetEnableLocalizedDecimalSep() != bIsDecSepAsLocale )
|
|
{
|
|
aMiscSettings.SetEnableLocalizedDecimalSep( bIsDecSepAsLocale );
|
|
aAllSettings.SetMiscSettings( aMiscSettings );
|
|
}
|
|
}
|
|
|
|
if ( nHint & ConfigurationHints::Locale )
|
|
aAllSettings.SetLanguageTag(aAllSettings.GetSysLocale().GetOptions().GetLanguageTag());
|
|
|
|
Application::SetSettings( aAllSettings );
|
|
}
|
|
|
|
const StyleSettings&
|
|
AllSettings::GetStyleSettings() const
|
|
{
|
|
return mxData->maStyleSettings;
|
|
}
|
|
|
|
StyleSettingsOptions
|
|
StyleSettings::GetOptions() const
|
|
{
|
|
return mxData->mnOptions;
|
|
}
|
|
|
|
std::vector<vcl::IconThemeInfo> const &
|
|
StyleSettings::GetInstalledIconThemes() const
|
|
{
|
|
if (!mxData->mIconThemeScanner) {
|
|
mxData->mIconThemeScanner.emplace(vcl::IconThemeScanner::GetStandardIconThemePath());
|
|
}
|
|
return mxData->mIconThemeScanner->GetFoundIconThemes();
|
|
}
|
|
|
|
OUString
|
|
StyleSettings::GetAutomaticallyChosenIconTheme() const
|
|
{
|
|
return mxData->mIconThemeSelector.SelectIconThemeForDesktopEnvironment(
|
|
GetInstalledIconThemes(),
|
|
Application::GetDesktopEnvironment());
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetIconTheme(const OUString& theme)
|
|
{
|
|
mxData->mIconTheme = theme;
|
|
}
|
|
|
|
OUString
|
|
StyleSettings::DetermineIconTheme() const
|
|
{
|
|
OUString sTheme(mxData->mIconTheme);
|
|
if (sTheme.isEmpty())
|
|
{
|
|
if (comphelper::IsFuzzing())
|
|
sTheme = "colibre";
|
|
else
|
|
{
|
|
// read from the configuration, or fallback to what the desktop wants
|
|
sTheme = officecfg::Office::Common::Misc::SymbolStyle::get();
|
|
|
|
if (sTheme.isEmpty() || sTheme == "auto")
|
|
sTheme = GetAutomaticallyChosenIconTheme();
|
|
}
|
|
}
|
|
|
|
return mxData->mIconThemeSelector.SelectIconTheme(
|
|
GetInstalledIconThemes(),
|
|
sTheme);
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetHighContrastMode(bool bHighContrast )
|
|
{
|
|
if (std::as_const(mxData)->mbHighContrast == bHighContrast) {
|
|
return;
|
|
}
|
|
|
|
auto* myData = mxData.get();
|
|
myData->mbHighContrast = bHighContrast;
|
|
myData->mIconThemeSelector.SetUseHighContrastTheme(bHighContrast);
|
|
}
|
|
|
|
bool
|
|
StyleSettings::GetHighContrastMode() const
|
|
{
|
|
return mxData->mbHighContrast;
|
|
}
|
|
|
|
void
|
|
StyleSettings::SetPreferredIconTheme(const OUString& theme, bool bDarkIconTheme)
|
|
{
|
|
auto* myData = mxData.get();
|
|
const bool bChanged = myData->mIconThemeSelector.SetPreferredIconTheme(theme, bDarkIconTheme);
|
|
if (bChanged)
|
|
{
|
|
// clear this so it is recalculated if it was selected as the automatic theme
|
|
myData->mIconTheme.clear();
|
|
}
|
|
}
|
|
|
|
void
|
|
AllSettings::SetMouseSettings( const MouseSettings& rSet )
|
|
{
|
|
mxData->maMouseSettings = rSet;
|
|
}
|
|
|
|
const MouseSettings&
|
|
AllSettings::GetMouseSettings() const
|
|
{
|
|
return mxData->maMouseSettings;
|
|
}
|
|
|
|
void
|
|
AllSettings::SetStyleSettings( const StyleSettings& rSet )
|
|
{
|
|
mxData->maStyleSettings = rSet;
|
|
}
|
|
|
|
void
|
|
AllSettings::SetMiscSettings( const MiscSettings& rSet )
|
|
{
|
|
mxData->maMiscSettings = rSet;
|
|
}
|
|
|
|
const MiscSettings&
|
|
AllSettings::GetMiscSettings() const
|
|
{
|
|
return mxData->maMiscSettings;
|
|
}
|
|
|
|
void
|
|
AllSettings::SetHelpSettings( const HelpSettings& rSet )
|
|
{
|
|
mxData->maHelpSettings = rSet;
|
|
}
|
|
|
|
const HelpSettings&
|
|
AllSettings::GetHelpSettings() const
|
|
{
|
|
return mxData->maHelpSettings;
|
|
}
|
|
|
|
const SvtSysLocale&
|
|
AllSettings::GetSysLocale() const
|
|
{
|
|
return mxData->maSysLocale;
|
|
}
|
|
|
|
|
|
void StyleSettings::BatchSetBackgrounds( const Color &aBackColor,
|
|
bool bCheckedColorSpecialCase )
|
|
{
|
|
Set3DColors( aBackColor );
|
|
SetFaceColor( aBackColor );
|
|
SetDialogColor( aBackColor );
|
|
SetWorkspaceColor( aBackColor );
|
|
|
|
if (bCheckedColorSpecialCase)
|
|
SetCheckedColorSpecialCase();
|
|
}
|
|
|
|
void StyleSettings::BatchSetFonts( const vcl::Font& aAppFont,
|
|
const vcl::Font& aLabelFont )
|
|
{
|
|
SetAppFont( aAppFont );
|
|
SetPushButtonFont( aAppFont );
|
|
SetToolFont( aAppFont );
|
|
SetHelpFont( aAppFont );
|
|
|
|
SetMenuFont( aLabelFont );
|
|
SetTabFont( aLabelFont );
|
|
SetLabelFont( aLabelFont );
|
|
SetRadioCheckFont( aLabelFont );
|
|
SetFieldFont( aLabelFont );
|
|
SetGroupFont( aLabelFont );
|
|
SetIconFont( aLabelFont );
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|