summaryrefslogtreecommitdiffstats
path: root/widget/nsNativeTheme.h
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /widget/nsNativeTheme.h
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'widget/nsNativeTheme.h')
-rw-r--r--widget/nsNativeTheme.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/widget/nsNativeTheme.h b/widget/nsNativeTheme.h
new file mode 100644
index 000000000..621866db4
--- /dev/null
+++ b/widget/nsNativeTheme.h
@@ -0,0 +1,187 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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 defines a common base class for nsITheme implementations, to reduce
+// code duplication.
+
+#include "nsAlgorithm.h"
+#include "nsIAtom.h"
+#include "nsCOMPtr.h"
+#include "nsString.h"
+#include "nsMargin.h"
+#include "nsGkAtoms.h"
+#include "nsTArray.h"
+#include "nsITimer.h"
+#include "nsIContent.h"
+
+class nsIFrame;
+class nsIPresShell;
+class nsPresContext;
+
+namespace mozilla {
+class EventStates;
+} // namespace mozilla
+
+class nsNativeTheme : public nsITimerCallback
+{
+ protected:
+ virtual ~nsNativeTheme() {}
+
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSITIMERCALLBACK
+
+ enum ScrollbarButtonType {
+ eScrollbarButton_UpTop = 0,
+ eScrollbarButton_Down = 1 << 0,
+ eScrollbarButton_Bottom = 1 << 1
+ };
+
+ enum TreeSortDirection {
+ eTreeSortDirection_Descending,
+ eTreeSortDirection_Natural,
+ eTreeSortDirection_Ascending
+ };
+
+ nsNativeTheme();
+
+ // Returns the content state (hover, focus, etc), see EventStateManager.h
+ mozilla::EventStates GetContentState(nsIFrame* aFrame, uint8_t aWidgetType);
+
+ // Returns whether the widget is already styled by content
+ // Normally called from ThemeSupportsWidget to turn off native theming
+ // for elements that are already styled.
+ bool IsWidgetStyled(nsPresContext* aPresContext, nsIFrame* aFrame,
+ uint8_t aWidgetType);
+
+ // Accessors to widget-specific state information
+
+ bool IsDisabled(nsIFrame* aFrame, mozilla::EventStates aEventStates);
+
+ // RTL chrome direction
+ static bool IsFrameRTL(nsIFrame* aFrame);
+
+ bool IsHTMLContent(nsIFrame *aFrame);
+
+ // button:
+ bool IsDefaultButton(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::_default);
+ }
+
+ bool IsButtonTypeMenu(nsIFrame* aFrame);
+
+ // checkbox:
+ bool IsChecked(nsIFrame* aFrame) {
+ return GetCheckedOrSelected(aFrame, false);
+ }
+
+ // radiobutton:
+ bool IsSelected(nsIFrame* aFrame) {
+ return GetCheckedOrSelected(aFrame, true);
+ }
+
+ bool IsFocused(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::focused);
+ }
+
+ // scrollbar button:
+ int32_t GetScrollbarButtonType(nsIFrame* aFrame);
+
+ // tab:
+ bool IsSelectedTab(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::visuallyselected);
+ }
+
+ bool IsNextToSelectedTab(nsIFrame* aFrame, int32_t aOffset);
+
+ bool IsBeforeSelectedTab(nsIFrame* aFrame) {
+ return IsNextToSelectedTab(aFrame, -1);
+ }
+
+ bool IsAfterSelectedTab(nsIFrame* aFrame) {
+ return IsNextToSelectedTab(aFrame, 1);
+ }
+
+ bool IsLeftToSelectedTab(nsIFrame* aFrame) {
+ return IsFrameRTL(aFrame) ? IsAfterSelectedTab(aFrame) : IsBeforeSelectedTab(aFrame);
+ }
+
+ bool IsRightToSelectedTab(nsIFrame* aFrame) {
+ return IsFrameRTL(aFrame) ? IsBeforeSelectedTab(aFrame) : IsAfterSelectedTab(aFrame);
+ }
+
+ // button / toolbarbutton:
+ bool IsCheckedButton(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::checked);
+ }
+
+ bool IsSelectedButton(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::checked) ||
+ CheckBooleanAttr(aFrame, nsGkAtoms::selected);
+ }
+
+ bool IsOpenButton(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::open);
+ }
+
+ bool IsPressedButton(nsIFrame* aFrame);
+
+ // treeheadercell:
+ TreeSortDirection GetTreeSortDirection(nsIFrame* aFrame);
+ bool IsLastTreeHeaderCell(nsIFrame* aFrame);
+
+ // tab:
+ bool IsBottomTab(nsIFrame* aFrame);
+ bool IsFirstTab(nsIFrame* aFrame);
+
+ bool IsHorizontal(nsIFrame* aFrame);
+
+ // progressbar:
+ bool IsIndeterminateProgress(nsIFrame* aFrame,
+ mozilla::EventStates aEventStates);
+ bool IsVerticalProgress(nsIFrame* aFrame);
+
+ // meter:
+ bool IsVerticalMeter(nsIFrame* aFrame);
+
+ // textfield:
+ bool IsReadOnly(nsIFrame* aFrame) {
+ return CheckBooleanAttr(aFrame, nsGkAtoms::readonly);
+ }
+
+ // menupopup:
+ bool IsSubmenu(nsIFrame* aFrame, bool* aLeftOfParent);
+
+ // True if it's not a menubar item or menulist item
+ bool IsRegularMenuItem(nsIFrame *aFrame);
+
+ bool IsMenuListEditable(nsIFrame *aFrame);
+
+ nsIPresShell *GetPresShell(nsIFrame* aFrame);
+ static bool CheckBooleanAttr(nsIFrame* aFrame, nsIAtom* aAtom);
+ static int32_t CheckIntAttr(nsIFrame* aFrame, nsIAtom* aAtom, int32_t defaultValue);
+
+ // Helpers for progressbar.
+ static double GetProgressValue(nsIFrame* aFrame);
+ static double GetProgressMaxValue(nsIFrame* aFrame);
+
+ bool GetCheckedOrSelected(nsIFrame* aFrame, bool aCheckSelected);
+ bool GetIndeterminate(nsIFrame* aFrame);
+
+ bool QueueAnimatedContentForRefresh(nsIContent* aContent,
+ uint32_t aMinimumFrameRate);
+
+ nsIFrame* GetAdjacentSiblingFrameWithSameAppearance(nsIFrame* aFrame,
+ bool aNextSibling);
+
+ bool IsRangeHorizontal(nsIFrame* aFrame);
+
+ // scrollbar
+ bool IsDarkBackground(nsIFrame* aFrame);
+
+ private:
+ uint32_t mAnimatedContentTimeout;
+ nsCOMPtr<nsITimer> mAnimatedContentTimer;
+ AutoTArray<nsCOMPtr<nsIContent>, 20> mAnimatedContentList;
+};