[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/4.1/kdelibs/khtml/css
From: Harri Porten <porten () kde ! org>
Date: 2008-10-18 16:24:23
Message-ID: 1224347063.598424.18652.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 873040 by porten:
Merged revision 871476:
Use computedStyle() without directly asking the render object.
There are still some cases where it is a hard requirement.
M +36 -9 css_renderstyledeclarationimpl.cpp
--- branches/KDE/4.1/kdelibs/khtml/css/css_renderstyledeclarationimpl.cpp \
#873039:873040 @@ -377,18 +377,15 @@
docimpl->updateLayout();
}
- RenderObject *renderer = m_node->renderer();
- if (!renderer) {
- // Handle display:none at the very least. By definition if we don't have a \
renderer
- // we are considered to have no display.
- if (propertyID == CSS_PROP_DISPLAY)
- return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
- return 0;
- }
- RenderStyle *style = renderer->style();
+ RenderStyle *style = node->computedStyle();
if (!style)
return 0;
+ RenderObject *renderer = node->renderer(); // can be NULL
+ // temporary(?) measure to handle with missing render object
+ // check how we can better deal with it on a case-by-case basis
+#define RETURN_NULL_ON_NULL(ptr) if(ptr == 0) return 0;
+
switch(propertyID)
{
case CSS_PROP_BACKGROUND_COLOR:
@@ -418,6 +415,7 @@
return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
case CSS_PROP_BACKGROUND_POSITION:
{
+ RETURN_NULL_ON_NULL(renderer);
DOMString string;
Length length(style->backgroundXPosition());
if (length.isPercent())
@@ -433,8 +431,10 @@
return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
}
case CSS_PROP_BACKGROUND_POSITION_X:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->backgroundXPosition(), \
renderer->contentWidth()); case CSS_PROP_BACKGROUND_POSITION_Y:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->backgroundYPosition(), \
renderer->contentHeight()); case CSS_PROP_BORDER_COLLAPSE:
if (style->borderCollapse())
@@ -480,6 +480,7 @@
case CSS_PROP_BORDER_LEFT_WIDTH:
return new CSSPrimitiveValueImpl( style->borderLeftWidth(), \
CSSPrimitiveValue::CSS_PX ); case CSS_PROP_BOTTOM:
+ RETURN_NULL_ON_NULL(renderer);
return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM);
case CSS_PROP_BOX_SIZING:
if (style->boxSizing() == BORDER_BOX)
@@ -701,8 +702,10 @@
return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
}
case CSS_PROP_HEIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl(renderer->contentHeight(), \
CSSPrimitiveValue::CSS_PX); case CSS_PROP_LEFT:
+ RETURN_NULL_ON_NULL(renderer);
return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
case CSS_PROP_LETTER_SPACING:
if (style->letterSpacing() == 0)
@@ -743,12 +746,16 @@
case CSS_PROP_LIST_STYLE_TYPE:
return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), \
CSSPrimitiveValue::CSS_STRING); case CSS_PROP_MARGIN_TOP:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->marginTop(), renderer->contentHeight());
case CSS_PROP_MARGIN_RIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->marginRight(), renderer->contentWidth());
case CSS_PROP_MARGIN_BOTTOM:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->marginBottom(), renderer->contentHeight());
case CSS_PROP_MARGIN_LEFT:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->marginLeft(), renderer->contentWidth());
case CSS_PROP__KHTML_MARQUEE:
// FIXME: unimplemented
@@ -773,6 +780,7 @@
Q_ASSERT(0);
return 0;
case CSS_PROP__KHTML_MARQUEE_INCREMENT:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->marqueeIncrement(), renderer->contentWidth());
case CSS_PROP__KHTML_MARQUEE_REPETITION:
if (style->marqueeLoopCount() < 0)
@@ -797,18 +805,22 @@
Q_ASSERT(0);
return 0;
case CSS_PROP_MAX_HEIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->availableHeight(),
CSSPrimitiveValue::CSS_PX );
break;
case CSS_PROP_MAX_WIDTH:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->maxWidth(),
CSSPrimitiveValue::CSS_PX );
break;
case CSS_PROP_MIN_HEIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->contentHeight(),
CSSPrimitiveValue::CSS_PX );
break;
case CSS_PROP_MIN_WIDTH:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->minWidth(),
CSSPrimitiveValue::CSS_PX );
break;
@@ -856,12 +868,16 @@
return 0;
}
case CSS_PROP_PADDING_TOP:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->paddingTop(), renderer->contentHeight());
case CSS_PROP_PADDING_RIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->paddingRight(), renderer->contentWidth());
case CSS_PROP_PADDING_BOTTOM:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->paddingBottom(), renderer->contentHeight());
case CSS_PROP_PADDING_LEFT:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->paddingLeft(), renderer->contentWidth());
case CSS_PROP_PAGE_BREAK_AFTER:
switch (style->pageBreakAfter()) {
@@ -916,6 +932,7 @@
case CSS_PROP_QUOTES:
break;
case CSS_PROP_RIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
case CSS_PROP_SIZE:
break;
@@ -955,6 +972,7 @@
return new CSSPrimitiveValueImpl(DOMString(string), \
CSSPrimitiveValue::CSS_STRING); }
case CSS_PROP_TEXT_INDENT:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->textIndent(), renderer->contentWidth());
case CSS_PROP_TEXT_SHADOW:
return valueForShadow(style->textShadow());
@@ -972,6 +990,7 @@
Q_ASSERT(0);
break;
case CSS_PROP_TOP:
+ RETURN_NULL_ON_NULL(renderer);
return getPositionOffsetValue(renderer, CSS_PROP_TOP);
case CSS_PROP_UNICODE_BIDI:
switch (style->unicodeBidi()) {
@@ -1006,6 +1025,7 @@
case BASELINE_MIDDLE:
return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE);
case LENGTH:
+ RETURN_NULL_ON_NULL(renderer);
return valueForLength(style->verticalAlignLength(), \
renderer->contentWidth()); }
Q_ASSERT(0);
@@ -1044,6 +1064,7 @@
case CSS_PROP_WIDOWS:
return new CSSPrimitiveValueImpl(style->widows(), \
CSSPrimitiveValue::CSS_NUMBER); case CSS_PROP_WIDTH:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->contentWidth(),
CSSPrimitiveValue::CSS_PX );
case CSS_PROP_WORD_SPACING:
@@ -1061,18 +1082,22 @@
case CSS_PROP_BORDER_STYLE:
break;
case CSS_PROP_BORDER_TOP:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->borderTop(),
CSSPrimitiveValue::CSS_PX );
break;
case CSS_PROP_BORDER_RIGHT:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->borderRight(),
CSSPrimitiveValue::CSS_PX );
break;
case CSS_PROP_BORDER_BOTTOM:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->borderBottom(),
CSSPrimitiveValue::CSS_PX );
break;
case CSS_PROP_BORDER_LEFT:
+ RETURN_NULL_ON_NULL(renderer);
return new CSSPrimitiveValueImpl( renderer->borderLeft(),
CSSPrimitiveValue::CSS_PX );
break;
@@ -1122,6 +1147,8 @@
return 0;
}
+#undef RETURN_NULL_ON_NULL
+
DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
{
CSSValueImpl* value = getPropertyCSSValue(propertyID);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic