layout/mathml/nsMathMLmencloseFrame.h

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     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/. */
     7 #ifndef nsMathMLmencloseFrame_h___
     8 #define nsMathMLmencloseFrame_h___
    10 #include "mozilla/Attributes.h"
    11 #include "nsMathMLContainerFrame.h"
    13 //
    14 // <menclose> -- enclose content with a stretching symbol such
    15 // as a long division sign.
    16 //
    18 /*
    19   The MathML REC describes:
    21   The menclose element renders its content inside the enclosing notation
    22   specified by its notation attribute. menclose accepts any number of arguments;
    23   if this number is not 1, its contents are treated as a single "inferred mrow"
    24   containing its arguments, as described in Section 3.1.3 Required Arguments. 
    25 */
    27 enum nsMencloseNotation
    28   {
    29     NOTATION_LONGDIV = 0x1,
    30     NOTATION_RADICAL = 0x2,
    31     NOTATION_ROUNDEDBOX = 0x4,
    32     NOTATION_CIRCLE = 0x8,
    33     NOTATION_LEFT = 0x10,
    34     NOTATION_RIGHT = 0x20,
    35     NOTATION_TOP = 0x40,
    36     NOTATION_BOTTOM = 0x80,
    37     NOTATION_UPDIAGONALSTRIKE = 0x100,
    38     NOTATION_DOWNDIAGONALSTRIKE = 0x200,
    39     NOTATION_VERTICALSTRIKE = 0x400,
    40     NOTATION_HORIZONTALSTRIKE = 0x800,
    41     NOTATION_UPDIAGONALARROW = 0x1000
    42   };
    44 class nsMathMLmencloseFrame : public nsMathMLContainerFrame {
    45 public:
    46   NS_DECL_FRAMEARENA_HELPERS
    48   friend nsIFrame* NS_NewMathMLmencloseFrame(nsIPresShell*   aPresShell,
    49                                              nsStyleContext* aContext);
    51   virtual nsresult
    52   Place(nsRenderingContext& aRenderingContext,
    53         bool                 aPlaceOrigin,
    54         nsHTMLReflowMetrics& aDesiredSize) MOZ_OVERRIDE;
    56   virtual nsresult
    57   MeasureForWidth(nsRenderingContext& aRenderingContext,
    58                   nsHTMLReflowMetrics& aDesiredSize) MOZ_OVERRIDE;
    60   virtual nsresult
    61   AttributeChanged(int32_t         aNameSpaceID,
    62                    nsIAtom*        aAttribute,
    63                    int32_t         aModType) MOZ_OVERRIDE;
    65   virtual void
    66   SetAdditionalStyleContext(int32_t          aIndex, 
    67                             nsStyleContext*  aStyleContext) MOZ_OVERRIDE;
    68   virtual nsStyleContext*
    69   GetAdditionalStyleContext(int32_t aIndex) const MOZ_OVERRIDE;
    71   virtual void BuildDisplayList(nsDisplayListBuilder*   aBuilder,
    72                                 const nsRect&           aDirtyRect,
    73                                 const nsDisplayListSet& aLists) MOZ_OVERRIDE;
    75   NS_IMETHOD
    76   InheritAutomaticData(nsIFrame* aParent) MOZ_OVERRIDE;
    78   NS_IMETHOD
    79   TransmitAutomaticData() MOZ_OVERRIDE;
    81   virtual nscoord
    82   FixInterFrameSpacing(nsHTMLReflowMetrics& aDesiredSize) MOZ_OVERRIDE;
    84   bool
    85   IsMrowLike() MOZ_OVERRIDE {
    86     return mFrames.FirstChild() != mFrames.LastChild() ||
    87            !mFrames.FirstChild();
    88   }
    90 protected:
    91   nsMathMLmencloseFrame(nsStyleContext* aContext);
    92   virtual ~nsMathMLmencloseFrame();
    94   nsresult PlaceInternal(nsRenderingContext& aRenderingContext,
    95                          bool                 aPlaceOrigin,
    96                          nsHTMLReflowMetrics& aDesiredSize,
    97                          bool                 aWidthOnly);
    99   // functions to parse the "notation" attribute.
   100   nsresult AddNotation(const nsAString& aNotation);
   101   void InitNotations();
   103   // Description of the notations to draw
   104   uint32_t mNotationsToDraw;
   105   bool IsToDraw(nsMencloseNotation mask)
   106   {
   107     return mask & mNotationsToDraw;
   108   }
   110   nscoord mRuleThickness;
   111   nsTArray<nsMathMLChar> mMathMLChar;
   112   int8_t mLongDivCharIndex, mRadicalCharIndex;
   113   nscoord mContentWidth;
   114   nsresult AllocateMathMLChar(nsMencloseNotation mask);
   116   // Display a frame of the specified type.
   117   // @param aType Type of frame to display
   118   void DisplayNotation(nsDisplayListBuilder* aBuilder,
   119                        nsIFrame* aFrame, const nsRect& aRect,
   120                        const nsDisplayListSet& aLists,
   121                        nscoord aThickness, nsMencloseNotation aType);
   122 };
   124 #endif /* nsMathMLmencloseFrame_h___ */

mercurial