gecko-dev/layout/generic/nsFrameSetFrame.h

215 строки
7.2 KiB
C
Исходник Обычный вид История

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
2012-05-21 15:12:37 +04:00
/* 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 "mozilla/UniquePtr.h"
#include "nsContainerFrame.h"
#include "nsColor.h"
class nsIContent;
class nsPresContext;
struct nsRect;
struct nsSize;
class nsAtom;
class nsHTMLFramesetBorderFrame;
class nsHTMLFramesetFrame;
#define NO_COLOR 0xFFFFFFFA
Fix for bug 824007 (Convert HTMLBodyElement, HTMLDataListElement, HTMLFontElement, HTMLFrameSetElement and HTMLLabelElement to new DOM bindings) - move some HTML element classes to mozilla::dom. r=bz. --HG-- rename : content/html/content/src/nsHTMLBodyElement.cpp => content/html/content/src/HTMLBodyElement.cpp rename : content/html/content/src/nsHTMLDataListElement.cpp => content/html/content/src/HTMLDataListElement.cpp rename : content/html/content/src/nsHTMLDivElement.cpp => content/html/content/src/HTMLDivElement.cpp rename : content/html/content/src/nsHTMLDivElement.h => content/html/content/src/HTMLDivElement.h rename : content/html/content/src/nsHTMLElement.cpp => content/html/content/src/HTMLElement.cpp rename : content/html/content/src/nsHTMLFontElement.cpp => content/html/content/src/HTMLFontElement.cpp rename : content/html/content/src/nsHTMLFrameSetElement.cpp => content/html/content/src/HTMLFrameSetElement.cpp rename : content/html/content/src/nsHTMLFrameSetElement.h => content/html/content/src/HTMLFrameSetElement.h rename : content/html/content/src/nsHTMLLabelElement.cpp => content/html/content/src/HTMLLabelElement.cpp rename : content/html/content/src/nsHTMLLabelElement.h => content/html/content/src/HTMLLabelElement.h rename : content/html/content/src/nsHTMLUnknownElement.cpp => content/html/content/src/HTMLUnknownElement.cpp rename : content/html/content/src/nsHTMLUnknownElement.h => content/html/content/src/HTMLUnknownElement.h extra : rebase_source : 99a2b1764bfd34db1375939b967f816dc2a42a91
2012-12-21 18:06:50 +04:00
// 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
1999-03-10 09:13:35 +03:00
nsFramesetDrag();
void Reset(bool aVertical,
int32_t aIndex,
int32_t aChange,
nsHTMLFramesetFrame* aSource);
1999-03-10 09:13:35 +03:00
void UnSet();
};
/*******************************************************************************
* nsHTMLFramesetFrame
******************************************************************************/
class nsHTMLFramesetFrame : public nsContainerFrame
{
public:
NS_DECL_QUERYFRAME
NS_DECL_FRAMEARENA_HELPERS(nsHTMLFramesetFrame)
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;
1999-03-10 09:13:35 +03:00
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 nsDisplayListSet& aLists) override;
virtual void Reflow(nsPresContext* aPresContext,
ReflowOutput& aDesiredSize,
const ReflowInput& aReflowInput,
nsReflowStatus& aStatus) override;
#ifdef DEBUG_FRAME_DUMP
virtual nsresult GetFrameName(nsAString& aResult) const override;
#endif
void StartMouseDrag(nsPresContext* aPresContext,
nsHTMLFramesetBorderFrame* aBorder,
mozilla::WidgetGUIEvent* aEvent);
1999-03-10 09:13:35 +03:00
void MouseDrag(nsPresContext* aPresContext,
mozilla::WidgetGUIEvent* aEvent);
1999-03-10 09:13:35 +03:00
void EndMouseDrag(nsPresContext* aPresContext);
nsFrameborder GetParentFrameborder() { return mParentFrameborder; }
1999-03-10 09:13:35 +03:00
void SetParentFrameborder(nsFrameborder aValue) { mParentFrameborder = aValue; }
1999-03-10 09:13:35 +03:00
nsFramesetDrag& GetDrag() { return mDrag; }
void RecalculateBorderResize();
1999-03-10 09:13:35 +03:00
protected:
void Scale(nscoord aDesired,
int32_t aNumIndicies,
int32_t* aIndicies,
int32_t aNumItems,
int32_t* aItems);
1999-03-10 09:13:35 +03:00
void CalculateRowCol(nsPresContext* aPresContext,
nscoord aSize,
int32_t aNumSpecs,
const nsFramesetSpec* aSpecs,
nscoord* aValues);
1999-03-10 09:13:35 +03:00
void GenerateRowCol(nsPresContext* aPresContext,
nscoord aSize,
int32_t aNumSpecs,
const nsFramesetSpec* aSpecs,
nscoord* aValues,
nsString& aNewAttr);
virtual void GetDesiredSize(nsPresContext* aPresContext,
const ReflowInput& aReflowInput,
ReflowOutput& aDesiredSize);
int32_t GetBorderWidth(nsPresContext* aPresContext,
bool aTakeForcingIntoAccount);
1999-03-10 09:13:35 +03:00
int32_t GetParentBorderWidth() { return mParentBorderWidth; }
1999-03-10 09:13:35 +03:00
void SetParentBorderWidth(int32_t aWidth) { mParentBorderWidth = aWidth; }
1999-03-10 09:13:35 +03:00
nscolor GetParentBorderColor() { return mParentBorderColor; }
1999-03-10 09:13:35 +03:00
void SetParentBorderColor(nscolor aColor) { mParentBorderColor = aColor; }
nsFrameborder GetFrameBorder();
1999-03-10 09:13:35 +03:00
nsFrameborder GetFrameBorder(nsIContent* aContent);
1999-03-10 09:13:35 +03:00
nscolor GetBorderColor();
1999-03-10 09:13:35 +03:00
nscolor GetBorderColor(nsIContent* aFrameContent);
1999-03-10 09:13:35 +03:00
bool GetNoResize(nsIFrame* aChildFrame);
void ReflowPlaceChild(nsIFrame* aChild,
nsPresContext* aPresContext,
const ReflowInput& aReflowInput,
nsPoint& aOffset,
nsSize& aSize,
nsIntPoint* aCellIndex = 0);
bool CanResize(bool aVertical, bool aLeft);
1999-03-10 09:13:35 +03:00
2012-12-01 06:28:02 +04:00
bool CanChildResize(bool aVertical, bool aLeft, int32_t aChildX);
2012-12-01 06:28:02 +04:00
void SetBorderResize(nsHTMLFramesetBorderFrame* aBorderFrame);
template<typename T, class D = mozilla::DefaultDelete<T>>
using UniquePtr = mozilla::UniquePtr<T, D>;
nsFramesetDrag mDrag;
nsBorderColor mEdgeColors;
nsHTMLFramesetBorderFrame* mDragger;
nsHTMLFramesetFrame* mTopLevelFrameset;
UniquePtr<nsHTMLFramesetBorderFrame*[]> mVerBorders; // vertical borders
UniquePtr<nsHTMLFramesetBorderFrame*[]> mHorBorders; // horizontal borders
UniquePtr<nsFrameborder[]> mChildFrameborder; // the frameborder attr of children
UniquePtr<nsBorderColor[]> mChildBorderColors;
UniquePtr<nscoord[]> mRowSizes; // currently computed row sizes
UniquePtr<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