зеркало из https://github.com/mozilla/pjs.git
added nsStyleCoord
This commit is contained in:
Родитель
72a58411f2
Коммит
3545f4e831
|
@ -272,13 +272,8 @@ struct StyleTextImpl: public nsStyleText {
|
|||
mTextAlign = NS_STYLE_TEXT_ALIGN_LEFT;
|
||||
mTextDecoration = NS_STYLE_TEXT_DECORATION_NONE;
|
||||
mTextTransform = NS_STYLE_TEXT_TRANSFORM_NONE;
|
||||
mVerticalAlignFlags = NS_STYLE_VERTICAL_ALIGN_BASELINE;
|
||||
mVerticalAlign.Set(NS_STYLE_VERTICAL_ALIGN_BASELINE, eStyleUnit_Enumerated);
|
||||
mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL;
|
||||
mLetterSpacing.coord = 0;
|
||||
mLineHeight.coord = 0;
|
||||
mTextIndent.coord = 0;
|
||||
mWordSpacing.coord = 0;
|
||||
mVerticalAlign.coord = 0;
|
||||
}
|
||||
~StyleTextImpl() {
|
||||
}
|
||||
|
@ -359,7 +354,7 @@ public:
|
|||
virtual nsStyleStruct* GetData(const nsIID& aSID);
|
||||
|
||||
virtual void InheritFrom(const StyleContextImpl& aParent);
|
||||
virtual void PostProcessData(void);
|
||||
virtual void RecalcAutomaticData(void);
|
||||
|
||||
nsIStyleContext* mParent;
|
||||
PRUint32 mHashValid: 1;
|
||||
|
@ -522,23 +517,32 @@ void StyleContextImpl::InheritFrom(const StyleContextImpl& aParent)
|
|||
mDisplay.InheritFrom(aParent.mDisplay);
|
||||
}
|
||||
|
||||
static void CalcBorderSize(nscoord& aSize, PRUint8 aFlag)
|
||||
static void CalcBorderSize(nscoord& aSize, const nsStyleBorder& aBorder, PRUint8 aSide)
|
||||
{
|
||||
static const nscoord kBorderSize[3] = // XXX need real numbers here (this is probably wrong anyway)
|
||||
{ NS_POINTS_TO_TWIPS_INT(1),
|
||||
NS_POINTS_TO_TWIPS_INT(3),
|
||||
NS_POINTS_TO_TWIPS_INT(5) };
|
||||
if (aFlag < NS_STYLE_BORDER_WIDTH_LENGTH_VALUE) {
|
||||
aSize = kBorderSize[aFlag];
|
||||
PRUint8 style = aBorder.mStyle[aSide];
|
||||
if (NS_STYLE_BORDER_STYLE_NONE == style) {
|
||||
aSize = 0;
|
||||
}
|
||||
else {
|
||||
PRUint8 flag = aBorder.mSizeFlag[aSide];
|
||||
if (flag < NS_STYLE_BORDER_WIDTH_LENGTH_VALUE) {
|
||||
aSize = kBorderSize[flag];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StyleContextImpl::PostProcessData(void)
|
||||
void StyleContextImpl::RecalcAutomaticData(void)
|
||||
{
|
||||
CalcBorderSize(mBorder.mSize.top, mBorder.mSizeFlag[NS_SIDE_TOP]);
|
||||
CalcBorderSize(mBorder.mSize.right, mBorder.mSizeFlag[NS_SIDE_RIGHT]);
|
||||
CalcBorderSize(mBorder.mSize.bottom, mBorder.mSizeFlag[NS_SIDE_BOTTOM]);
|
||||
CalcBorderSize(mBorder.mSize.left, mBorder.mSizeFlag[NS_SIDE_LEFT]);
|
||||
CalcBorderSize(mBorder.mSize.top, mBorder, NS_SIDE_TOP);
|
||||
CalcBorderSize(mBorder.mSize.right, mBorder, NS_SIDE_RIGHT);
|
||||
CalcBorderSize(mBorder.mSize.bottom, mBorder, NS_SIDE_BOTTOM);
|
||||
CalcBorderSize(mBorder.mSize.left, mBorder, NS_SIDE_LEFT);
|
||||
|
||||
// XXX fixup missing border colors
|
||||
|
||||
mSpacing.mBorder = mBorder.mSize;
|
||||
mSpacing.mBorderPadding = mSpacing.mPadding;
|
||||
|
@ -568,7 +572,7 @@ NS_NewStyleContext(nsIStyleContext** aInstancePtrResult,
|
|||
if (nsnull == context) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
context->PostProcessData();
|
||||
context->RecalcAutomaticData();
|
||||
|
||||
return context->QueryInterface(kIStyleContextIID, (void **) aInstancePtrResult);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
#ifndef nsStyleCoord_h___
|
||||
#define nsStyleCoord_h___
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCoord.h"
|
||||
class nsString;
|
||||
|
||||
enum nsStyleUnit {
|
||||
eStyleUnit_Twips = 0, // (nscoord) value is twips
|
||||
eStyleUnit_Percent = 1, // (float) 1.0 == 100%
|
||||
eStyleUnit_Auto = 2, // (no value)
|
||||
eStyleUnit_Inherit = 3, // (no value) value should be inherited
|
||||
eStyleUnit_Proportional = 4, // (int) value has proportional meaning
|
||||
eStyleUnit_Enumerated = 5, // (int) value has enumerated meaning
|
||||
};
|
||||
|
||||
class nsStyleCoord {
|
||||
public:
|
||||
nsStyleCoord(void); // sets to 0 twips
|
||||
nsStyleCoord(nscoord aValue);
|
||||
nsStyleCoord(PRInt32 aValue, nsStyleUnit aUnit);
|
||||
nsStyleCoord(float aValue);
|
||||
nsStyleCoord(const nsStyleCoord& aCopy);
|
||||
~nsStyleCoord(void);
|
||||
|
||||
nsStyleCoord& operator=(const nsStyleCoord& aCopy);
|
||||
PRBool operator==(const nsStyleCoord& aOther) const;
|
||||
|
||||
nsStyleUnit GetUnit(void) const { return mUnit; }
|
||||
nscoord GetCoordValue(void) const;
|
||||
PRInt32 GetIntValue(void) const;
|
||||
float GetFloatValue(void) const;
|
||||
|
||||
void Set(nscoord aValue);
|
||||
void Set(PRInt32 aValue, nsStyleUnit aUnit);
|
||||
void Set(float aValue);
|
||||
void SetAuto(void);
|
||||
void SetInherit(void);
|
||||
|
||||
void AppendToString(nsString& aBuffer) const;
|
||||
void ToString(nsString& aBuffer) const;
|
||||
|
||||
protected:
|
||||
nsStyleUnit mUnit;
|
||||
union {
|
||||
PRInt32 mInt; // nscoord is a PRInt32 for now
|
||||
float mFloat;
|
||||
} mValue;
|
||||
};
|
||||
|
||||
inline PRInt32 nsStyleCoord::GetCoordValue(void) const
|
||||
{
|
||||
NS_ASSERTION((mUnit == eStyleUnit_Twips), "not a coord value");
|
||||
if (mUnit == eStyleUnit_Twips) {
|
||||
return mValue.mInt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline PRInt32 nsStyleCoord::GetIntValue(void) const
|
||||
{
|
||||
NS_ASSERTION((mUnit == eStyleUnit_Proportional) ||
|
||||
(mUnit == eStyleUnit_Enumerated), "not an int value");
|
||||
if ((mUnit == eStyleUnit_Proportional) ||
|
||||
(mUnit == eStyleUnit_Enumerated)) {
|
||||
return mValue.mInt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline float nsStyleCoord::GetFloatValue(void) const
|
||||
{
|
||||
NS_ASSERTION(mUnit == eStyleUnit_Percent, "not a float value");
|
||||
if (mUnit == eStyleUnit_Percent) {
|
||||
return mValue.mFloat;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* nsStyleCoord_h___ */
|
|
@ -31,6 +31,7 @@ EXPORTS = \
|
|||
nsIPresShell.h \
|
||||
nsIRunaround.h \
|
||||
nsISpaceManager.h \
|
||||
nsStyleCoord.h \
|
||||
nsIStyleContext.h \
|
||||
nsIStyleRule.h \
|
||||
nsIStyleSet.h \
|
||||
|
|
|
@ -30,6 +30,7 @@ EXPORTS = \
|
|||
nsIPresShell.h \
|
||||
nsIRunaround.h \
|
||||
nsISpaceManager.h \
|
||||
nsStyleCoord.h \
|
||||
nsIStyleContext.h \
|
||||
nsIStyleRule.h \
|
||||
nsIStyleSet.h \
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
#include "nsCoord.h"
|
||||
#include "nsMargin.h"
|
||||
#include "nsFont.h"
|
||||
#include "nsStyleCoord.h"
|
||||
|
||||
class nsIFrame;
|
||||
class nsIPresContext;
|
||||
class nsIContent;
|
||||
|
@ -67,11 +69,6 @@ class nsISupportsArray;
|
|||
#define NS_SIDE_BOTTOM 2
|
||||
#define NS_SIDE_LEFT 3
|
||||
|
||||
union nsStyleValue {
|
||||
nscoord coord;
|
||||
float percent;
|
||||
};
|
||||
|
||||
// The lifetime of these objects is managed by the nsIStyleContext.
|
||||
|
||||
struct nsStyleStruct {
|
||||
|
@ -110,8 +107,8 @@ protected:
|
|||
struct nsStyleSpacing: public nsStyleStruct {
|
||||
nsMargin mMargin;
|
||||
nsMargin mPadding;
|
||||
nsMargin mBorder; // automatic computed value
|
||||
nsMargin mBorderPadding; // automatic computed value
|
||||
nsMargin mBorder; // automatic computed value (DON'T SET)
|
||||
nsMargin mBorderPadding; // automatic computed value (DON'T SET)
|
||||
|
||||
protected:
|
||||
nsStyleSpacing(void);
|
||||
|
@ -167,18 +164,13 @@ struct nsStyleText : public nsStyleStruct {
|
|||
PRUint8 mTextAlign; // see nsStyleConsts.h
|
||||
PRUint8 mTextDecoration; // see nsStyleConsts.h
|
||||
PRUint8 mTextTransform; // see nsStyleConsts.h
|
||||
PRUint8 mVerticalAlignFlags; // see nsStyleConsts.h
|
||||
PRUint8 mWhiteSpace; // see nsStyleConsts.h
|
||||
PRUint8 mLetterSpacingFlags;
|
||||
PRUint8 mLineHeightFlags;
|
||||
PRUint8 mTextIndentFlags;
|
||||
PRUint8 mWordSpacingFlags;
|
||||
|
||||
nsStyleValue mLetterSpacing;
|
||||
nsStyleValue mLineHeight;
|
||||
nsStyleValue mTextIndent;
|
||||
nsStyleValue mWordSpacing;
|
||||
nsStyleValue mVerticalAlign;
|
||||
nsStyleCoord mLetterSpacing;
|
||||
nsStyleCoord mLineHeight;
|
||||
nsStyleCoord mTextIndent;
|
||||
nsStyleCoord mWordSpacing;
|
||||
nsStyleCoord mVerticalAlign; // see nsStyleConsts.h for enums
|
||||
|
||||
protected:
|
||||
nsStyleText();
|
||||
|
@ -214,6 +206,9 @@ public:
|
|||
|
||||
// get a style data struct by ID, may return null
|
||||
virtual nsStyleStruct* GetData(const nsIID& aSID) = 0;
|
||||
|
||||
// call if you change style data after creation
|
||||
virtual void RecalcAutomaticData(void) = 0;
|
||||
};
|
||||
|
||||
// this is private to nsStyleSet, don't call it
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
#ifndef nsStyleCoord_h___
|
||||
#define nsStyleCoord_h___
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCoord.h"
|
||||
class nsString;
|
||||
|
||||
enum nsStyleUnit {
|
||||
eStyleUnit_Twips = 0, // (nscoord) value is twips
|
||||
eStyleUnit_Percent = 1, // (float) 1.0 == 100%
|
||||
eStyleUnit_Auto = 2, // (no value)
|
||||
eStyleUnit_Inherit = 3, // (no value) value should be inherited
|
||||
eStyleUnit_Proportional = 4, // (int) value has proportional meaning
|
||||
eStyleUnit_Enumerated = 5, // (int) value has enumerated meaning
|
||||
};
|
||||
|
||||
class nsStyleCoord {
|
||||
public:
|
||||
nsStyleCoord(void); // sets to 0 twips
|
||||
nsStyleCoord(nscoord aValue);
|
||||
nsStyleCoord(PRInt32 aValue, nsStyleUnit aUnit);
|
||||
nsStyleCoord(float aValue);
|
||||
nsStyleCoord(const nsStyleCoord& aCopy);
|
||||
~nsStyleCoord(void);
|
||||
|
||||
nsStyleCoord& operator=(const nsStyleCoord& aCopy);
|
||||
PRBool operator==(const nsStyleCoord& aOther) const;
|
||||
|
||||
nsStyleUnit GetUnit(void) const { return mUnit; }
|
||||
nscoord GetCoordValue(void) const;
|
||||
PRInt32 GetIntValue(void) const;
|
||||
float GetFloatValue(void) const;
|
||||
|
||||
void Set(nscoord aValue);
|
||||
void Set(PRInt32 aValue, nsStyleUnit aUnit);
|
||||
void Set(float aValue);
|
||||
void SetAuto(void);
|
||||
void SetInherit(void);
|
||||
|
||||
void AppendToString(nsString& aBuffer) const;
|
||||
void ToString(nsString& aBuffer) const;
|
||||
|
||||
protected:
|
||||
nsStyleUnit mUnit;
|
||||
union {
|
||||
PRInt32 mInt; // nscoord is a PRInt32 for now
|
||||
float mFloat;
|
||||
} mValue;
|
||||
};
|
||||
|
||||
inline PRInt32 nsStyleCoord::GetCoordValue(void) const
|
||||
{
|
||||
NS_ASSERTION((mUnit == eStyleUnit_Twips), "not a coord value");
|
||||
if (mUnit == eStyleUnit_Twips) {
|
||||
return mValue.mInt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline PRInt32 nsStyleCoord::GetIntValue(void) const
|
||||
{
|
||||
NS_ASSERTION((mUnit == eStyleUnit_Proportional) ||
|
||||
(mUnit == eStyleUnit_Enumerated), "not an int value");
|
||||
if ((mUnit == eStyleUnit_Proportional) ||
|
||||
(mUnit == eStyleUnit_Enumerated)) {
|
||||
return mValue.mInt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline float nsStyleCoord::GetFloatValue(void) const
|
||||
{
|
||||
NS_ASSERTION(mUnit == eStyleUnit_Percent, "not a float value");
|
||||
if (mUnit == eStyleUnit_Percent) {
|
||||
return mValue.mFloat;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* nsStyleCoord_h___ */
|
|
@ -32,6 +32,7 @@ CPPSRCS = \
|
|||
nsReflowCommand.cpp \
|
||||
nsSpaceManager.cpp \
|
||||
nsSplittableFrame.cpp \
|
||||
nsStyleCoord.cpp \
|
||||
nsStyleContext.cpp \
|
||||
nsStyleSet.cpp \
|
||||
$(NULL)
|
||||
|
|
|
@ -23,7 +23,8 @@ DEFINES=-D_IMPL_NS_LAYOUT -DWIN32_LEAN_AND_MEAN
|
|||
CPPSRCS=nsContainerFrame.cpp nsDocument.cpp nsFrame.cpp \
|
||||
nsGalleyContext.cpp nsPresContext.cpp nsPresShell.cpp \
|
||||
nsPrintPreviewContext.cpp nsReflowCommand.cpp nsSpaceManager.cpp \
|
||||
nsSplittableFrame.cpp nsStyleContext.cpp nsStyleSet.cpp
|
||||
nsSplittableFrame.cpp nsStyleCoord.cpp nsStyleContext.cpp \
|
||||
nsStyleSet.cpp
|
||||
MODULE=raptor
|
||||
REQUIRES=xpcom raptor dom
|
||||
CPP_OBJS=.\$(OBJDIR)\nsContainerFrame.obj .\$(OBJDIR)\nsDocument.obj \
|
||||
|
@ -31,8 +32,8 @@ CPP_OBJS=.\$(OBJDIR)\nsContainerFrame.obj .\$(OBJDIR)\nsDocument.obj \
|
|||
.\$(OBJDIR)\nsPresContext.obj .\$(OBJDIR)\nsPresShell.obj \
|
||||
.\$(OBJDIR)\nsPrintPreviewContext.obj \
|
||||
.\$(OBJDIR)\nsReflowCommand.obj .\$(OBJDIR)\nsSpaceManager.obj \
|
||||
.\$(OBJDIR)\nsSplittableFrame.obj .\$(OBJDIR)\nsStyleContext.obj \
|
||||
.\$(OBJDIR)\nsStyleSet.obj
|
||||
.\$(OBJDIR)\nsSplittableFrame.obj .\$(OBJDIR)\nsStyleCoord.obj \
|
||||
.\$(OBJDIR)\nsStyleContext.obj .\$(OBJDIR)\nsStyleSet.obj
|
||||
|
||||
LINCS=-I$(XPDIST)\public\xpcom -I$(XPDIST)\public\raptor \
|
||||
-I$(XPDIST)\public\dom -I$(XPDIST)\public\js
|
||||
|
|
|
@ -199,8 +199,8 @@
|
|||
#define NS_STYLE_VERTICAL_ALIGN_MIDDLE 15
|
||||
#define NS_STYLE_VERTICAL_ALIGN_TEXT_BOTTOM 16
|
||||
#define NS_STYLE_VERTICAL_ALIGN_BOTTOM 17
|
||||
#define NS_STYLE_VERTICAL_ALIGN_LENGTH 18
|
||||
#define NS_STYLE_VERTICAL_ALIGN_PERCENT 19
|
||||
//#define NS_STYLE_VERTICAL_ALIGN_LENGTH 18
|
||||
//#define NS_STYLE_VERTICAL_ALIGN_PERCENT 19
|
||||
|
||||
// See nsStyleDisplay
|
||||
#define NS_STYLE_VISIBILITY_INHERIT 0
|
||||
|
|
|
@ -272,13 +272,8 @@ struct StyleTextImpl: public nsStyleText {
|
|||
mTextAlign = NS_STYLE_TEXT_ALIGN_LEFT;
|
||||
mTextDecoration = NS_STYLE_TEXT_DECORATION_NONE;
|
||||
mTextTransform = NS_STYLE_TEXT_TRANSFORM_NONE;
|
||||
mVerticalAlignFlags = NS_STYLE_VERTICAL_ALIGN_BASELINE;
|
||||
mVerticalAlign.Set(NS_STYLE_VERTICAL_ALIGN_BASELINE, eStyleUnit_Enumerated);
|
||||
mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL;
|
||||
mLetterSpacing.coord = 0;
|
||||
mLineHeight.coord = 0;
|
||||
mTextIndent.coord = 0;
|
||||
mWordSpacing.coord = 0;
|
||||
mVerticalAlign.coord = 0;
|
||||
}
|
||||
~StyleTextImpl() {
|
||||
}
|
||||
|
@ -359,7 +354,7 @@ public:
|
|||
virtual nsStyleStruct* GetData(const nsIID& aSID);
|
||||
|
||||
virtual void InheritFrom(const StyleContextImpl& aParent);
|
||||
virtual void PostProcessData(void);
|
||||
virtual void RecalcAutomaticData(void);
|
||||
|
||||
nsIStyleContext* mParent;
|
||||
PRUint32 mHashValid: 1;
|
||||
|
@ -522,23 +517,32 @@ void StyleContextImpl::InheritFrom(const StyleContextImpl& aParent)
|
|||
mDisplay.InheritFrom(aParent.mDisplay);
|
||||
}
|
||||
|
||||
static void CalcBorderSize(nscoord& aSize, PRUint8 aFlag)
|
||||
static void CalcBorderSize(nscoord& aSize, const nsStyleBorder& aBorder, PRUint8 aSide)
|
||||
{
|
||||
static const nscoord kBorderSize[3] = // XXX need real numbers here (this is probably wrong anyway)
|
||||
{ NS_POINTS_TO_TWIPS_INT(1),
|
||||
NS_POINTS_TO_TWIPS_INT(3),
|
||||
NS_POINTS_TO_TWIPS_INT(5) };
|
||||
if (aFlag < NS_STYLE_BORDER_WIDTH_LENGTH_VALUE) {
|
||||
aSize = kBorderSize[aFlag];
|
||||
PRUint8 style = aBorder.mStyle[aSide];
|
||||
if (NS_STYLE_BORDER_STYLE_NONE == style) {
|
||||
aSize = 0;
|
||||
}
|
||||
else {
|
||||
PRUint8 flag = aBorder.mSizeFlag[aSide];
|
||||
if (flag < NS_STYLE_BORDER_WIDTH_LENGTH_VALUE) {
|
||||
aSize = kBorderSize[flag];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StyleContextImpl::PostProcessData(void)
|
||||
void StyleContextImpl::RecalcAutomaticData(void)
|
||||
{
|
||||
CalcBorderSize(mBorder.mSize.top, mBorder.mSizeFlag[NS_SIDE_TOP]);
|
||||
CalcBorderSize(mBorder.mSize.right, mBorder.mSizeFlag[NS_SIDE_RIGHT]);
|
||||
CalcBorderSize(mBorder.mSize.bottom, mBorder.mSizeFlag[NS_SIDE_BOTTOM]);
|
||||
CalcBorderSize(mBorder.mSize.left, mBorder.mSizeFlag[NS_SIDE_LEFT]);
|
||||
CalcBorderSize(mBorder.mSize.top, mBorder, NS_SIDE_TOP);
|
||||
CalcBorderSize(mBorder.mSize.right, mBorder, NS_SIDE_RIGHT);
|
||||
CalcBorderSize(mBorder.mSize.bottom, mBorder, NS_SIDE_BOTTOM);
|
||||
CalcBorderSize(mBorder.mSize.left, mBorder, NS_SIDE_LEFT);
|
||||
|
||||
// XXX fixup missing border colors
|
||||
|
||||
mSpacing.mBorder = mBorder.mSize;
|
||||
mSpacing.mBorderPadding = mSpacing.mPadding;
|
||||
|
@ -568,7 +572,7 @@ NS_NewStyleContext(nsIStyleContext** aInstancePtrResult,
|
|||
if (nsnull == context) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
context->PostProcessData();
|
||||
context->RecalcAutomaticData();
|
||||
|
||||
return context->QueryInterface(kIStyleContextIID, (void **) aInstancePtrResult);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,147 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#include "nsStyleCoord.h"
|
||||
#include "nsString.h"
|
||||
#include "nsCRT.h"
|
||||
|
||||
nsStyleCoord::nsStyleCoord(void)
|
||||
: mUnit(eStyleUnit_Twips)
|
||||
{
|
||||
mValue.mInt = 0;
|
||||
}
|
||||
|
||||
nsStyleCoord::nsStyleCoord(nscoord aValue)
|
||||
: mUnit(eStyleUnit_Twips)
|
||||
{
|
||||
mValue.mInt = aValue;
|
||||
}
|
||||
|
||||
nsStyleCoord::nsStyleCoord(PRInt32 aValue, nsStyleUnit aUnit)
|
||||
: mUnit(aUnit)
|
||||
{
|
||||
mValue.mInt = aValue;
|
||||
}
|
||||
|
||||
nsStyleCoord::nsStyleCoord(float aValue)
|
||||
: mUnit(eStyleUnit_Percent)
|
||||
{
|
||||
mValue.mFloat = aValue;
|
||||
}
|
||||
|
||||
nsStyleCoord::nsStyleCoord(const nsStyleCoord& aCopy)
|
||||
: mUnit(aCopy.mUnit)
|
||||
{
|
||||
if (eStyleUnit_Percent == mUnit) {
|
||||
mValue.mFloat = aCopy.mValue.mFloat;
|
||||
}
|
||||
else {
|
||||
mValue.mInt = aCopy.mValue.mInt;
|
||||
}
|
||||
}
|
||||
|
||||
nsStyleCoord::~nsStyleCoord(void)
|
||||
{
|
||||
}
|
||||
|
||||
nsStyleCoord& nsStyleCoord::operator=(const nsStyleCoord& aCopy)
|
||||
{
|
||||
mUnit = aCopy.mUnit;
|
||||
if (eStyleUnit_Percent == mUnit) {
|
||||
mValue.mFloat = aCopy.mValue.mFloat;
|
||||
}
|
||||
else {
|
||||
mValue.mInt = aCopy.mValue.mInt;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
PRBool nsStyleCoord::operator==(const nsStyleCoord& aOther) const
|
||||
{
|
||||
if (mUnit == aOther.mUnit) {
|
||||
if (eStyleUnit_Percent == mUnit) {
|
||||
return PRBool(mValue.mFloat == aOther.mValue.mFloat);
|
||||
}
|
||||
else {
|
||||
return PRBool(mValue.mInt == aOther.mValue.mInt);
|
||||
}
|
||||
}
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
void nsStyleCoord::Set(nscoord aValue)
|
||||
{
|
||||
mUnit = eStyleUnit_Twips;
|
||||
mValue.mInt = aValue;
|
||||
}
|
||||
|
||||
void nsStyleCoord::Set(PRInt32 aValue, nsStyleUnit aUnit)
|
||||
{
|
||||
mUnit = aUnit;
|
||||
mValue.mInt = aValue;
|
||||
}
|
||||
|
||||
void nsStyleCoord::Set(float aValue)
|
||||
{
|
||||
mUnit = eStyleUnit_Percent;
|
||||
mValue.mFloat = aValue;
|
||||
}
|
||||
|
||||
void nsStyleCoord::SetAuto(void)
|
||||
{
|
||||
mUnit = eStyleUnit_Auto;
|
||||
mValue.mInt = 0;
|
||||
}
|
||||
|
||||
void nsStyleCoord::SetInherit(void)
|
||||
{
|
||||
mUnit = eStyleUnit_Inherit;
|
||||
mValue.mInt = 0;
|
||||
}
|
||||
|
||||
void nsStyleCoord::AppendToString(nsString& aBuffer) const
|
||||
{
|
||||
if (eStyleUnit_Percent == mUnit) {
|
||||
aBuffer.Append(mValue.mFloat);
|
||||
}
|
||||
else if ((eStyleUnit_Twips == mUnit) ||
|
||||
(eStyleUnit_Proportional == mUnit) ||
|
||||
(eStyleUnit_Enumerated == mUnit)) {
|
||||
aBuffer.Append(mValue.mInt, 10);
|
||||
aBuffer.Append("[0x");
|
||||
aBuffer.Append(mValue.mInt, 16);
|
||||
aBuffer.Append(']');
|
||||
}
|
||||
|
||||
switch (mUnit) {
|
||||
case eStyleUnit_Twips: aBuffer.Append("tw"); break;
|
||||
case eStyleUnit_Percent: aBuffer.Append("%"); break;
|
||||
case eStyleUnit_Auto: aBuffer.Append("Auto"); break;
|
||||
case eStyleUnit_Inherit: aBuffer.Append("Inherit"); break;
|
||||
case eStyleUnit_Proportional: aBuffer.Append("*"); break;
|
||||
case eStyleUnit_Enumerated: aBuffer.Append("enum"); break;
|
||||
}
|
||||
aBuffer.Append(' ');
|
||||
}
|
||||
|
||||
void nsStyleCoord::ToString(nsString& aBuffer) const
|
||||
{
|
||||
aBuffer.Truncate();
|
||||
AppendToString(aBuffer);
|
||||
}
|
||||
|
|
@ -272,13 +272,8 @@ struct StyleTextImpl: public nsStyleText {
|
|||
mTextAlign = NS_STYLE_TEXT_ALIGN_LEFT;
|
||||
mTextDecoration = NS_STYLE_TEXT_DECORATION_NONE;
|
||||
mTextTransform = NS_STYLE_TEXT_TRANSFORM_NONE;
|
||||
mVerticalAlignFlags = NS_STYLE_VERTICAL_ALIGN_BASELINE;
|
||||
mVerticalAlign.Set(NS_STYLE_VERTICAL_ALIGN_BASELINE, eStyleUnit_Enumerated);
|
||||
mWhiteSpace = NS_STYLE_WHITESPACE_NORMAL;
|
||||
mLetterSpacing.coord = 0;
|
||||
mLineHeight.coord = 0;
|
||||
mTextIndent.coord = 0;
|
||||
mWordSpacing.coord = 0;
|
||||
mVerticalAlign.coord = 0;
|
||||
}
|
||||
~StyleTextImpl() {
|
||||
}
|
||||
|
@ -359,7 +354,7 @@ public:
|
|||
virtual nsStyleStruct* GetData(const nsIID& aSID);
|
||||
|
||||
virtual void InheritFrom(const StyleContextImpl& aParent);
|
||||
virtual void PostProcessData(void);
|
||||
virtual void RecalcAutomaticData(void);
|
||||
|
||||
nsIStyleContext* mParent;
|
||||
PRUint32 mHashValid: 1;
|
||||
|
@ -522,23 +517,32 @@ void StyleContextImpl::InheritFrom(const StyleContextImpl& aParent)
|
|||
mDisplay.InheritFrom(aParent.mDisplay);
|
||||
}
|
||||
|
||||
static void CalcBorderSize(nscoord& aSize, PRUint8 aFlag)
|
||||
static void CalcBorderSize(nscoord& aSize, const nsStyleBorder& aBorder, PRUint8 aSide)
|
||||
{
|
||||
static const nscoord kBorderSize[3] = // XXX need real numbers here (this is probably wrong anyway)
|
||||
{ NS_POINTS_TO_TWIPS_INT(1),
|
||||
NS_POINTS_TO_TWIPS_INT(3),
|
||||
NS_POINTS_TO_TWIPS_INT(5) };
|
||||
if (aFlag < NS_STYLE_BORDER_WIDTH_LENGTH_VALUE) {
|
||||
aSize = kBorderSize[aFlag];
|
||||
PRUint8 style = aBorder.mStyle[aSide];
|
||||
if (NS_STYLE_BORDER_STYLE_NONE == style) {
|
||||
aSize = 0;
|
||||
}
|
||||
else {
|
||||
PRUint8 flag = aBorder.mSizeFlag[aSide];
|
||||
if (flag < NS_STYLE_BORDER_WIDTH_LENGTH_VALUE) {
|
||||
aSize = kBorderSize[flag];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StyleContextImpl::PostProcessData(void)
|
||||
void StyleContextImpl::RecalcAutomaticData(void)
|
||||
{
|
||||
CalcBorderSize(mBorder.mSize.top, mBorder.mSizeFlag[NS_SIDE_TOP]);
|
||||
CalcBorderSize(mBorder.mSize.right, mBorder.mSizeFlag[NS_SIDE_RIGHT]);
|
||||
CalcBorderSize(mBorder.mSize.bottom, mBorder.mSizeFlag[NS_SIDE_BOTTOM]);
|
||||
CalcBorderSize(mBorder.mSize.left, mBorder.mSizeFlag[NS_SIDE_LEFT]);
|
||||
CalcBorderSize(mBorder.mSize.top, mBorder, NS_SIDE_TOP);
|
||||
CalcBorderSize(mBorder.mSize.right, mBorder, NS_SIDE_RIGHT);
|
||||
CalcBorderSize(mBorder.mSize.bottom, mBorder, NS_SIDE_BOTTOM);
|
||||
CalcBorderSize(mBorder.mSize.left, mBorder, NS_SIDE_LEFT);
|
||||
|
||||
// XXX fixup missing border colors
|
||||
|
||||
mSpacing.mBorder = mBorder.mSize;
|
||||
mSpacing.mBorderPadding = mSpacing.mPadding;
|
||||
|
@ -568,7 +572,7 @@ NS_NewStyleContext(nsIStyleContext** aInstancePtrResult,
|
|||
if (nsnull == context) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
context->PostProcessData();
|
||||
context->RecalcAutomaticData();
|
||||
|
||||
return context->QueryInterface(kIStyleContextIID, (void **) aInstancePtrResult);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
#ifndef nsStyleCoord_h___
|
||||
#define nsStyleCoord_h___
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsCoord.h"
|
||||
class nsString;
|
||||
|
||||
enum nsStyleUnit {
|
||||
eStyleUnit_Twips = 0, // (nscoord) value is twips
|
||||
eStyleUnit_Percent = 1, // (float) 1.0 == 100%
|
||||
eStyleUnit_Auto = 2, // (no value)
|
||||
eStyleUnit_Inherit = 3, // (no value) value should be inherited
|
||||
eStyleUnit_Proportional = 4, // (int) value has proportional meaning
|
||||
eStyleUnit_Enumerated = 5, // (int) value has enumerated meaning
|
||||
};
|
||||
|
||||
class nsStyleCoord {
|
||||
public:
|
||||
nsStyleCoord(void); // sets to 0 twips
|
||||
nsStyleCoord(nscoord aValue);
|
||||
nsStyleCoord(PRInt32 aValue, nsStyleUnit aUnit);
|
||||
nsStyleCoord(float aValue);
|
||||
nsStyleCoord(const nsStyleCoord& aCopy);
|
||||
~nsStyleCoord(void);
|
||||
|
||||
nsStyleCoord& operator=(const nsStyleCoord& aCopy);
|
||||
PRBool operator==(const nsStyleCoord& aOther) const;
|
||||
|
||||
nsStyleUnit GetUnit(void) const { return mUnit; }
|
||||
nscoord GetCoordValue(void) const;
|
||||
PRInt32 GetIntValue(void) const;
|
||||
float GetFloatValue(void) const;
|
||||
|
||||
void Set(nscoord aValue);
|
||||
void Set(PRInt32 aValue, nsStyleUnit aUnit);
|
||||
void Set(float aValue);
|
||||
void SetAuto(void);
|
||||
void SetInherit(void);
|
||||
|
||||
void AppendToString(nsString& aBuffer) const;
|
||||
void ToString(nsString& aBuffer) const;
|
||||
|
||||
protected:
|
||||
nsStyleUnit mUnit;
|
||||
union {
|
||||
PRInt32 mInt; // nscoord is a PRInt32 for now
|
||||
float mFloat;
|
||||
} mValue;
|
||||
};
|
||||
|
||||
inline PRInt32 nsStyleCoord::GetCoordValue(void) const
|
||||
{
|
||||
NS_ASSERTION((mUnit == eStyleUnit_Twips), "not a coord value");
|
||||
if (mUnit == eStyleUnit_Twips) {
|
||||
return mValue.mInt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline PRInt32 nsStyleCoord::GetIntValue(void) const
|
||||
{
|
||||
NS_ASSERTION((mUnit == eStyleUnit_Proportional) ||
|
||||
(mUnit == eStyleUnit_Enumerated), "not an int value");
|
||||
if ((mUnit == eStyleUnit_Proportional) ||
|
||||
(mUnit == eStyleUnit_Enumerated)) {
|
||||
return mValue.mInt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline float nsStyleCoord::GetFloatValue(void) const
|
||||
{
|
||||
NS_ASSERTION(mUnit == eStyleUnit_Percent, "not a float value");
|
||||
if (mUnit == eStyleUnit_Percent) {
|
||||
return mValue.mFloat;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* nsStyleCoord_h___ */
|
Загрузка…
Ссылка в новой задаче