layout/style/nsMediaFeatures.h

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 /* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /* the features that media queries can test */
     8 #ifndef nsMediaFeatures_h_
     9 #define nsMediaFeatures_h_
    11 #include "nsError.h"
    12 #include "nsCSSProps.h"
    14 class nsIAtom;
    15 class nsPresContext;
    16 class nsCSSValue;
    18 struct nsMediaFeature;
    19 typedef nsresult
    20 (* nsMediaFeatureValueGetter)(nsPresContext* aPresContext,
    21                               const nsMediaFeature* aFeature,
    22                               nsCSSValue& aResult);
    24 struct nsMediaFeature {
    25     nsIAtom **mName; // extra indirection to point to nsGkAtoms members
    27     enum RangeType { eMinMaxAllowed, eMinMaxNotAllowed };
    28     RangeType mRangeType;
    30     enum ValueType {
    31         // All value types allow eCSSUnit_Null to indicate that no value
    32         // was given (in addition to the types listed below).
    33         eLength,     // values are such that nsCSSValue::IsLengthUnit() is true
    34         eInteger,    // values are eCSSUnit_Integer
    35         eFloat,      // values are eCSSUnit_Number
    36         eBoolInteger,// values are eCSSUnit_Integer (0, -0, or 1 only)
    37         eIntRatio,   // values are eCSSUnit_Array of two eCSSUnit_Integer
    38         eResolution, // values are in eCSSUnit_Inch (for dpi),
    39                      //   eCSSUnit_Pixel (for dppx), or
    40                      //   eCSSUnit_Centimeter (for dpcm)
    41         eEnumerated, // values are eCSSUnit_Enumerated (uses keyword table)
    42         eIdent       // values are eCSSUnit_Ident
    43         // Note that a number of pieces of code (both for parsing and
    44         // for matching of valueless expressions) assume that all numeric
    45         // value types cannot be negative.  The parsing code also does
    46         // not allow zeros in eIntRatio types.
    47     };
    48     ValueType mValueType;
    50     union {
    51       // In static arrays, it's the first member that's initialized.  We
    52       // need that to be void* so we can initialize both other types.
    53       // This member should never be accessed by name.
    54       const void* mInitializer_;
    55       // If mValueType == eEnumerated:  const int32_t*: keyword table in
    56       //   the same format as the keyword tables in nsCSSProps.
    57       const nsCSSProps::KTableValue* mKeywordTable;
    58       // If mGetter == GetSystemMetric (which implies mValueType ==
    59       //   eBoolInteger): nsIAtom * const *, for the system metric.
    60       nsIAtom * const * mMetric;
    61     } mData;
    63     // A function that returns the current value for this feature for a
    64     // given presentation.  If it returns eCSSUnit_Null, the feature is
    65     // not present.
    66     nsMediaFeatureValueGetter mGetter;
    67 };
    69 class nsMediaFeatures {
    70 public:
    71     // Terminated with an entry whose mName is null.
    72     static const nsMediaFeature features[];
    73 };
    75 #endif /* !defined(nsMediaFeatures_h_) */

mercurial