author Samael Wang <>
Fri, 24 Mar 2017 15:10:07 +0800
changeset 393130 cbc61557e638cec7ce467956ed6525f93ef0441f
parent 378266 f1588f6e50d2ea673225478083969ec81b985c2c
child 395963 396da770127f3b1aae4a5044e37e34981a050b40
permissions -rw-r--r--
Bug 1283947 - Clear pending transactions when ClientLayerManager is assigning to a different refresh driver. r=mattwoodrow a=gchang

/* -*- 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 */

#ifndef nsFieldSetFrame_h___
#define nsFieldSetFrame_h___

#include "mozilla/Attributes.h"
#include "DrawResult.h"
#include "nsContainerFrame.h"

class nsFieldSetFrame final : public nsContainerFrame
  typedef mozilla::image::DrawResult DrawResult;


  explicit nsFieldSetFrame(nsStyleContext* aContext);

    GetIntrinsicISize(nsRenderingContext* aRenderingContext,
  virtual nscoord GetMinISize(nsRenderingContext* aRenderingContext) override;
  virtual nscoord GetPrefISize(nsRenderingContext* aRenderingContext) override;

   * The area to paint box-shadows around.  It's the border rect except
   * when there's a <legend> we offset the y-position to the center of it.
  virtual nsRect VisualBorderRectRelativeToSelf() const override;

  virtual void Reflow(nsPresContext*           aPresContext,
                      ReflowOutput&     aDesiredSize,
                      const ReflowInput& aReflowInput,
                      nsReflowStatus&          aStatus) override;
  nscoord GetLogicalBaseline(mozilla::WritingMode aWM) const override;
  bool GetVerticalAlignBaseline(mozilla::WritingMode aWM,
                                nscoord* aBaseline) const override;
  bool GetNaturalBaselineBOffset(mozilla::WritingMode aWM,
                                 BaselineSharingGroup aBaselineGroup,
                                 nscoord* aBaseline) const override;

  virtual void BuildDisplayList(nsDisplayListBuilder*   aBuilder,
                                const nsRect&           aDirtyRect,
                                const nsDisplayListSet& aLists) override;

  DrawResult PaintBorder(nsDisplayListBuilder* aBuilder,
                         nsRenderingContext& aRenderingContext,
                         nsPoint aPt, const nsRect& aDirtyRect);

#ifdef DEBUG
  virtual void SetInitialChildList(ChildListID    aListID,
                                   nsFrameList&   aChildList) override;
  virtual void AppendFrames(ChildListID    aListID,
                            nsFrameList&   aFrameList) override;
  virtual void InsertFrames(ChildListID    aListID,
                            nsIFrame*      aPrevFrame,
                            nsFrameList&   aFrameList) override;
  virtual void RemoveFrame(ChildListID    aListID,
                           nsIFrame*      aOldFrame) override;

  virtual nsIAtom* GetType() const override;
  virtual bool IsFrameOfType(uint32_t aFlags) const override
    return nsContainerFrame::IsFrameOfType(aFlags &
  virtual nsIScrollableFrame* GetScrollTargetFrame() override
    return do_QueryFrame(GetInner());

  virtual mozilla::a11y::AccType AccessibleType() override;

  virtual nsresult GetFrameName(nsAString& aResult) const override {
    return MakeFrameName(NS_LITERAL_STRING("FieldSet"), aResult);

   * Return the anonymous frame that contains all descendants except
   * the legend frame.  This is currently always a block frame with
   * pseudo nsCSSAnonBoxes::fieldsetContent -- this may change in the
   * future when we add support for CSS overflow for <fieldset>.
  nsIFrame* GetInner() const;

   * Return the frame that represents the legend if any.  This may be
   * a nsLegendFrame or a nsHTMLScrollFrame with the nsLegendFrame as the
   * scrolled frame (aka content insertion frame).
  nsIFrame* GetLegend() const;

  mozilla::LogicalRect mLegendRect;
  nscoord   mLegendSpace;

#endif // nsFieldSetFrame_h___