summaryrefslogtreecommitdiffstats
path: root/layout/style/nsMediaFeatures.h
diff options
context:
space:
mode:
Diffstat (limited to 'layout/style/nsMediaFeatures.h')
-rw-r--r--layout/style/nsMediaFeatures.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/layout/style/nsMediaFeatures.h b/layout/style/nsMediaFeatures.h
new file mode 100644
index 000000000..76e94837d
--- /dev/null
+++ b/layout/style/nsMediaFeatures.h
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+/* the features that media queries can test */
+
+#ifndef nsMediaFeatures_h_
+#define nsMediaFeatures_h_
+
+#include "nsCSSProps.h"
+
+class nsIAtom;
+class nsPresContext;
+class nsCSSValue;
+
+struct nsMediaFeature;
+typedef nsresult
+(* nsMediaFeatureValueGetter)(nsPresContext* aPresContext,
+ const nsMediaFeature* aFeature,
+ nsCSSValue& aResult);
+
+struct nsMediaFeature
+{
+ nsIAtom **mName; // extra indirection to point to nsGkAtoms members
+
+ enum RangeType { eMinMaxAllowed, eMinMaxNotAllowed };
+ RangeType mRangeType;
+
+ enum ValueType {
+ // All value types allow eCSSUnit_Null to indicate that no value
+ // was given (in addition to the types listed below).
+ eLength, // values are such that nsCSSValue::IsLengthUnit() is true
+ eInteger, // values are eCSSUnit_Integer
+ eFloat, // values are eCSSUnit_Number
+ eBoolInteger,// values are eCSSUnit_Integer (0, -0, or 1 only)
+ eIntRatio, // values are eCSSUnit_Array of two eCSSUnit_Integer
+ eResolution, // values are in eCSSUnit_Inch (for dpi),
+ // eCSSUnit_Pixel (for dppx), or
+ // eCSSUnit_Centimeter (for dpcm)
+ eEnumerated, // values are eCSSUnit_Enumerated (uses keyword table)
+ eIdent // values are eCSSUnit_Ident
+ // Note that a number of pieces of code (both for parsing and
+ // for matching of valueless expressions) assume that all numeric
+ // value types cannot be negative. The parsing code also does
+ // not allow zeros in eIntRatio types.
+ };
+ ValueType mValueType;
+
+ enum RequirementFlags : uint8_t {
+ // Bitfield of requirements that must be satisfied in order for this
+ // media feature to be active.
+ eNoRequirements = 0,
+ eHasWebkitPrefix = 1 << 0, // Feature name must start w/ "-webkit-", even
+ // before any "min-"/"max-" qualifier.
+
+ // Feature is only supported if the pref
+ // "layout.css.prefixes.device-pixel-ratio-webkit" is enabled.
+ // (Should only be used for -webkit-device-pixel-ratio.)
+ eWebkitDevicePixelRatioPrefEnabled = 1 << 1
+ };
+ uint8_t mReqFlags;
+
+ union {
+ // In static arrays, it's the first member that's initialized. We
+ // need that to be void* so we can initialize both other types.
+ // This member should never be accessed by name.
+ const void* mInitializer_;
+ // If mValueType == eEnumerated: const int32_t*: keyword table in
+ // the same format as the keyword tables in nsCSSProps.
+ const nsCSSProps::KTableEntry* mKeywordTable;
+ // If mGetter == GetSystemMetric (which implies mValueType ==
+ // eBoolInteger): nsIAtom * const *, for the system metric.
+ nsIAtom * const * mMetric;
+ } mData;
+
+ // A function that returns the current value for this feature for a
+ // given presentation. If it returns eCSSUnit_Null, the feature is
+ // not present.
+ nsMediaFeatureValueGetter mGetter;
+};
+
+class nsMediaFeatures
+{
+public:
+ // Terminated with an entry whose mName is null.
+ static const nsMediaFeature features[];
+};
+
+#endif /* !defined(nsMediaFeatures_h_) */