summaryrefslogtreecommitdiffstats
path: root/khtml/css/css_renderstyledeclarationimpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/css/css_renderstyledeclarationimpl.cpp')
-rw-r--r--khtml/css/css_renderstyledeclarationimpl.cpp1147
1 files changed, 1147 insertions, 0 deletions
diff --git a/khtml/css/css_renderstyledeclarationimpl.cpp b/khtml/css/css_renderstyledeclarationimpl.cpp
new file mode 100644
index 000000000..25de55f4a
--- /dev/null
+++ b/khtml/css/css_renderstyledeclarationimpl.cpp
@@ -0,0 +1,1147 @@
+/**
+ * css_renderstyledeclarationimpl.cpp
+ *
+ * Copyright (C) 2004 Zack Rusin <zack@kde.org>
+ * Copyright (C) 2004,2005 Apple Computer, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#include "css_renderstyledeclarationimpl.h"
+
+#include "rendering/render_style.h"
+#include "rendering/render_object.h"
+
+#include "cssproperties.h"
+#include "cssvalues.h"
+
+using namespace DOM;
+using namespace khtml;
+
+// List of all properties we know how to compute, omitting shorthands.
+static const int computedProperties[] = {
+ CSS_PROP_BACKGROUND_COLOR,
+ CSS_PROP_BACKGROUND_IMAGE,
+ CSS_PROP_BACKGROUND_REPEAT,
+ CSS_PROP_BACKGROUND_ATTACHMENT,
+ CSS_PROP_BACKGROUND_POSITION,
+ CSS_PROP_BACKGROUND_POSITION_X,
+ CSS_PROP_BACKGROUND_POSITION_Y,
+ CSS_PROP_BORDER_COLLAPSE,
+ CSS_PROP_BORDER_SPACING,
+ CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING,
+ CSS_PROP__KHTML_BORDER_VERTICAL_SPACING,
+ CSS_PROP_BORDER_TOP_COLOR,
+ CSS_PROP_BORDER_RIGHT_COLOR,
+ CSS_PROP_BORDER_BOTTOM_COLOR,
+ CSS_PROP_BORDER_LEFT_COLOR,
+ CSS_PROP_BORDER_TOP_STYLE,
+ CSS_PROP_BORDER_RIGHT_STYLE,
+ CSS_PROP_BORDER_BOTTOM_STYLE,
+ CSS_PROP_BORDER_LEFT_STYLE,
+ CSS_PROP_BORDER_TOP_WIDTH,
+ CSS_PROP_BORDER_RIGHT_WIDTH,
+ CSS_PROP_BORDER_BOTTOM_WIDTH,
+ CSS_PROP_BORDER_LEFT_WIDTH,
+ CSS_PROP_BOTTOM,
+ CSS_PROP_CAPTION_SIDE,
+ CSS_PROP_CLEAR,
+ CSS_PROP_COLOR,
+ CSS_PROP_CURSOR,
+ CSS_PROP_DIRECTION,
+ CSS_PROP_DISPLAY,
+ CSS_PROP_EMPTY_CELLS,
+ CSS_PROP_FLOAT,
+ CSS_PROP_FONT_FAMILY,
+ CSS_PROP_FONT_SIZE,
+ CSS_PROP_FONT_STYLE,
+ CSS_PROP_FONT_VARIANT,
+ CSS_PROP_FONT_WEIGHT,
+ CSS_PROP_HEIGHT,
+ CSS_PROP_LEFT,
+ CSS_PROP_LETTER_SPACING,
+ CSS_PROP_LINE_HEIGHT,
+ CSS_PROP_LIST_STYLE_IMAGE,
+ CSS_PROP_LIST_STYLE_POSITION,
+ CSS_PROP_LIST_STYLE_TYPE,
+ CSS_PROP_MARGIN_TOP,
+ CSS_PROP_MARGIN_RIGHT,
+ CSS_PROP_MARGIN_BOTTOM,
+ CSS_PROP_MARGIN_LEFT,
+ CSS_PROP__KHTML_MARQUEE_DIRECTION,
+ CSS_PROP__KHTML_MARQUEE_INCREMENT,
+ CSS_PROP__KHTML_MARQUEE_REPETITION,
+ CSS_PROP__KHTML_MARQUEE_STYLE,
+ CSS_PROP_MAX_HEIGHT,
+ CSS_PROP_MAX_WIDTH,
+ CSS_PROP_MIN_HEIGHT,
+ CSS_PROP_MIN_WIDTH,
+ CSS_PROP_OPACITY,
+ CSS_PROP_ORPHANS,
+ CSS_PROP_OUTLINE_STYLE,
+ CSS_PROP_OVERFLOW,
+ CSS_PROP_OVERFLOW_X,
+ CSS_PROP_OVERFLOW_Y,
+ CSS_PROP_PADDING_TOP,
+ CSS_PROP_PADDING_RIGHT,
+ CSS_PROP_PADDING_BOTTOM,
+ CSS_PROP_PADDING_LEFT,
+ CSS_PROP_PAGE_BREAK_AFTER,
+ CSS_PROP_PAGE_BREAK_BEFORE,
+ CSS_PROP_PAGE_BREAK_INSIDE,
+ CSS_PROP_POSITION,
+ CSS_PROP_RIGHT,
+ CSS_PROP_TABLE_LAYOUT,
+ CSS_PROP_TEXT_ALIGN,
+ CSS_PROP_TEXT_DECORATION,
+ CSS_PROP_TEXT_INDENT,
+ CSS_PROP_TEXT_SHADOW,
+ CSS_PROP_TEXT_TRANSFORM,
+ CSS_PROP_TOP,
+ CSS_PROP_UNICODE_BIDI,
+ CSS_PROP_VERTICAL_ALIGN,
+ CSS_PROP_VISIBILITY,
+ CSS_PROP_WHITE_SPACE,
+ CSS_PROP_WIDOWS,
+ CSS_PROP_WIDTH,
+ CSS_PROP_WORD_SPACING,
+ CSS_PROP_Z_INDEX,
+};
+
+const unsigned numComputedProperties = sizeof(computedProperties) / sizeof(computedProperties[0]);
+
+
+static CSSValueImpl *valueForLength(const Length &length, int max)
+{
+ if (length.isPercent()) {
+ return new CSSPrimitiveValueImpl(length.value(), CSSPrimitiveValue::CSS_PERCENTAGE);
+ }
+ else {
+ return new CSSPrimitiveValueImpl(length.minWidth(max), CSSPrimitiveValue::CSS_PX);
+ }
+}
+
+static CSSValueImpl *valueForBorderStyle(EBorderStyle style)
+{
+ switch (style) {
+ case khtml::BNATIVE:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NATIVE);
+ case khtml::BNONE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ case khtml::BHIDDEN:
+ return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
+ case khtml::INSET:
+ return new CSSPrimitiveValueImpl(CSS_VAL_INSET);
+ case khtml::GROOVE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_GROOVE);
+ case khtml::RIDGE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIDGE);
+ case khtml::OUTSET:
+ return new CSSPrimitiveValueImpl(CSS_VAL_OUTSET);
+ case khtml::DOTTED:
+ return new CSSPrimitiveValueImpl(CSS_VAL_DOTTED);
+ case khtml::DASHED:
+ return new CSSPrimitiveValueImpl(CSS_VAL_DASHED);
+ case khtml::SOLID:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SOLID);
+ case khtml::DOUBLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_DOUBLE);
+ }
+ Q_ASSERT( 0 );
+ return 0;
+}
+
+static CSSValueImpl *valueForTextAlign(ETextAlign align)
+{
+ switch (align) {
+ case khtml::TAAUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case khtml::LEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case khtml::RIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ case khtml::CENTER:
+ return new CSSPrimitiveValueImpl(CSS_VAL_CENTER);
+ case khtml::JUSTIFY:
+ return new CSSPrimitiveValueImpl(CSS_VAL_JUSTIFY);
+ case khtml::KHTML_LEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
+ case khtml::KHTML_RIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
+ case khtml::KHTML_CENTER:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_CENTER);
+ }
+ Q_ASSERT( 0 );
+ return 0;
+}
+
+DOMString khtml::stringForListStyleType(EListStyleType type)
+{
+ switch (type) {
+ case khtml::LDISC:
+ return "disc";
+ case khtml::LCIRCLE:
+ return "circle";
+ case khtml::LSQUARE:
+ return "square";
+ case khtml::LBOX:
+ return "box";
+ case khtml::LDIAMOND:
+ return "-khtml-diamond";
+ case khtml::LDECIMAL:
+ return "decimal";
+ case khtml::DECIMAL_LEADING_ZERO:
+ return "decimal-leading-zero";
+ case khtml::ARABIC_INDIC:
+ return "-khtml-arabic-indic";
+ case khtml::LAO:
+ return "-khtml-lao";
+ case khtml::PERSIAN:
+ return "-khtml-persian";
+ case khtml::URDU:
+ return "-khtml-urdu";
+ case khtml::THAI:
+ return "-khtml-thai";
+ case khtml::TIBETAN:
+ return "-khtml-tibetan";
+ case khtml::LOWER_ROMAN:
+ return "lower-roman";
+ case khtml::UPPER_ROMAN:
+ return "upper-roman";
+ case khtml::HEBREW:
+ return "hebrew";
+ case khtml::ARMENIAN:
+ return "armenian";
+ case khtml::GEORGIAN:
+ return "georgian";
+ case khtml::CJK_IDEOGRAPHIC:
+ return "cjk-ideographic";
+ case khtml::JAPANESE_FORMAL:
+ return "-khtml-japanese-formal";
+ case khtml::JAPANESE_INFORMAL:
+ return "-khtml-japanese-informal";
+ case khtml::SIMP_CHINESE_FORMAL:
+ return "-khtml-simp-chinese-formal";
+ case khtml::SIMP_CHINESE_INFORMAL:
+ return "-khtml-simp-chinese-informal";
+ case khtml::TRAD_CHINESE_FORMAL:
+ return "-khtml-trad-chinese-formal";
+ case khtml::TRAD_CHINESE_INFORMAL:
+ return "-khtml-trad-chinese-informal";
+ case khtml::LOWER_GREEK:
+ return "lower-greek";
+ case khtml::UPPER_GREEK:
+ return "-khtml-upper-greek";
+ case khtml::LOWER_ALPHA:
+ return "lower-alpha";
+ case khtml::UPPER_ALPHA:
+ return "upper-alpha";
+ case khtml::LOWER_LATIN:
+ return "lower-latin";
+ case khtml::UPPER_LATIN:
+ return "upper-latin";
+ case khtml::HIRAGANA:
+ return "hiragana";
+ case khtml::KATAKANA:
+ return "katakana";
+ case khtml::HIRAGANA_IROHA:
+ return "hiragana-iroha";
+ case khtml::KATAKANA_IROHA:
+ return "katakana_iroha";
+ case khtml::LNONE:
+ return "none";
+ }
+ Q_ASSERT( 0 );
+ return "";
+}
+
+static CSSPrimitiveValueImpl* valueForColor(QColor color)
+{
+ if (color.isValid())
+ return new CSSPrimitiveValueImpl(color.rgb());//### KDE4: use rgba!
+ else
+ return new CSSPrimitiveValueImpl(khtml::transparentColor);
+}
+
+static CSSValueImpl* valueForShadow(const ShadowData *shadow)
+{
+ if (!shadow)
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ CSSValueListImpl *list = new CSSValueListImpl;
+ for (const ShadowData *s = shadow; s; s = s->next) {
+ CSSPrimitiveValueImpl *x = new CSSPrimitiveValueImpl(s->x, CSSPrimitiveValue::CSS_PX);
+ CSSPrimitiveValueImpl *y = new CSSPrimitiveValueImpl(s->y, CSSPrimitiveValue::CSS_PX);
+ CSSPrimitiveValueImpl *blur = new CSSPrimitiveValueImpl(s->blur, CSSPrimitiveValue::CSS_PX);
+ CSSPrimitiveValueImpl *color = valueForColor(s->color);
+ list->append(new ShadowValueImpl(x, y, blur, color));
+ }
+ return list;
+}
+
+static CSSValueImpl *getPositionOffsetValue(RenderObject *renderer, int propertyID)
+{
+ if (!renderer)
+ return 0;
+
+ RenderStyle *style = renderer->style();
+ if (!style)
+ return 0;
+
+ Length l;
+ switch (propertyID) {
+ case CSS_PROP_LEFT:
+ l = style->left();
+ break;
+ case CSS_PROP_RIGHT:
+ l = style->right();
+ break;
+ case CSS_PROP_TOP:
+ l = style->top();
+ break;
+ case CSS_PROP_BOTTOM:
+ l = style->bottom();
+ break;
+ default:
+ return 0;
+ }
+
+ if (renderer->isPositioned())
+ return valueForLength(l, renderer->contentWidth());
+
+ if (renderer->isRelPositioned())
+ // FIXME: It's not enough to simply return "auto" values for one offset if the other side is defined.
+ // In other words if left is auto and right is not auto, then left's computed value is negative right.
+ // So we should get the opposite length unit and see if it is auto.
+ return valueForLength(l, renderer->contentWidth());
+
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ }
+
+RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )
+ : CSSStyleDeclarationImpl(0), m_node(node)
+{
+ //kdDebug() << "Render Style Declaration created" << endl;
+}
+
+RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl()
+{
+ //kdDebug() << "Render Style Declaration destroyed" << endl;
+}
+
+DOM::DOMString RenderStyleDeclarationImpl::cssText() const
+{
+ DOMString result;
+
+ for (unsigned i = 0; i < numComputedProperties; i++) {
+ if (i != 0)
+ result += " ";
+ result += getPropertyName(computedProperties[i]);
+ result += ": ";
+ result += getPropertyValue(computedProperties[i]);
+ result += ";";
+ }
+
+ return result;
+}
+
+void RenderStyleDeclarationImpl::setCssText( DOM::DOMString )
+{
+ // ### report that this sucka is read only
+}
+
+CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const
+{
+ NodeImpl *node = m_node.get();
+ if (!node)
+ return 0;
+
+ // Make sure our layout is up to date before we allow a query on these attributes.
+ DocumentImpl* docimpl = node->getDocument();
+ if (docimpl) {
+ docimpl->updateLayout();
+ }
+
+ RenderObject *renderer = m_node->renderer();
+ if (!renderer)
+ return 0;
+ RenderStyle *style = renderer->style();
+ if (!style)
+ return 0;
+
+ switch(propertyID)
+ {
+ case CSS_PROP_BACKGROUND_COLOR:
+ return valueForColor(style->backgroundColor());
+ case CSS_PROP_BACKGROUND_IMAGE:
+ if (style->backgroundImage())
+ return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),
+ CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ case CSS_PROP_BACKGROUND_REPEAT:
+ switch (style->backgroundRepeat()) {
+ case khtml::REPEAT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT);
+ case khtml::REPEAT_X:
+ return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_X);
+ case khtml::REPEAT_Y:
+ return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_Y);
+ case khtml::NO_REPEAT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NO_REPEAT);
+ default:
+ Q_ASSERT( 0 );
+ }
+ case CSS_PROP_BACKGROUND_ATTACHMENT:
+ if (style->backgroundAttachment())
+ return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
+ else
+ return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
+ case CSS_PROP_BACKGROUND_POSITION:
+ {
+ DOMString string;
+ Length length(style->backgroundXPosition());
+ if (length.isPercent())
+ string = QString::number(length.value()) + "%";
+ else
+ string = QString::number(length.minWidth(renderer->contentWidth()));
+ string += " ";
+ length = style->backgroundYPosition();
+ if (length.isPercent())
+ string += QString::number(length.value()) + "%";
+ else
+ string += QString::number(length.minWidth(renderer->contentWidth()));
+ return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
+ }
+ case CSS_PROP_BACKGROUND_POSITION_X:
+ return valueForLength(style->backgroundXPosition(), renderer->contentWidth());
+ case CSS_PROP_BACKGROUND_POSITION_Y:
+ return valueForLength(style->backgroundYPosition(), renderer->contentHeight());
+ case CSS_PROP_BORDER_COLLAPSE:
+ if (style->borderCollapse())
+ return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
+ else
+ return new CSSPrimitiveValueImpl(CSS_VAL_SEPARATE);
+ case CSS_PROP_BORDER_SPACING:
+ {
+ QString string(QString::number(style->borderHorizontalSpacing()) +
+ "px " +
+ QString::number(style->borderVerticalSpacing()) +
+ "px");
+ return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
+ }
+ case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:
+ return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),
+ CSSPrimitiveValue::CSS_PX);
+ case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:
+ return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),
+ CSSPrimitiveValue::CSS_PX);
+ case CSS_PROP_BORDER_TOP_COLOR:
+ return valueForColor(style->borderTopColor());
+ case CSS_PROP_BORDER_RIGHT_COLOR:
+ return valueForColor(style->borderRightColor());
+ case CSS_PROP_BORDER_BOTTOM_COLOR:
+ return valueForColor(style->borderBottomColor());
+ case CSS_PROP_BORDER_LEFT_COLOR:
+ return valueForColor(style->borderLeftColor());
+ case CSS_PROP_BORDER_TOP_STYLE:
+ return valueForBorderStyle(style->borderTopStyle());
+ case CSS_PROP_BORDER_RIGHT_STYLE:
+ return valueForBorderStyle(style->borderRightStyle());
+ case CSS_PROP_BORDER_BOTTOM_STYLE:
+ return valueForBorderStyle(style->borderBottomStyle());
+ case CSS_PROP_BORDER_LEFT_STYLE:
+ return valueForBorderStyle(style->borderLeftStyle());
+ case CSS_PROP_BORDER_TOP_WIDTH:
+ return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );
+ case CSS_PROP_BORDER_RIGHT_WIDTH:
+ return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );
+ case CSS_PROP_BORDER_BOTTOM_WIDTH:
+ return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );
+ case CSS_PROP_BORDER_LEFT_WIDTH:
+ return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );
+ case CSS_PROP_BOTTOM:
+ return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM);
+ case CSS_PROP_CAPTION_SIDE:
+ switch (style->captionSide()) {
+ case CAPLEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case CAPRIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ case CAPTOP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
+ case CAPBOTTOM:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_CLEAR:
+ switch (style->clear()) {
+ case CNONE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ case CLEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case CRIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ case CBOTH:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BOTH);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_CLIP:
+ break;
+ case CSS_PROP_COLOR:
+ return valueForColor(style->color());
+ case CSS_PROP_CONTENT:
+ break;
+ case CSS_PROP_COUNTER_INCREMENT:
+ break;
+ case CSS_PROP_COUNTER_RESET:
+ break;
+ case CSS_PROP_CURSOR:
+ switch (style->cursor()) {
+ case CURSOR_AUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case CURSOR_CROSS:
+ return new CSSPrimitiveValueImpl(CSS_VAL_CROSSHAIR);
+ case CURSOR_DEFAULT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_DEFAULT);
+ case CURSOR_POINTER:
+ return new CSSPrimitiveValueImpl(CSS_VAL_POINTER);
+ case CURSOR_MOVE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_MOVE);
+ case CURSOR_PROGRESS:
+ return new CSSPrimitiveValueImpl(CSS_VAL_PROGRESS);
+ case CURSOR_E_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_E_RESIZE);
+ case CURSOR_NE_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NE_RESIZE);
+ case CURSOR_NW_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NW_RESIZE);
+ case CURSOR_N_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_N_RESIZE);
+ case CURSOR_SE_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SE_RESIZE);
+ case CURSOR_SW_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SW_RESIZE);
+ case CURSOR_S_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_S_RESIZE);
+ case CURSOR_W_RESIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_W_RESIZE);
+ case CURSOR_TEXT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TEXT);
+ case CURSOR_WAIT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_WAIT);
+ case CURSOR_HELP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_HELP);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_DIRECTION:
+ switch (style->direction()) {
+ case LTR:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LTR);
+ case RTL:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RTL);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_DISPLAY:
+ switch (style->display()) {
+ case INLINE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_INLINE);
+ case BLOCK:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BLOCK);
+ case LIST_ITEM:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LIST_ITEM);
+ case RUN_IN:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RUN_IN);
+ case COMPACT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_COMPACT);
+ case INLINE_BLOCK:
+ return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_BLOCK);
+ case TABLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE);
+ case INLINE_TABLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_TABLE);
+ case TABLE_ROW_GROUP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW_GROUP);
+ case TABLE_HEADER_GROUP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_HEADER_GROUP);
+ case TABLE_FOOTER_GROUP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_FOOTER_GROUP);
+ case TABLE_ROW:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW);
+ case TABLE_COLUMN_GROUP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN_GROUP);
+ case TABLE_COLUMN:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN);
+ case TABLE_CELL:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CELL);
+ case TABLE_CAPTION:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CAPTION);
+ case NONE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ }
+ Q_ASSERT( 0 );
+ break;
+ case CSS_PROP_EMPTY_CELLS:
+ switch (style->emptyCells()) {
+ case SHOW:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SHOW);
+ case HIDE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_HIDE);
+ }
+ Q_ASSERT( 0 );
+ break;
+ case CSS_PROP_FLOAT:
+ {
+ switch (style->floating()) {
+ case FNONE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ case FLEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case FRIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ case FLEFT_ALIGN:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
+ case FRIGHT_ALIGN:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
+ }
+ }
+ case CSS_PROP_FONT_FAMILY:
+ {
+ FontDef def = style->htmlFont().getFontDef();
+ return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING);
+ }
+ case CSS_PROP_FONT_SIZE:
+ {
+ FontDef def = style->htmlFont().getFontDef();
+ return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX);
+ }
+ case CSS_PROP_FONT_STYLE:
+ {
+ // FIXME: handle oblique
+ FontDef def = style->htmlFont().getFontDef();
+ if (def.italic)
+ return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC);
+ else
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ }
+ case CSS_PROP_FONT_VARIANT:
+ {
+ FontDef def = style->htmlFont().getFontDef();
+ if (def.smallCaps)
+ return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS);
+ else
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ }
+ case CSS_PROP_FONT_WEIGHT:
+ {
+ // FIXME: this does not reflect the full range of weights
+ // that can be expressed with CSS
+ FontDef def = style->htmlFont().getFontDef();
+ if (def.weight == QFont::Bold)
+ return new CSSPrimitiveValueImpl(CSS_VAL_BOLD);
+ else
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ }
+ case CSS_PROP_HEIGHT:
+ return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
+ case CSS_PROP_LEFT:
+ return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
+ case CSS_PROP_LETTER_SPACING:
+ if (style->letterSpacing() == 0)
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
+ case CSS_PROP_LINE_HEIGHT:
+ {
+ // Note: internally a specified <number> value gets encoded as a percentage,
+ // so the isPercent() case corresponds to the <number> case;
+ // values < 0 are used to mark "normal"; and specified %%
+ // get computed down to px by the time they get to RenderStyle
+ // already
+ Length length(style->lineHeight());
+ if (length.value() < 0)
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ if (length.isPercent()) {
+ //XXX: merge from webcore the computedStyle/specifiedStyle distinction in rendering/font.h
+ float computedSize = style->htmlFont().getFontDef().size;
+ return new CSSPrimitiveValueImpl((int)(length.value() * computedSize) / 100, CSSPrimitiveValue::CSS_PX);
+ }
+ else {
+ return new CSSPrimitiveValueImpl(length.value(), CSSPrimitiveValue::CSS_PX);
+ }
+ }
+ case CSS_PROP_LIST_STYLE_IMAGE:
+ if (style->listStyleImage())
+ return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI);
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ case CSS_PROP_LIST_STYLE_POSITION:
+ switch (style->listStylePosition()) {
+ case OUTSIDE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE);
+ case INSIDE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE);
+ }
+ Q_ASSERT( 0 );
+ break;
+ case CSS_PROP_LIST_STYLE_TYPE:
+ return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING);
+ case CSS_PROP_MARGIN_TOP:
+ return valueForLength(style->marginTop(), renderer->contentHeight());
+ case CSS_PROP_MARGIN_RIGHT:
+ return valueForLength(style->marginRight(), renderer->contentWidth());
+ case CSS_PROP_MARGIN_BOTTOM:
+ return valueForLength(style->marginBottom(), renderer->contentHeight());
+ case CSS_PROP_MARGIN_LEFT:
+ return valueForLength(style->marginLeft(), renderer->contentWidth());
+ case CSS_PROP__KHTML_MARQUEE:
+ // FIXME: unimplemented
+ break;
+ case CSS_PROP__KHTML_MARQUEE_DIRECTION:
+ switch (style->marqueeDirection()) {
+ case MFORWARD:
+ return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS);
+ case MBACKWARD:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS);
+ case MAUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case MUP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_UP);
+ case MDOWN:
+ return new CSSPrimitiveValueImpl(CSS_VAL_DOWN);
+ case MLEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case MRIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ }
+ Q_ASSERT(0);
+ return 0;
+ case CSS_PROP__KHTML_MARQUEE_INCREMENT:
+ return valueForLength(style->marqueeIncrement(), renderer->contentWidth());
+ case CSS_PROP__KHTML_MARQUEE_REPETITION:
+ if (style->marqueeLoopCount() < 0)
+ return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE);
+ return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP__KHTML_MARQUEE_SPEED:
+ // FIXME: unimplemented
+ break;
+ case CSS_PROP__KHTML_MARQUEE_STYLE:
+ switch (style->marqueeBehavior()) {
+ case MNONE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ case MSCROLL:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
+ case MSLIDE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE);
+ case MALTERNATE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE);
+ case MUNFURL:
+ return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL);
+ }
+ Q_ASSERT(0);
+ return 0;
+ case CSS_PROP_MAX_HEIGHT:
+ return new CSSPrimitiveValueImpl( renderer->availableHeight(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_MAX_WIDTH:
+ return new CSSPrimitiveValueImpl( renderer->maxWidth(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_MIN_HEIGHT:
+ return new CSSPrimitiveValueImpl( renderer->contentHeight(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_MIN_WIDTH:
+ return new CSSPrimitiveValueImpl( renderer->minWidth(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_OPACITY:
+ return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_ORPHANS:
+ return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_OUTLINE_COLOR:
+ break;
+ case CSS_PROP_OUTLINE_OFFSET:
+ break;
+ case CSS_PROP_OUTLINE_STYLE:
+ if (style->outlineStyleIsAuto())
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ return valueForBorderStyle(style->outlineStyle());
+ case CSS_PROP_OUTLINE_WIDTH:
+ break;
+ case CSS_PROP_OVERFLOW:
+ case CSS_PROP_OVERFLOW_X:
+ case CSS_PROP_OVERFLOW_Y: {
+ EOverflow overflow;
+ switch (propertyID) {
+ case CSS_PROP_OVERFLOW_X:
+ overflow = style->overflowX();
+ break;
+ case CSS_PROP_OVERFLOW_Y:
+ overflow = style->overflowY();
+ break;
+ default:
+ overflow = kMax(style->overflowX(), style->overflowY());
+ }
+ switch (overflow) {
+ case OVISIBLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
+ case OHIDDEN:
+ return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
+ case OSCROLL:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
+ case OAUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case OMARQUEE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE);
+ }
+ Q_ASSERT(0);
+ return 0;
+ }
+ case CSS_PROP_PADDING_TOP:
+ return valueForLength(style->paddingTop(), renderer->contentHeight());
+ case CSS_PROP_PADDING_RIGHT:
+ return valueForLength(style->paddingRight(), renderer->contentWidth());
+ case CSS_PROP_PADDING_BOTTOM:
+ return valueForLength(style->paddingBottom(), renderer->contentHeight());
+ case CSS_PROP_PADDING_LEFT:
+ return valueForLength(style->paddingLeft(), renderer->contentWidth());
+ case CSS_PROP_PAGE_BREAK_AFTER:
+ switch (style->pageBreakAfter()) {
+ case PBAUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case PBALWAYS:
+ return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
+ case PBAVOID:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
+ case PBLEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case PBRIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_PAGE_BREAK_BEFORE:
+ switch (style->pageBreakBefore()) {
+ case PBAUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case PBALWAYS:
+ return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
+ case PBAVOID:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
+ case PBLEFT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
+ case PBRIGHT:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_PAGE_BREAK_INSIDE:
+ if (style->pageBreakInside())
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ else
+ return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_POSITION:
+ switch (style->position()) {
+ case STATIC:
+ return new CSSPrimitiveValueImpl(CSS_VAL_STATIC);
+ case RELATIVE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE);
+ case ABSOLUTE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE);
+ case FIXED:
+ return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_QUOTES:
+ break;
+ case CSS_PROP_RIGHT:
+ return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
+ case CSS_PROP_SIZE:
+ break;
+ case CSS_PROP_TABLE_LAYOUT:
+ switch (style->tableLayout()) {
+ case TAUTO:
+ return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
+ case TFIXED:
+ return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_TEXT_ALIGN:
+ return valueForTextAlign(style->textAlign());
+ case CSS_PROP_TEXT_DECORATION:
+ {
+ QString string;
+ if (style->textDecoration() & khtml::UNDERLINE)
+ string += "underline";
+ if (style->textDecoration() & khtml::OVERLINE) {
+ if (string.length() > 0)
+ string += " ";
+ string += "overline";
+ }
+ if (style->textDecoration() & khtml::LINE_THROUGH) {
+ if (string.length() > 0)
+ string += " ";
+ string += "line-through";
+ }
+ if (style->textDecoration() & khtml::BLINK) {
+ if (string.length() > 0)
+ string += " ";
+ string += "blink";
+ }
+ if (string.length() == 0)
+ string = "none";
+ return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
+ }
+ case CSS_PROP_TEXT_INDENT:
+ return valueForLength(style->textIndent(), renderer->contentWidth());
+ case CSS_PROP_TEXT_SHADOW:
+ return valueForShadow(style->textShadow());
+ case CSS_PROP_TEXT_TRANSFORM:
+ switch (style->textTransform()) {
+ case CAPITALIZE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_CAPITALIZE);
+ case UPPERCASE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_UPPERCASE);
+ case LOWERCASE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_LOWERCASE);
+ case TTNONE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_TOP:
+ return getPositionOffsetValue(renderer, CSS_PROP_TOP);
+ case CSS_PROP_UNICODE_BIDI:
+ switch (style->unicodeBidi()) {
+ case UBNormal:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ case Embed:
+ return new CSSPrimitiveValueImpl(CSS_VAL_EMBED);
+ case Override:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BIDI_OVERRIDE);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_VERTICAL_ALIGN:
+ {
+ switch (style->verticalAlign()) {
+ case BASELINE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BASELINE);
+ case MIDDLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_MIDDLE);
+ case SUB:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SUB);
+ case SUPER:
+ return new CSSPrimitiveValueImpl(CSS_VAL_SUPER);
+ case TEXT_TOP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_TOP);
+ case TEXT_BOTTOM:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_BOTTOM);
+ case TOP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
+ case BOTTOM:
+ return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
+ case BASELINE_MIDDLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE);
+ case LENGTH:
+ return valueForLength(style->verticalAlignLength(), renderer->contentWidth());
+ }
+ Q_ASSERT(0);
+ break;
+ }
+ case CSS_PROP_VISIBILITY:
+ switch (style->visibility()) {
+ case khtml::VISIBLE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
+ case khtml::HIDDEN:
+ return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
+ case khtml::COLLAPSE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
+ }
+ Q_ASSERT(0);
+ break;
+ case CSS_PROP_WHITE_SPACE:
+ {
+ switch (style->whiteSpace()) {
+ case NORMAL:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ case PRE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_PRE);
+ case PRE_WRAP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_PRE_WRAP);
+ case PRE_LINE:
+ return new CSSPrimitiveValueImpl(CSS_VAL_PRE_LINE);
+ case NOWRAP:
+ return new CSSPrimitiveValueImpl(CSS_VAL_NOWRAP);
+ case KHTML_NOWRAP:
+ return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NOWRAP);
+ }
+ Q_ASSERT(0);
+ break;
+ }
+ case CSS_PROP_WIDOWS:
+ return new CSSPrimitiveValueImpl(style->widows(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_WIDTH:
+ return new CSSPrimitiveValueImpl( renderer->contentWidth(),
+ CSSPrimitiveValue::CSS_PX );
+ case CSS_PROP_WORD_SPACING:
+ return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX);
+ case CSS_PROP_Z_INDEX:
+ if (style->hasAutoZIndex())
+ return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
+ return new CSSPrimitiveValueImpl(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER);
+ case CSS_PROP_BACKGROUND:
+ break;
+ case CSS_PROP_BORDER:
+ break;
+ case CSS_PROP_BORDER_COLOR:
+ break;
+ case CSS_PROP_BORDER_STYLE:
+ break;
+ case CSS_PROP_BORDER_TOP:
+ return new CSSPrimitiveValueImpl( renderer->borderTop(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_BORDER_RIGHT:
+ return new CSSPrimitiveValueImpl( renderer->borderRight(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_BORDER_BOTTOM:
+ return new CSSPrimitiveValueImpl( renderer->borderBottom(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_BORDER_LEFT:
+ return new CSSPrimitiveValueImpl( renderer->borderLeft(),
+ CSSPrimitiveValue::CSS_PX );
+ break;
+ case CSS_PROP_BORDER_WIDTH:
+ break;
+ case CSS_PROP_FONT:
+ break;
+ case CSS_PROP_LIST_STYLE:
+ break;
+ case CSS_PROP_MARGIN:
+ break;
+ case CSS_PROP_OUTLINE:
+ break;
+ case CSS_PROP_PADDING:
+ break;
+ case CSS_PROP_SCROLLBAR_BASE_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_FACE_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_SHADOW_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_TRACK_COLOR:
+ break;
+ case CSS_PROP_SCROLLBAR_ARROW_COLOR:
+ break;
+ case CSS_PROP__KHTML_FLOW_MODE:
+ break;
+ case CSS_PROP__KHTML_USER_INPUT:
+ break;
+ default:
+ Q_ASSERT( 0 );
+ break;
+ }
+ return 0;
+}
+
+DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
+{
+ CSSValueImpl* value = getPropertyCSSValue(propertyID);
+ if (value) {
+ DOMString val = value->cssText();
+ delete value;
+ return val;
+ }
+ return "";
+}
+
+bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const
+{
+ // All computed styles have a priority of false (not "important").
+ return false;
+}
+
+DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool )
+{
+ // ### emit error since we're read-only
+ return DOMString();
+}
+
+bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool,
+ bool )
+{
+ // ### emit error since we're read-only
+ return false;
+}
+
+void RenderStyleDeclarationImpl::setProperty ( int, int, bool,
+ bool )
+{
+ // ### emit error since we're read-only
+}
+
+void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool,
+ bool, bool )
+{
+ // ### emit error since we're read-only
+}
+
+void RenderStyleDeclarationImpl::setProperty( const DOMString& )
+{
+ // ### emit error since we're read-only
+}
+
+unsigned long RenderStyleDeclarationImpl::length() const
+{
+ return numComputedProperties;
+}
+
+DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long i ) const
+{
+ if (i >= numComputedProperties)
+ return DOMString();
+
+ return getPropertyName(computedProperties[i]);
+}
+
+CSSProperty RenderStyleDeclarationImpl::property( int id ) const
+{
+ CSSProperty prop;
+ prop.m_id = id;
+ prop.m_important = false;
+ prop.nonCSSHint = false;
+
+ CSSValueImpl* v = getPropertyCSSValue( id );
+ if ( !v )
+ v = new CSSPrimitiveValueImpl;
+ prop.setValue( v );
+ return prop;
+}
+