Implement directional, list, cursor properties. Bug 128428, patch by

caillon@returnzero.com (Christopher Aillon), r=bzbarsky, sr=jst, a=asa


git-svn-id: svn://10.0.0.236/trunk@116422 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bzbarsky%mit.edu
2002-03-12 21:16:22 +00:00
parent cae53b6787
commit e74ceedc1d
6 changed files with 508 additions and 252 deletions

View File

@@ -21,6 +21,8 @@
*
* Contributor(s):
* Daniel Glazman <glazman@netscape.com>
* Boris Zbarsky <bzbarsky@mit.edu>
* Christopher A. Aillon <christopher@aillon.com>
*
*
* Alternatively, the contents of this file may be used under the terms of
@@ -204,8 +206,9 @@ private:
nsresult GetZIndex(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// List properties
nsresult GetListStyleImage(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetListStyleImage(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetListStylePosition(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetListStyleType(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// Text Properties
nsresult GetTextAlign(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
@@ -219,14 +222,21 @@ private:
// Visibility properties
nsresult GetVisibility(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// Direction properties
nsresult GetDirection(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetUnicodeBidi(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// Display properties
nsresult GetBehavior(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetBinding(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetCssFloat(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetDisplay(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetPosition(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetClip(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetOverflow(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// User interface properties
nsresult GetCursor(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsROCSSPrimitiveValue* GetROCSSPrimitiveValue();
nsWeakPtr mPresShellWeak; // XXX could this be high cost?
@@ -316,6 +326,8 @@ static const nsCSSProperty queryableProperties[] = {
eCSSProperty_z_index,
eCSSProperty_list_style_image,
eCSSProperty_list_style_position,
eCSSProperty_list_style_type,
eCSSProperty_text_align,
eCSSProperty_text_decoration,
@@ -323,7 +335,12 @@ static const nsCSSProperty queryableProperties[] = {
eCSSProperty_text_transform,
eCSSProperty_letter_spacing,
eCSSProperty_word_spacing,
eCSSProperty_white_space
eCSSProperty_white_space,
eCSSProperty_direction,
eCSSProperty_unicode_bidi,
eCSSProperty_cursor
};
nsresult
@@ -472,7 +489,7 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName,
switch (prop) {
case eCSSProperty_binding :
rv = GetBehavior(frame, *getter_AddRefs(val)); break;
rv = GetBinding(frame, *getter_AddRefs(val)); break;
case eCSSProperty_display :
rv = GetDisplay(frame, *getter_AddRefs(val)); break;
case eCSSProperty_position :
@@ -601,6 +618,10 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName,
// List properties
case eCSSProperty_list_style_image:
rv = GetListStyleImage(frame, *getter_AddRefs(val)); break;
case eCSSProperty_list_style_position:
rv = GetListStylePosition(frame, *getter_AddRefs(val)); break;
case eCSSProperty_list_style_type:
rv = GetListStyleType(frame, *getter_AddRefs(val)); break;
// Display properties
case eCSSProperty_visibility:
@@ -615,12 +636,23 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName,
rv = GetClip(frame, *getter_AddRefs(val)); break;
case eCSSProperty_overflow:
rv = GetOverflow(frame, *getter_AddRefs(val)); break;
// Direction
case eCSSProperty_direction:
rv = GetDirection(frame, *getter_AddRefs(val)); break;
case eCSSProperty_unicode_bidi:
rv = GetUnicodeBidi(frame, *getter_AddRefs(val)); break;
// User interface
case eCSSProperty_cursor:
rv = GetCursor(frame, *getter_AddRefs(val)); break;
default :
break;
}
if (val) {
rv = val->QueryInterface(NS_GET_IID(nsIDOMCSSValue), (void **)aReturn);
rv = CallQueryInterface(val, aReturn);
}
// Release the current style context for it should be re-resolved
@@ -719,8 +751,8 @@ nsComputedDOMStyle::GetBackgroundRepeat(nsAWritableString& aBackgroundRepeat)
#endif
nsresult
nsComputedDOMStyle::GetBehavior(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
nsComputedDOMStyle::GetBinding(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
@@ -729,15 +761,14 @@ nsComputedDOMStyle::GetBehavior(nsIFrame *aFrame,
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display, aFrame);
if (display) {
val->SetString(display->mBinding);
if (display && !display->mBinding.IsEmpty()) {
val->SetURI(display->mBinding);
}
else {
val->SetString(NS_LITERAL_STRING(""));
val->SetString(NS_LITERAL_STRING("none"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -938,8 +969,7 @@ nsComputedDOMStyle::GetColor(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -978,8 +1008,7 @@ nsComputedDOMStyle::GetFontFamily(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -995,8 +1024,7 @@ nsComputedDOMStyle::GetFontSize(nsIFrame *aFrame,
// Note: font->mSize is the 'computed size'; font->mFont.size is the 'actual size'
val->SetTwips(font? font->mSize:0);
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1023,8 +1051,7 @@ nsComputedDOMStyle::GetFontStyle(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1052,8 +1079,7 @@ nsComputedDOMStyle::GetFontWeight(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1080,8 +1106,7 @@ nsComputedDOMStyle::GetFontVariant(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1111,8 +1136,7 @@ nsComputedDOMStyle::GetBackgroundColor(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1129,15 +1153,14 @@ nsComputedDOMStyle::GetBackgroundImage(nsIFrame *aFrame,
if (color->mBackgroundFlags & NS_STYLE_BG_IMAGE_NONE) {
val->SetString(NS_LITERAL_STRING("none"));
} else {
val->SetString(color->mBackgroundImage);
val->SetURI(color->mBackgroundImage);
}
}
else {
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1196,8 +1219,7 @@ nsComputedDOMStyle::GetBorderCollapse(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1372,8 +1394,7 @@ nsComputedDOMStyle::GetMarkerOffset(nsIFrame *aFrame,
val->SetTwips(0);
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1419,8 +1440,7 @@ nsComputedDOMStyle::GetOutlineWidth(nsIFrame *aFrame,
val->SetTwips(0);
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1448,8 +1468,7 @@ nsComputedDOMStyle::GetOutlineStyle(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1475,8 +1494,7 @@ nsComputedDOMStyle::GetOutlineColor(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1509,8 +1527,7 @@ nsComputedDOMStyle::GetZIndex(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING("auto"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1520,22 +1537,71 @@ nsComputedDOMStyle::GetListStyleImage(nsIFrame *aFrame,
nsROCSSPrimitiveValue* val=GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleList* list;
const nsStyleList* list = nsnull;
GetStyleData(eStyleStruct_List, (const nsStyleStruct*&)list, aFrame);
if(list) {
if (list->mListStyleImage.IsEmpty()) {
val->SetString(NS_LITERAL_STRING("none"));
} else {
val->SetString(list->mListStyleImage);
val->SetURI(list->mListStyleImage);
}
}
else {
val->SetString(NS_LITERAL_STRING("none"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void**)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetListStylePosition(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleList *list = nsnull;
GetStyleData(eStyleStruct_List, (const nsStyleStruct*&)list, aFrame);
if (list) {
const nsAFlatCString& style =
nsCSSProps::SearchKeywordTable(list->mListStylePosition,
nsCSSProps::kListStylePositionKTable);
val->SetString(style);
}
else {
val->SetString(NS_LITERAL_STRING("outside"));
}
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetListStyleType(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleList *list = nsnull;
GetStyleData(eStyleStruct_List, (const nsStyleStruct*&)list, aFrame);
if (list && list->mListStyleType != NS_STYLE_LIST_STYLE_BASIC) {
if (list->mListStyleType == NS_STYLE_LIST_STYLE_NONE) {
val->SetString(NS_LITERAL_STRING("none"));
} else {
const nsAFlatCString& style =
nsCSSProps::SearchKeywordTable(list->mListStyleType,
nsCSSProps::kListStyleKTable);
val->SetString(style);
}
}
else {
val->SetString(NS_LITERAL_STRING("disc"));
}
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1558,8 +1624,7 @@ nsComputedDOMStyle::GetTextAlign(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING("start"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1620,8 +1685,7 @@ nsComputedDOMStyle::GetTextDecoration(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1776,8 +1840,85 @@ nsComputedDOMStyle::GetVisibility(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetDirection(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleVisibility *visibility = nsnull;
GetStyleData(eStyleStruct_Visibility,(const nsStyleStruct*&)visibility,aFrame);
if (visibility) {
const nsAFlatCString & direction =
nsCSSProps::SearchKeywordTable(visibility->mDirection,
nsCSSProps::kDirectionKTable);
val->SetString(direction);
} else {
val->SetString(NS_LITERAL_STRING("ltr"));
}
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetUnicodeBidi(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
#ifdef IBMBIDI
const nsStyleTextReset *text = nsnull;
GetStyleData(eStyleStruct_TextReset,(const nsStyleStruct*&)text,aFrame);
if (text && text->mUnicodeBidi != NS_STYLE_UNICODE_BIDI_NORMAL) {
const nsAFlatCString& bidi =
nsCSSProps::SearchKeywordTable(text->mUnicodeBidi,
nsCSSProps::kUnicodeBidiKTable);
val->SetString(bidi);
} else {
val->SetString(NS_LITERAL_STRING("normal"));
}
#else // IBMBIDI
val->SetString(NS_LITERAL_STRING("normal"));
#endif // IBMBIDI
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetCursor(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleUserInterface *ui = nsnull;
GetStyleData(eStyleStruct_UserInterface,(const nsStyleStruct*&)ui,aFrame);
if (ui) {
if (!ui->mCursorImage.IsEmpty()) {
val->SetURI(ui->mCursorImage);
} else {
if (ui->mCursor == NS_STYLE_CURSOR_AUTO) {
val->SetString(NS_LITERAL_STRING("auto"));
} else {
const nsAFlatCString& cursor =
nsCSSProps::SearchKeywordTable(ui->mCursor,
nsCSSProps::kCursorKTable);
val->SetString(cursor);
}
}
} else {
val->SetString(NS_LITERAL_STRING("auto"));
}
return CallQueryInterface(val, &aValue);
}
#if 0
@@ -1867,60 +2008,25 @@ nsComputedDOMStyle::GetDisplay(nsIFrame *aFrame,
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleDisplay *displayData = nsnull;
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)displayData, aFrame);
const nsStyleDisplay* display = nsnull;
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display, aFrame);
if (display) {
switch (display->mDisplay) {
case NS_STYLE_DISPLAY_NONE :
val->SetString(NS_LITERAL_STRING("none")); break;
case NS_STYLE_DISPLAY_BLOCK :
val->SetString(NS_LITERAL_STRING("block")); break;
case NS_STYLE_DISPLAY_INLINE :
val->SetString(NS_LITERAL_STRING("inline")); break;
case NS_STYLE_DISPLAY_INLINE_BLOCK :
val->SetString(NS_LITERAL_STRING("inline-block")); break;
case NS_STYLE_DISPLAY_LIST_ITEM :
val->SetString(NS_LITERAL_STRING("list-item")); break;
case NS_STYLE_DISPLAY_MARKER :
val->SetString(NS_LITERAL_STRING("marker")); break;
case NS_STYLE_DISPLAY_RUN_IN :
val->SetString(NS_LITERAL_STRING("run-in")); break;
case NS_STYLE_DISPLAY_COMPACT :
val->SetString(NS_LITERAL_STRING("compact")); break;
case NS_STYLE_DISPLAY_TABLE :
val->SetString(NS_LITERAL_STRING("table")); break;
case NS_STYLE_DISPLAY_INLINE_TABLE :
val->SetString(NS_LITERAL_STRING("inline-table")); break;
case NS_STYLE_DISPLAY_TABLE_ROW_GROUP :
val->SetString(NS_LITERAL_STRING("table-row-group")); break;
case NS_STYLE_DISPLAY_TABLE_COLUMN :
val->SetString(NS_LITERAL_STRING("table-column")); break;
case NS_STYLE_DISPLAY_TABLE_COLUMN_GROUP :
val->SetString(NS_LITERAL_STRING("table-column-group")); break;
case NS_STYLE_DISPLAY_TABLE_HEADER_GROUP :
val->SetString(NS_LITERAL_STRING("table-header-group")); break;
case NS_STYLE_DISPLAY_TABLE_FOOTER_GROUP :
val->SetString(NS_LITERAL_STRING("table-footer-group")); break;
case NS_STYLE_DISPLAY_TABLE_ROW :
val->SetString(NS_LITERAL_STRING("table-row")); break;
case NS_STYLE_DISPLAY_TABLE_CELL :
val->SetString(NS_LITERAL_STRING("table-cell")); break;
case NS_STYLE_DISPLAY_TABLE_CAPTION :
val->SetString(NS_LITERAL_STRING("table-caption")); break;
case NS_STYLE_DISPLAY_MENU :
val->SetString(NS_LITERAL_STRING("menu")); break;
default :
val->SetString(NS_LITERAL_STRING("")); break;
break;
if (displayData) {
if (displayData->mDisplay == NS_STYLE_DISPLAY_NONE) {
val->SetString(NS_LITERAL_STRING("none"));
}
else {
const nsAFlatCString& display =
nsCSSProps::SearchKeywordTable(displayData->mDisplay,
nsCSSProps::kDisplayKTable);
val->SetString(display);
}
}
else {
val->SetString(NS_LITERAL_STRING("inline"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -2201,8 +2307,7 @@ nsComputedDOMStyle::GetHeight(nsIFrame *aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -2949,8 +3054,7 @@ nsComputedDOMStyle::GetAbsoluteOffset(PRUint8 aSide, nsIFrame* aFrame,
val->SetTwips(0);
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3046,8 +3150,7 @@ nsComputedDOMStyle::GetRelativeOffset(PRUint8 aSide, nsIFrame* aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3097,8 +3200,7 @@ nsComputedDOMStyle::GetStaticOffset(PRUint8 aSide, nsIFrame* aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
@@ -3172,8 +3274,7 @@ nsComputedDOMStyle::GetPaddingWidthFor(PRUint8 aSide,
nscoord width = GetPaddingWidthCoordFor(aSide, aFrame);
val->SetTwips(width);
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nscoord
@@ -3293,8 +3394,7 @@ nsComputedDOMStyle::GetBorderWidthFor(PRUint8 aSide,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3328,8 +3428,7 @@ nsComputedDOMStyle::GetBorderColorFor(PRUint8 aSide,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3343,8 +3442,7 @@ nsComputedDOMStyle::GetMarginWidthFor(PRUint8 aSide,
nscoord width = GetMarginWidthCoordFor(aSide, aFrame);
val->SetTwips(width);
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nscoord
@@ -3483,8 +3581,7 @@ nsComputedDOMStyle::GetWidth(nsIFrame *aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
#if 0

View File

@@ -121,6 +121,13 @@ nsROCSSPrimitiveValue::GetCssText(nsAWritableString& aCssText)
tmpStr.Append(mValue.mString);
break;
}
case CSS_URI :
{
tmpStr.Assign(NS_LITERAL_STRING("url(") +
nsDependentString(mValue.mString) +
NS_LITERAL_STRING(")"));
break;
}
case CSS_PERCENTAGE :
{
tmpStr.AppendFloat(mValue.mFloat * 100);
@@ -185,7 +192,6 @@ nsROCSSPrimitiveValue::GetCssText(nsAWritableString& aCssText)
case CSS_HZ :
case CSS_KHZ :
case CSS_DIMENSION :
case CSS_URI :
case CSS_IDENT :
case CSS_ATTR :
case CSS_COUNTER :
@@ -316,11 +322,22 @@ nsROCSSPrimitiveValue::SetStringValue(PRUint16 aStringType,
NS_IMETHODIMP
nsROCSSPrimitiveValue::GetStringValue(nsAWritableString& aReturn)
{
if (mType != CSS_STRING) {
aReturn.Truncate();
return NS_ERROR_DOM_INVALID_ACCESS_ERR;
switch (mType) {
case CSS_STRING:
aReturn.Assign(mValue.mString);
break;
case CSS_URI:
aReturn.Assign(NS_LITERAL_STRING("url(") +
nsDependentString(mValue.mString) +
NS_LITERAL_STRING(")"));
break;
case CSS_IDENT:
case CSS_ATTR:
default:
aReturn.Truncate();
return NS_ERROR_DOM_INVALID_ACCESS_ERR;
break;
}
aReturn.Assign(mValue.mString);
return NS_OK;
}

View File

@@ -99,6 +99,20 @@ public:
mType = CSS_STRING;
}
void SetURI(const nsACString& aString)
{
Reset();
mValue.mString = ToNewUnicode(aString);
mType = CSS_URI;
}
void SetURI(const nsAString& aString)
{
Reset();
mValue.mString = ToNewUnicode(aString);
mType = CSS_URI;
}
void SetRect(nsIDOMRect* aRect)
{
NS_PRECONDITION(aRect, "Null rect being set!");
@@ -110,7 +124,7 @@ public:
void Reset(void)
{
if (mType == CSS_STRING) {
if (mType == CSS_STRING || mType == CSS_URI) {
NS_ASSERTION(mValue.mString, "Null string should never happen");
nsMemory::Free(mValue.mString);
mValue.mString = nsnull;

View File

@@ -21,6 +21,8 @@
*
* Contributor(s):
* Daniel Glazman <glazman@netscape.com>
* Boris Zbarsky <bzbarsky@mit.edu>
* Christopher A. Aillon <christopher@aillon.com>
*
*
* Alternatively, the contents of this file may be used under the terms of
@@ -204,8 +206,9 @@ private:
nsresult GetZIndex(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// List properties
nsresult GetListStyleImage(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetListStyleImage(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetListStylePosition(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetListStyleType(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// Text Properties
nsresult GetTextAlign(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
@@ -219,14 +222,21 @@ private:
// Visibility properties
nsresult GetVisibility(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// Direction properties
nsresult GetDirection(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetUnicodeBidi(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// Display properties
nsresult GetBehavior(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetBinding(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetCssFloat(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetDisplay(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetPosition(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetClip(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsresult GetOverflow(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
// User interface properties
nsresult GetCursor(nsIFrame *aFrame, nsIDOMCSSPrimitiveValue*& aValue);
nsROCSSPrimitiveValue* GetROCSSPrimitiveValue();
nsWeakPtr mPresShellWeak; // XXX could this be high cost?
@@ -316,6 +326,8 @@ static const nsCSSProperty queryableProperties[] = {
eCSSProperty_z_index,
eCSSProperty_list_style_image,
eCSSProperty_list_style_position,
eCSSProperty_list_style_type,
eCSSProperty_text_align,
eCSSProperty_text_decoration,
@@ -323,7 +335,12 @@ static const nsCSSProperty queryableProperties[] = {
eCSSProperty_text_transform,
eCSSProperty_letter_spacing,
eCSSProperty_word_spacing,
eCSSProperty_white_space
eCSSProperty_white_space,
eCSSProperty_direction,
eCSSProperty_unicode_bidi,
eCSSProperty_cursor
};
nsresult
@@ -472,7 +489,7 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName,
switch (prop) {
case eCSSProperty_binding :
rv = GetBehavior(frame, *getter_AddRefs(val)); break;
rv = GetBinding(frame, *getter_AddRefs(val)); break;
case eCSSProperty_display :
rv = GetDisplay(frame, *getter_AddRefs(val)); break;
case eCSSProperty_position :
@@ -601,6 +618,10 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName,
// List properties
case eCSSProperty_list_style_image:
rv = GetListStyleImage(frame, *getter_AddRefs(val)); break;
case eCSSProperty_list_style_position:
rv = GetListStylePosition(frame, *getter_AddRefs(val)); break;
case eCSSProperty_list_style_type:
rv = GetListStyleType(frame, *getter_AddRefs(val)); break;
// Display properties
case eCSSProperty_visibility:
@@ -615,12 +636,23 @@ nsComputedDOMStyle::GetPropertyCSSValue(const nsAReadableString& aPropertyName,
rv = GetClip(frame, *getter_AddRefs(val)); break;
case eCSSProperty_overflow:
rv = GetOverflow(frame, *getter_AddRefs(val)); break;
// Direction
case eCSSProperty_direction:
rv = GetDirection(frame, *getter_AddRefs(val)); break;
case eCSSProperty_unicode_bidi:
rv = GetUnicodeBidi(frame, *getter_AddRefs(val)); break;
// User interface
case eCSSProperty_cursor:
rv = GetCursor(frame, *getter_AddRefs(val)); break;
default :
break;
}
if (val) {
rv = val->QueryInterface(NS_GET_IID(nsIDOMCSSValue), (void **)aReturn);
rv = CallQueryInterface(val, aReturn);
}
// Release the current style context for it should be re-resolved
@@ -719,8 +751,8 @@ nsComputedDOMStyle::GetBackgroundRepeat(nsAWritableString& aBackgroundRepeat)
#endif
nsresult
nsComputedDOMStyle::GetBehavior(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
nsComputedDOMStyle::GetBinding(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
@@ -729,15 +761,14 @@ nsComputedDOMStyle::GetBehavior(nsIFrame *aFrame,
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display, aFrame);
if (display) {
val->SetString(display->mBinding);
if (display && !display->mBinding.IsEmpty()) {
val->SetURI(display->mBinding);
}
else {
val->SetString(NS_LITERAL_STRING(""));
val->SetString(NS_LITERAL_STRING("none"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -938,8 +969,7 @@ nsComputedDOMStyle::GetColor(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -978,8 +1008,7 @@ nsComputedDOMStyle::GetFontFamily(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -995,8 +1024,7 @@ nsComputedDOMStyle::GetFontSize(nsIFrame *aFrame,
// Note: font->mSize is the 'computed size'; font->mFont.size is the 'actual size'
val->SetTwips(font? font->mSize:0);
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1023,8 +1051,7 @@ nsComputedDOMStyle::GetFontStyle(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1052,8 +1079,7 @@ nsComputedDOMStyle::GetFontWeight(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1080,8 +1106,7 @@ nsComputedDOMStyle::GetFontVariant(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1111,8 +1136,7 @@ nsComputedDOMStyle::GetBackgroundColor(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1129,15 +1153,14 @@ nsComputedDOMStyle::GetBackgroundImage(nsIFrame *aFrame,
if (color->mBackgroundFlags & NS_STYLE_BG_IMAGE_NONE) {
val->SetString(NS_LITERAL_STRING("none"));
} else {
val->SetString(color->mBackgroundImage);
val->SetURI(color->mBackgroundImage);
}
}
else {
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1196,8 +1219,7 @@ nsComputedDOMStyle::GetBorderCollapse(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1372,8 +1394,7 @@ nsComputedDOMStyle::GetMarkerOffset(nsIFrame *aFrame,
val->SetTwips(0);
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1419,8 +1440,7 @@ nsComputedDOMStyle::GetOutlineWidth(nsIFrame *aFrame,
val->SetTwips(0);
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1448,8 +1468,7 @@ nsComputedDOMStyle::GetOutlineStyle(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1475,8 +1494,7 @@ nsComputedDOMStyle::GetOutlineColor(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1509,8 +1527,7 @@ nsComputedDOMStyle::GetZIndex(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING("auto"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1520,22 +1537,71 @@ nsComputedDOMStyle::GetListStyleImage(nsIFrame *aFrame,
nsROCSSPrimitiveValue* val=GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleList* list;
const nsStyleList* list = nsnull;
GetStyleData(eStyleStruct_List, (const nsStyleStruct*&)list, aFrame);
if(list) {
if (list->mListStyleImage.IsEmpty()) {
val->SetString(NS_LITERAL_STRING("none"));
} else {
val->SetString(list->mListStyleImage);
val->SetURI(list->mListStyleImage);
}
}
else {
val->SetString(NS_LITERAL_STRING("none"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void**)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetListStylePosition(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleList *list = nsnull;
GetStyleData(eStyleStruct_List, (const nsStyleStruct*&)list, aFrame);
if (list) {
const nsAFlatCString& style =
nsCSSProps::SearchKeywordTable(list->mListStylePosition,
nsCSSProps::kListStylePositionKTable);
val->SetString(style);
}
else {
val->SetString(NS_LITERAL_STRING("outside"));
}
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetListStyleType(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleList *list = nsnull;
GetStyleData(eStyleStruct_List, (const nsStyleStruct*&)list, aFrame);
if (list && list->mListStyleType != NS_STYLE_LIST_STYLE_BASIC) {
if (list->mListStyleType == NS_STYLE_LIST_STYLE_NONE) {
val->SetString(NS_LITERAL_STRING("none"));
} else {
const nsAFlatCString& style =
nsCSSProps::SearchKeywordTable(list->mListStyleType,
nsCSSProps::kListStyleKTable);
val->SetString(style);
}
}
else {
val->SetString(NS_LITERAL_STRING("disc"));
}
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1558,8 +1624,7 @@ nsComputedDOMStyle::GetTextAlign(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING("start"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1620,8 +1685,7 @@ nsComputedDOMStyle::GetTextDecoration(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -1776,8 +1840,85 @@ nsComputedDOMStyle::GetVisibility(nsIFrame *aFrame,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetDirection(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleVisibility *visibility = nsnull;
GetStyleData(eStyleStruct_Visibility,(const nsStyleStruct*&)visibility,aFrame);
if (visibility) {
const nsAFlatCString & direction =
nsCSSProps::SearchKeywordTable(visibility->mDirection,
nsCSSProps::kDirectionKTable);
val->SetString(direction);
} else {
val->SetString(NS_LITERAL_STRING("ltr"));
}
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetUnicodeBidi(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
#ifdef IBMBIDI
const nsStyleTextReset *text = nsnull;
GetStyleData(eStyleStruct_TextReset,(const nsStyleStruct*&)text,aFrame);
if (text && text->mUnicodeBidi != NS_STYLE_UNICODE_BIDI_NORMAL) {
const nsAFlatCString& bidi =
nsCSSProps::SearchKeywordTable(text->mUnicodeBidi,
nsCSSProps::kUnicodeBidiKTable);
val->SetString(bidi);
} else {
val->SetString(NS_LITERAL_STRING("normal"));
}
#else // IBMBIDI
val->SetString(NS_LITERAL_STRING("normal"));
#endif // IBMBIDI
return CallQueryInterface(val, &aValue);
}
nsresult
nsComputedDOMStyle::GetCursor(nsIFrame *aFrame,
nsIDOMCSSPrimitiveValue*& aValue)
{
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleUserInterface *ui = nsnull;
GetStyleData(eStyleStruct_UserInterface,(const nsStyleStruct*&)ui,aFrame);
if (ui) {
if (!ui->mCursorImage.IsEmpty()) {
val->SetURI(ui->mCursorImage);
} else {
if (ui->mCursor == NS_STYLE_CURSOR_AUTO) {
val->SetString(NS_LITERAL_STRING("auto"));
} else {
const nsAFlatCString& cursor =
nsCSSProps::SearchKeywordTable(ui->mCursor,
nsCSSProps::kCursorKTable);
val->SetString(cursor);
}
}
} else {
val->SetString(NS_LITERAL_STRING("auto"));
}
return CallQueryInterface(val, &aValue);
}
#if 0
@@ -1867,60 +2008,25 @@ nsComputedDOMStyle::GetDisplay(nsIFrame *aFrame,
nsROCSSPrimitiveValue *val = GetROCSSPrimitiveValue();
NS_ENSURE_TRUE(val, NS_ERROR_OUT_OF_MEMORY);
const nsStyleDisplay *displayData = nsnull;
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)displayData, aFrame);
const nsStyleDisplay* display = nsnull;
GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display, aFrame);
if (display) {
switch (display->mDisplay) {
case NS_STYLE_DISPLAY_NONE :
val->SetString(NS_LITERAL_STRING("none")); break;
case NS_STYLE_DISPLAY_BLOCK :
val->SetString(NS_LITERAL_STRING("block")); break;
case NS_STYLE_DISPLAY_INLINE :
val->SetString(NS_LITERAL_STRING("inline")); break;
case NS_STYLE_DISPLAY_INLINE_BLOCK :
val->SetString(NS_LITERAL_STRING("inline-block")); break;
case NS_STYLE_DISPLAY_LIST_ITEM :
val->SetString(NS_LITERAL_STRING("list-item")); break;
case NS_STYLE_DISPLAY_MARKER :
val->SetString(NS_LITERAL_STRING("marker")); break;
case NS_STYLE_DISPLAY_RUN_IN :
val->SetString(NS_LITERAL_STRING("run-in")); break;
case NS_STYLE_DISPLAY_COMPACT :
val->SetString(NS_LITERAL_STRING("compact")); break;
case NS_STYLE_DISPLAY_TABLE :
val->SetString(NS_LITERAL_STRING("table")); break;
case NS_STYLE_DISPLAY_INLINE_TABLE :
val->SetString(NS_LITERAL_STRING("inline-table")); break;
case NS_STYLE_DISPLAY_TABLE_ROW_GROUP :
val->SetString(NS_LITERAL_STRING("table-row-group")); break;
case NS_STYLE_DISPLAY_TABLE_COLUMN :
val->SetString(NS_LITERAL_STRING("table-column")); break;
case NS_STYLE_DISPLAY_TABLE_COLUMN_GROUP :
val->SetString(NS_LITERAL_STRING("table-column-group")); break;
case NS_STYLE_DISPLAY_TABLE_HEADER_GROUP :
val->SetString(NS_LITERAL_STRING("table-header-group")); break;
case NS_STYLE_DISPLAY_TABLE_FOOTER_GROUP :
val->SetString(NS_LITERAL_STRING("table-footer-group")); break;
case NS_STYLE_DISPLAY_TABLE_ROW :
val->SetString(NS_LITERAL_STRING("table-row")); break;
case NS_STYLE_DISPLAY_TABLE_CELL :
val->SetString(NS_LITERAL_STRING("table-cell")); break;
case NS_STYLE_DISPLAY_TABLE_CAPTION :
val->SetString(NS_LITERAL_STRING("table-caption")); break;
case NS_STYLE_DISPLAY_MENU :
val->SetString(NS_LITERAL_STRING("menu")); break;
default :
val->SetString(NS_LITERAL_STRING("")); break;
break;
if (displayData) {
if (displayData->mDisplay == NS_STYLE_DISPLAY_NONE) {
val->SetString(NS_LITERAL_STRING("none"));
}
else {
const nsAFlatCString& display =
nsCSSProps::SearchKeywordTable(displayData->mDisplay,
nsCSSProps::kDisplayKTable);
val->SetString(display);
}
}
else {
val->SetString(NS_LITERAL_STRING("inline"));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -2201,8 +2307,7 @@ nsComputedDOMStyle::GetHeight(nsIFrame *aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -2949,8 +3054,7 @@ nsComputedDOMStyle::GetAbsoluteOffset(PRUint8 aSide, nsIFrame* aFrame,
val->SetTwips(0);
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3046,8 +3150,7 @@ nsComputedDOMStyle::GetRelativeOffset(PRUint8 aSide, nsIFrame* aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3097,8 +3200,7 @@ nsComputedDOMStyle::GetStaticOffset(PRUint8 aSide, nsIFrame* aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
@@ -3172,8 +3274,7 @@ nsComputedDOMStyle::GetPaddingWidthFor(PRUint8 aSide,
nscoord width = GetPaddingWidthCoordFor(aSide, aFrame);
val->SetTwips(width);
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nscoord
@@ -3293,8 +3394,7 @@ nsComputedDOMStyle::GetBorderWidthFor(PRUint8 aSide,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3328,8 +3428,7 @@ nsComputedDOMStyle::GetBorderColorFor(PRUint8 aSide,
val->SetString(NS_LITERAL_STRING(""));
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nsresult
@@ -3343,8 +3442,7 @@ nsComputedDOMStyle::GetMarginWidthFor(PRUint8 aSide,
nscoord width = GetMarginWidthCoordFor(aSide, aFrame);
val->SetTwips(width);
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
nscoord
@@ -3483,8 +3581,7 @@ nsComputedDOMStyle::GetWidth(nsIFrame *aFrame,
}
}
return val->QueryInterface(NS_GET_IID(nsIDOMCSSPrimitiveValue),
(void **)&aValue);
return CallQueryInterface(val, &aValue);
}
#if 0

View File

@@ -121,6 +121,13 @@ nsROCSSPrimitiveValue::GetCssText(nsAWritableString& aCssText)
tmpStr.Append(mValue.mString);
break;
}
case CSS_URI :
{
tmpStr.Assign(NS_LITERAL_STRING("url(") +
nsDependentString(mValue.mString) +
NS_LITERAL_STRING(")"));
break;
}
case CSS_PERCENTAGE :
{
tmpStr.AppendFloat(mValue.mFloat * 100);
@@ -185,7 +192,6 @@ nsROCSSPrimitiveValue::GetCssText(nsAWritableString& aCssText)
case CSS_HZ :
case CSS_KHZ :
case CSS_DIMENSION :
case CSS_URI :
case CSS_IDENT :
case CSS_ATTR :
case CSS_COUNTER :
@@ -316,11 +322,22 @@ nsROCSSPrimitiveValue::SetStringValue(PRUint16 aStringType,
NS_IMETHODIMP
nsROCSSPrimitiveValue::GetStringValue(nsAWritableString& aReturn)
{
if (mType != CSS_STRING) {
aReturn.Truncate();
return NS_ERROR_DOM_INVALID_ACCESS_ERR;
switch (mType) {
case CSS_STRING:
aReturn.Assign(mValue.mString);
break;
case CSS_URI:
aReturn.Assign(NS_LITERAL_STRING("url(") +
nsDependentString(mValue.mString) +
NS_LITERAL_STRING(")"));
break;
case CSS_IDENT:
case CSS_ATTR:
default:
aReturn.Truncate();
return NS_ERROR_DOM_INVALID_ACCESS_ERR;
break;
}
aReturn.Assign(mValue.mString);
return NS_OK;
}

View File

@@ -99,6 +99,20 @@ public:
mType = CSS_STRING;
}
void SetURI(const nsACString& aString)
{
Reset();
mValue.mString = ToNewUnicode(aString);
mType = CSS_URI;
}
void SetURI(const nsAString& aString)
{
Reset();
mValue.mString = ToNewUnicode(aString);
mType = CSS_URI;
}
void SetRect(nsIDOMRect* aRect)
{
NS_PRECONDITION(aRect, "Null rect being set!");
@@ -110,7 +124,7 @@ public:
void Reset(void)
{
if (mType == CSS_STRING) {
if (mType == CSS_STRING || mType == CSS_URI) {
NS_ASSERTION(mValue.mString, "Null string should never happen");
nsMemory::Free(mValue.mString);
mValue.mString = nsnull;