Files
palemoon27/layout/generic/nsFrameSetFrame.h
T
roytam1 8fd0c73b26 import changes from `dev' branch of rmottola/Arctic-Fox:
- test part of Bug 789788 - Revise the don't-use-document-fonts option (1b6a0e6ed)
- Bug 1172782 - Change how nsTHashtable::Clear() works. r=froydnj. (c8c2adc51)
- Bug 1180072 - Remove PL_DHashTableEnumerate(). r=froydnj. (b5448efda)
- Bug 1180122 - Make Chaos Mode affect PLDHashTable's iterators. r=froydnj. (11fd0e222)
- Bug 1182516 - Add Chaos Mode environment variable MOZ_CHAOSMODE. r=roc (d636f6c90)
- Bug 1182516 - Fix mid-air conflict with 3fd2ab6cb762 on a CLOSED TREE. r=bustage (8dec46b7a)
- Bug 1184280 - Remove warning about mDisabledJSAndPlugins being false. r=ehsan (c23e96fc1)
- Bug 1181411 - Test some expected aborts in PLDHashTable. r=glandium. (682788df7)
- Bug 1185399 (part 1) - Remove macros from pldhash.h. r=froydnj. (15001ff2a)
- Bug 1185399 (part 2) - Remove macros from pldhash.cpp. r=froydnj. (afeddcc90)
- Bug 1187197 (part 1) - Move comments from PL_DHashTable* functions to the equivalent methods. r=froydnj. (78921590e)
- Bug 1187197 (part 2) - Put function return types on their own line. r=froydnj. (9aae02f83)
- Bug 1187197 (part 3) - Convert pldhash.{cpp,h} to C++ style comments. r=froydnj. (57afe7e1f)
- Bug 1202526 (part 1) - Add PLDHashTable::RemoveEntry(). r=froydnj. (1b5453695)
- Bug 1202526 (part 2) - Avoid PL_DHashTableRawRemove() in nsLoadGroup. r=mcmanus. (1ad20b17f)
- Bug 1202526 (part 3) - Avoid PL_DHashTableRawRemove() in nsDocument. r=bz. (cdde6eff0)
- Bug 1202526 (part 4) - Avoid PL_DHashTableRawRemove() in nsPropertyTable. r=bz. (ed437f4d6)
- Bug 1202526 (part 5) - Use PLDHashTable::RemoveEntry() in nsSecureBrowserUIImpl. r=dkeeler. (ac1d44066)
- Bug 1202526 (part 6) - Use PLDHashTable::RemoveEntry() in XULDocument. r=bz. (2639a053e)
- Bug 1202526 (part 7) - Use PLDHashTable::RemoveEntry() in prefs code. r=bz. (2eb3b1097)
- Bug 1202526 (part 8) - Use PLDHashTable::RemoveEntry() in the cycle collector. r=mccr8. (ec77d7635)
- Bug 1130096 - Convert embedding/components/commandhandler/ to Gecko style. r=mccr8 (a5aecf9de)
- Bug 1184842. Remove layout.frames.force_resizability pref. r=mats (9226b0caf)
- Bug 1184842. Remove frameset mVisibilityOverride since it's always false now. r=mats (1b439feb8)
- Bug 1184842. Change nsAttrAndChildArray::SetAndTakeAttr to nsAttrAndChildArray::SetAndSwapAttr. r=peterv (1442f0eae)
- Bug 1184842. Make SetAttrAndNotify use the real old value instead of aOldValue when possible. r=bz (bc45970f5)
- Bug 1184842. Add aOldValue parameter to nsNodeUtils::AttributeChanged. r=peterv (31bf8c08e)
- Bug 1184842. Pass aOldValue to all mutation observers. r=peterv (e69daf7f7)
- Bug 1184842. Allow BeforeSetAttr to preparse aValue. r=peterv (9c51655de)
- follow up fix to Bug 1184842. Allow BeforeSetAttr to preparse aValue (fb997a066)
- Bug 1149042 - Call AttributeWillChange before a style="" attribute gets created when touching element.style. r=smaug (41f2ea361)
- Bug 1184842. Pass preparsed attribute values to nsNodeUtils::AttributeWillChange. r=peterv (646622252)
- Bug 1013743, MutationObserver should observe only the subtree it is attached to, r=wchen (ad606eb15)
- Bug 1184842. Add aNewValue to nsIMutationObserver::AttributeWillChange. r=peterv (796042972)
- Bug 1184842. Preparse class attribute values in Element::BeforeSetAttr. r=peterv (e18989b2b)
- Bug 1154149 - Remove nsPresContext arguments from a bunch of nsStyleSBug 1154149 - Remove nsPresContext arguments from a bunch of nsStyleS (b7797ef66)
- Bug 1184842. Route aOldValue/aNewValue to AttributeData. r=heycam (14489941b)
- Bug 1184842. Restyling should consider only the classes that have changed. r=heycam (5a5e670dc)
- Bug 1121760 (part 1) - Remove PL_DHashTableSearch(). r=poiru. (d92813655)
2021-03-13 11:00:00 +08:00

216 lines
7.3 KiB
C++

/* -*- 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/. */
/* rendering object for HTML <frameset> elements */
#ifndef nsHTMLFrameset_h___
#define nsHTMLFrameset_h___
#include "mozilla/Attributes.h"
#include "nsContainerFrame.h"
#include "nsColor.h"
class nsIContent;
class nsPresContext;
struct nsRect;
struct nsHTMLReflowState;
struct nsSize;
class nsIAtom;
class nsHTMLFramesetBorderFrame;
class nsHTMLFramesetFrame;
#define NO_COLOR 0xFFFFFFFA
// defined at HTMLFrameSetElement.h
struct nsFramesetSpec;
struct nsBorderColor
{
nscolor mLeft;
nscolor mRight;
nscolor mTop;
nscolor mBottom;
nsBorderColor() { Set(NO_COLOR); }
~nsBorderColor() {}
void Set(nscolor aColor) { mLeft = mRight = mTop = mBottom = aColor; }
};
enum nsFrameborder {
eFrameborder_Yes = 0,
eFrameborder_No,
eFrameborder_Notset
};
struct nsFramesetDrag {
nsHTMLFramesetFrame* mSource; // frameset whose border was dragged to cause the resize
int32_t mIndex; // index of left col or top row of effected area
int32_t mChange; // pos for left to right or top to bottom, neg otherwise
bool mVertical; // vertical if true, otherwise horizontal
nsFramesetDrag();
void Reset(bool aVertical,
int32_t aIndex,
int32_t aChange,
nsHTMLFramesetFrame* aSource);
void UnSet();
};
/*******************************************************************************
* nsHTMLFramesetFrame
******************************************************************************/
class nsHTMLFramesetFrame : public nsContainerFrame
{
public:
NS_DECL_QUERYFRAME_TARGET(nsHTMLFramesetFrame)
NS_DECL_QUERYFRAME
NS_DECL_FRAMEARENA_HELPERS
explicit nsHTMLFramesetFrame(nsStyleContext* aContext);
virtual ~nsHTMLFramesetFrame();
virtual void Init(nsIContent* aContent,
nsContainerFrame* aParent,
nsIFrame* aPrevInFlow) override;
virtual void SetInitialChildList(ChildListID aListID,
nsFrameList& aChildList) override;
static bool gDragInProgress;
void GetSizeOfChild(nsIFrame* aChild, mozilla::WritingMode aWM,
mozilla::LogicalSize& aSize);
void GetSizeOfChildAt(int32_t aIndexInParent,
mozilla::WritingMode aWM,
mozilla::LogicalSize& aSize,
nsIntPoint& aCellIndex);
virtual nsresult HandleEvent(nsPresContext* aPresContext,
mozilla::WidgetGUIEvent* aEvent,
nsEventStatus* aEventStatus) override;
virtual nsresult GetCursor(const nsPoint& aPoint,
nsIFrame::Cursor& aCursor) override;
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists) override;
virtual void Reflow(nsPresContext* aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aReflowState,
nsReflowStatus& aStatus) override;
virtual nsIAtom* GetType() const override;
#ifdef DEBUG_FRAME_DUMP
virtual nsresult GetFrameName(nsAString& aResult) const override;
#endif
virtual bool IsLeaf() const override;
void StartMouseDrag(nsPresContext* aPresContext,
nsHTMLFramesetBorderFrame* aBorder,
mozilla::WidgetGUIEvent* aEvent);
void MouseDrag(nsPresContext* aPresContext,
mozilla::WidgetGUIEvent* aEvent);
void EndMouseDrag(nsPresContext* aPresContext);
nsFrameborder GetParentFrameborder() { return mParentFrameborder; }
void SetParentFrameborder(nsFrameborder aValue) { mParentFrameborder = aValue; }
nsFramesetDrag& GetDrag() { return mDrag; }
void RecalculateBorderResize();
protected:
void Scale(nscoord aDesired,
int32_t aNumIndicies,
int32_t* aIndicies,
int32_t aNumItems,
int32_t* aItems);
void CalculateRowCol(nsPresContext* aPresContext,
nscoord aSize,
int32_t aNumSpecs,
const nsFramesetSpec* aSpecs,
nscoord* aValues);
void GenerateRowCol(nsPresContext* aPresContext,
nscoord aSize,
int32_t aNumSpecs,
const nsFramesetSpec* aSpecs,
nscoord* aValues,
nsString& aNewAttr);
virtual void GetDesiredSize(nsPresContext* aPresContext,
const nsHTMLReflowState& aReflowState,
nsHTMLReflowMetrics& aDesiredSize);
int32_t GetBorderWidth(nsPresContext* aPresContext,
bool aTakeForcingIntoAccount);
int32_t GetParentBorderWidth() { return mParentBorderWidth; }
void SetParentBorderWidth(int32_t aWidth) { mParentBorderWidth = aWidth; }
nscolor GetParentBorderColor() { return mParentBorderColor; }
void SetParentBorderColor(nscolor aColor) { mParentBorderColor = aColor; }
nsFrameborder GetFrameBorder();
nsFrameborder GetFrameBorder(nsIContent* aContent);
nscolor GetBorderColor();
nscolor GetBorderColor(nsIContent* aFrameContent);
bool GetNoResize(nsIFrame* aChildFrame);
void ReflowPlaceChild(nsIFrame* aChild,
nsPresContext* aPresContext,
const nsHTMLReflowState& aReflowState,
nsPoint& aOffset,
nsSize& aSize,
nsIntPoint* aCellIndex = 0);
bool CanResize(bool aVertical, bool aLeft);
bool CanChildResize(bool aVertical, bool aLeft, int32_t aChildX);
void SetBorderResize(nsHTMLFramesetBorderFrame* aBorderFrame);
nsFramesetDrag mDrag;
nsBorderColor mEdgeColors;
nsHTMLFramesetBorderFrame* mDragger;
nsHTMLFramesetFrame* mTopLevelFrameset;
nsHTMLFramesetBorderFrame** mVerBorders; // vertical borders
nsHTMLFramesetBorderFrame** mHorBorders; // horizontal borders
nsFrameborder* mChildFrameborder; // the frameborder attr of children
nsBorderColor* mChildBorderColors;
nscoord* mRowSizes; // currently computed row sizes
nscoord* mColSizes; // currently computed col sizes
mozilla::LayoutDeviceIntPoint mFirstDragPoint;
int32_t mNumRows;
int32_t mNumCols;
int32_t mNonBorderChildCount;
int32_t mNonBlankChildCount;
int32_t mEdgeVisibility;
nsFrameborder mParentFrameborder;
nscolor mParentBorderColor;
int32_t mParentBorderWidth;
int32_t mPrevNeighborOrigSize; // used during resize
int32_t mNextNeighborOrigSize;
int32_t mMinDrag;
int32_t mChildCount;
};
#endif