css_renderstyledeclarationimpl.cpp

00001 
00022 #include "css_renderstyledeclarationimpl.h"
00023 
00024 #include "rendering/render_style.h"
00025 #include "rendering/render_object.h"
00026 
00027 #include "cssproperties.h"
00028 #include "cssvalues.h"
00029 
00030 using namespace DOM;
00031 using namespace khtml;
00032 
00033 // List of all properties we know how to compute, omitting shorthands.
00034 static const int computedProperties[] = {
00035     CSS_PROP_BACKGROUND_COLOR,
00036     CSS_PROP_BACKGROUND_IMAGE,
00037     CSS_PROP_BACKGROUND_REPEAT,
00038     CSS_PROP_BACKGROUND_ATTACHMENT,
00039     CSS_PROP_BACKGROUND_POSITION,
00040     CSS_PROP_BACKGROUND_POSITION_X,
00041     CSS_PROP_BACKGROUND_POSITION_Y,
00042     CSS_PROP_BORDER_COLLAPSE,
00043     CSS_PROP_BORDER_SPACING,
00044     CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING,
00045     CSS_PROP__KHTML_BORDER_VERTICAL_SPACING,
00046     CSS_PROP_BORDER_TOP_COLOR,
00047     CSS_PROP_BORDER_RIGHT_COLOR,
00048     CSS_PROP_BORDER_BOTTOM_COLOR,
00049     CSS_PROP_BORDER_LEFT_COLOR,
00050     CSS_PROP_BORDER_TOP_STYLE,
00051     CSS_PROP_BORDER_RIGHT_STYLE,
00052     CSS_PROP_BORDER_BOTTOM_STYLE,
00053     CSS_PROP_BORDER_LEFT_STYLE,
00054     CSS_PROP_BORDER_TOP_WIDTH,
00055     CSS_PROP_BORDER_RIGHT_WIDTH,
00056     CSS_PROP_BORDER_BOTTOM_WIDTH,
00057     CSS_PROP_BORDER_LEFT_WIDTH,
00058     CSS_PROP_BOTTOM,
00059     CSS_PROP_CAPTION_SIDE,
00060     CSS_PROP_CLEAR,
00061     CSS_PROP_COLOR,
00062     CSS_PROP_CURSOR,
00063     CSS_PROP_DIRECTION,
00064     CSS_PROP_DISPLAY,
00065     CSS_PROP_EMPTY_CELLS,
00066     CSS_PROP_FLOAT,
00067     CSS_PROP_FONT_FAMILY,
00068     CSS_PROP_FONT_SIZE,
00069     CSS_PROP_FONT_STYLE,
00070     CSS_PROP_FONT_VARIANT,
00071     CSS_PROP_FONT_WEIGHT,
00072     CSS_PROP_HEIGHT,
00073     CSS_PROP_LEFT,
00074     CSS_PROP_LETTER_SPACING,
00075     CSS_PROP_LINE_HEIGHT,
00076     CSS_PROP_LIST_STYLE_IMAGE,
00077     CSS_PROP_LIST_STYLE_POSITION,
00078     CSS_PROP_LIST_STYLE_TYPE,
00079     CSS_PROP_MARGIN_TOP,
00080     CSS_PROP_MARGIN_RIGHT,
00081     CSS_PROP_MARGIN_BOTTOM,
00082     CSS_PROP_MARGIN_LEFT,
00083     CSS_PROP__KHTML_MARQUEE_DIRECTION,
00084     CSS_PROP__KHTML_MARQUEE_INCREMENT,
00085     CSS_PROP__KHTML_MARQUEE_REPETITION,
00086     CSS_PROP__KHTML_MARQUEE_STYLE,
00087     CSS_PROP_MAX_HEIGHT,
00088     CSS_PROP_MAX_WIDTH,
00089     CSS_PROP_MIN_HEIGHT,
00090     CSS_PROP_MIN_WIDTH,
00091     CSS_PROP_OPACITY,
00092     CSS_PROP_ORPHANS,
00093     CSS_PROP_OUTLINE_STYLE,
00094     CSS_PROP_OVERFLOW,
00095     CSS_PROP_PADDING_TOP,
00096     CSS_PROP_PADDING_RIGHT,
00097     CSS_PROP_PADDING_BOTTOM,
00098     CSS_PROP_PADDING_LEFT,
00099     CSS_PROP_PAGE_BREAK_AFTER,
00100     CSS_PROP_PAGE_BREAK_BEFORE,
00101     CSS_PROP_PAGE_BREAK_INSIDE,
00102     CSS_PROP_POSITION,
00103     CSS_PROP_RIGHT,
00104     CSS_PROP_TABLE_LAYOUT,
00105     CSS_PROP_TEXT_ALIGN,
00106     CSS_PROP_TEXT_DECORATION,
00107     CSS_PROP_TEXT_INDENT,
00108     CSS_PROP_TEXT_SHADOW,
00109     CSS_PROP_TEXT_TRANSFORM,
00110     CSS_PROP_TOP,
00111     CSS_PROP_UNICODE_BIDI,
00112     CSS_PROP_VERTICAL_ALIGN,
00113     CSS_PROP_VISIBILITY,
00114     CSS_PROP_WHITE_SPACE,
00115     CSS_PROP_WIDOWS,
00116     CSS_PROP_WIDTH,
00117     CSS_PROP_WORD_SPACING,
00118     CSS_PROP_Z_INDEX,
00119 };
00120 
00121 const unsigned numComputedProperties = sizeof(computedProperties) / sizeof(computedProperties[0]);
00122 
00123 
00124 static CSSValueImpl *valueForLength(const Length &length, int max)
00125 {
00126     if (length.isPercent()) {
00127         return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PERCENTAGE);
00128     }
00129     else {
00130         return new CSSPrimitiveValueImpl(length.minWidth(max), CSSPrimitiveValue::CSS_PX);
00131     }
00132 }
00133 
00134 static CSSValueImpl *valueForBorderStyle(EBorderStyle style)
00135 {
00136     switch (style) {
00137     case khtml::BNATIVE:
00138         return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NATIVE);
00139     case khtml::BNONE:
00140         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00141     case khtml::BHIDDEN:
00142         return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00143     case khtml::INSET:
00144         return new CSSPrimitiveValueImpl(CSS_VAL_INSET);
00145     case khtml::GROOVE:
00146         return new CSSPrimitiveValueImpl(CSS_VAL_GROOVE);
00147     case khtml::RIDGE:
00148          return new CSSPrimitiveValueImpl(CSS_VAL_RIDGE);
00149     case khtml::OUTSET:
00150         return new CSSPrimitiveValueImpl(CSS_VAL_OUTSET);
00151     case khtml::DOTTED:
00152         return new CSSPrimitiveValueImpl(CSS_VAL_DOTTED);
00153     case khtml::DASHED:
00154         return new CSSPrimitiveValueImpl(CSS_VAL_DASHED);
00155     case khtml::SOLID:
00156         return new CSSPrimitiveValueImpl(CSS_VAL_SOLID);
00157     case khtml::DOUBLE:
00158         return new CSSPrimitiveValueImpl(CSS_VAL_DOUBLE);
00159     }
00160     Q_ASSERT( 0 );
00161     return 0;
00162 }
00163 
00164 static CSSValueImpl *valueForTextAlign(ETextAlign align)
00165 {
00166     switch (align) {
00167     case khtml::TAAUTO:
00168         return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00169     case khtml::LEFT:
00170         return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00171     case khtml::RIGHT:
00172         return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00173     case khtml::CENTER:
00174         return new CSSPrimitiveValueImpl(CSS_VAL_CENTER);
00175     case khtml::JUSTIFY:
00176         return new CSSPrimitiveValueImpl(CSS_VAL_JUSTIFY);
00177     case khtml::KHTML_LEFT:
00178         return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
00179     case khtml::KHTML_RIGHT:
00180         return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
00181     case khtml::KHTML_CENTER:
00182         return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_CENTER);
00183     }
00184     Q_ASSERT( 0 );
00185     return 0;
00186 }
00187 
00188 DOMString khtml::stringForListStyleType(EListStyleType type)
00189 {
00190     switch (type) {
00191         case khtml::LDISC:
00192             return "disc";
00193         case khtml::LCIRCLE:
00194             return "circle";
00195         case khtml::LSQUARE:
00196             return "square";
00197         case khtml::LBOX:
00198             return "box";
00199         case khtml::LDIAMOND:
00200             return "-khtml-diamond";
00201         case khtml::LDECIMAL:
00202             return "decimal";
00203         case khtml::DECIMAL_LEADING_ZERO:
00204             return "decimal-leading-zero";
00205         case khtml::ARABIC_INDIC:
00206             return "-khtml-arabic-indic";
00207         case khtml::LAO:
00208             return "-khtml-lao";
00209         case khtml::PERSIAN:
00210             return "-khtml-persian";
00211         case khtml::URDU:
00212             return "-khtml-urdu";
00213         case khtml::THAI:
00214             return "-khtml-thai";
00215         case khtml::TIBETAN:
00216             return "-khtml-tibetan";
00217         case khtml::LOWER_ROMAN:
00218             return "lower-roman";
00219         case khtml::UPPER_ROMAN:
00220             return "upper-roman";
00221         case khtml::HEBREW:
00222             return "hebrew";
00223         case khtml::ARMENIAN:
00224             return "armenian";
00225         case khtml::GEORGIAN:
00226             return "georgian";
00227         case khtml::CJK_IDEOGRAPHIC:
00228             return "cjk-ideographic";
00229         case khtml::JAPANESE_FORMAL:
00230             return "-khtml-japanese-formal";
00231         case khtml::JAPANESE_INFORMAL:
00232             return "-khtml-japanese-informal";
00233         case khtml::SIMP_CHINESE_FORMAL:
00234             return "-khtml-simp-chinese-formal";
00235         case khtml::SIMP_CHINESE_INFORMAL:
00236             return "-khtml-simp-chinese-informal";
00237         case khtml::TRAD_CHINESE_FORMAL:
00238             return "-khtml-trad-chinese-formal";
00239         case khtml::TRAD_CHINESE_INFORMAL:
00240             return "-khtml-trad-chinese-informal";
00241         case khtml::LOWER_GREEK:
00242             return "lower-greek";
00243         case khtml::UPPER_GREEK:
00244             return "-khtml-upper-greek";
00245         case khtml::LOWER_ALPHA:
00246             return "lower-alpha";
00247         case khtml::UPPER_ALPHA:
00248             return "upper-alpha";
00249         case khtml::LOWER_LATIN:
00250             return "lower-latin";
00251         case khtml::UPPER_LATIN:
00252             return "upper-latin";
00253         case khtml::HIRAGANA:
00254             return "hiragana";
00255         case khtml::KATAKANA:
00256             return "katakana";
00257         case khtml::HIRAGANA_IROHA:
00258             return "hiragana-iroha";
00259         case khtml::KATAKANA_IROHA:
00260             return "katakana_iroha";
00261         case khtml::LNONE:
00262             return "none";
00263     }
00264     Q_ASSERT( 0 );
00265     return "";
00266 }
00267 
00268 static CSSPrimitiveValueImpl* valueForColor(QColor color)
00269 {
00270     if (color.isValid())
00271         return new CSSPrimitiveValueImpl(color.rgb());//### KDE4: use rgba!
00272     else
00273         return new CSSPrimitiveValueImpl(khtml::transparentColor);
00274 }
00275 
00276 static CSSValueImpl* valueForShadow(const ShadowData *shadow)
00277 {
00278     if (!shadow)
00279         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00280     CSSValueListImpl *list = new CSSValueListImpl;
00281     for (const ShadowData *s = shadow; s; s = s->next) {
00282         CSSPrimitiveValueImpl *x = new CSSPrimitiveValueImpl(s->x, CSSPrimitiveValue::CSS_PX);
00283         CSSPrimitiveValueImpl *y = new CSSPrimitiveValueImpl(s->y, CSSPrimitiveValue::CSS_PX);
00284         CSSPrimitiveValueImpl *blur = new CSSPrimitiveValueImpl(s->blur, CSSPrimitiveValue::CSS_PX);
00285         CSSPrimitiveValueImpl *color = valueForColor(s->color);
00286         list->append(new ShadowValueImpl(x, y, blur, color));
00287     }
00288     return list;
00289 }
00290 
00291 static CSSValueImpl *getPositionOffsetValue(RenderObject *renderer, int propertyID)
00292 {
00293     if (!renderer)
00294         return 0;
00295 
00296     RenderStyle *style = renderer->style();
00297     if (!style)
00298         return 0;
00299 
00300     Length l;
00301     switch (propertyID) {
00302     case CSS_PROP_LEFT:
00303         l = style->left();
00304         break;
00305     case CSS_PROP_RIGHT:
00306         l = style->right();
00307         break;
00308     case CSS_PROP_TOP:
00309         l = style->top();
00310         break;
00311     case CSS_PROP_BOTTOM:
00312         l = style->bottom();
00313         break;
00314     default:
00315         return 0;
00316     }
00317 
00318     if (renderer->isPositioned())
00319         return valueForLength(l, renderer->contentWidth());
00320 
00321     if (renderer->isRelPositioned())
00322         // FIXME: It's not enough to simply return "auto" values for one offset if the other side is defined.
00323         // In other words if left is auto and right is not auto, then left's computed value is negative right.
00324         // So we should get the opposite length unit and see if it is auto.
00325         return valueForLength(l, renderer->contentWidth());
00326 
00327     return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00328  }
00329 
00330 RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )
00331     : CSSStyleDeclarationImpl(0), m_node(node)
00332 {
00333     kdDebug() << "Render Style Declaration created" << endl;
00334 }
00335 
00336 RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl()
00337 {
00338     kdDebug() << "Render Style Declaration destroyed" << endl;
00339 }
00340 
00341 DOM::DOMString RenderStyleDeclarationImpl::cssText() const
00342 {
00343     DOMString result;
00344 
00345     for (unsigned i = 0; i < numComputedProperties; i++) {
00346         if (i != 0)
00347             result += " ";
00348         result += getPropertyName(computedProperties[i]);
00349         result += ": ";
00350         result += getPropertyValue(computedProperties[i]);
00351         result += ";";
00352     }
00353 
00354     return result;
00355 }
00356 
00357 void RenderStyleDeclarationImpl::setCssText( DOM::DOMString )
00358 {
00359     // ### report that this sucka is read only
00360 }
00361 
00362 CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const
00363 {
00364     NodeImpl *node = m_node.get();
00365     if (!node)
00366         return 0;
00367 
00368     // Make sure our layout is up to date before we allow a query on these attributes.
00369     DocumentImpl* docimpl = node->getDocument();
00370     if (docimpl) {
00371         docimpl->updateLayout();
00372     }
00373 
00374     RenderObject *renderer = m_node->renderer();
00375     if (!renderer)
00376         return 0;
00377     RenderStyle *style = renderer->style();
00378     if (!style)
00379         return 0;
00380 
00381     switch(propertyID)
00382     {
00383     case CSS_PROP_BACKGROUND_COLOR:
00384         return valueForColor(style->backgroundColor());
00385     case CSS_PROP_BACKGROUND_IMAGE:
00386         if (style->backgroundImage())
00387             return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),
00388                                              CSSPrimitiveValue::CSS_URI);
00389         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00390     case CSS_PROP_BACKGROUND_REPEAT:
00391         switch (style->backgroundRepeat()) {
00392         case khtml::REPEAT:
00393             return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT);
00394         case khtml::REPEAT_X:
00395             return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_X);
00396         case khtml::REPEAT_Y:
00397             return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_Y);
00398         case khtml::NO_REPEAT:
00399             return new CSSPrimitiveValueImpl(CSS_VAL_NO_REPEAT);
00400         default:
00401             Q_ASSERT( 0 );
00402         }
00403     case CSS_PROP_BACKGROUND_ATTACHMENT:
00404         if (style->backgroundAttachment())
00405             return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00406         else
00407             return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00408     case CSS_PROP_BACKGROUND_POSITION:
00409     {
00410         DOMString string;
00411         Length length(style->backgroundXPosition());
00412         if (length.isPercent())
00413             string = QString::number(length._length) + "%";
00414         else
00415             string = QString::number(length.minWidth(renderer->contentWidth()));
00416         string += " ";
00417         length = style->backgroundYPosition();
00418         if (length.isPercent())
00419             string += QString::number(length._length) + "%";
00420         else
00421             string += QString::number(length.minWidth(renderer->contentWidth()));
00422         return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00423     }
00424     case CSS_PROP_BACKGROUND_POSITION_X:
00425         return valueForLength(style->backgroundXPosition(), renderer->contentWidth());
00426     case CSS_PROP_BACKGROUND_POSITION_Y:
00427         return valueForLength(style->backgroundYPosition(), renderer->contentHeight());
00428     case CSS_PROP_BORDER_COLLAPSE:
00429         if (style->borderCollapse())
00430             return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00431         else
00432             return new CSSPrimitiveValueImpl(CSS_VAL_SEPARATE);
00433     case CSS_PROP_BORDER_SPACING:
00434     {
00435         QString string(QString::number(style->borderHorizontalSpacing()) +
00436                        "px " +
00437                        QString::number(style->borderVerticalSpacing()) +
00438                        "px");
00439         return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00440     }
00441     case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:
00442         return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),
00443                                          CSSPrimitiveValue::CSS_PX);
00444     case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:
00445         return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),
00446                                          CSSPrimitiveValue::CSS_PX);
00447     case CSS_PROP_BORDER_TOP_COLOR:
00448         return valueForColor(style->borderTopColor());
00449     case CSS_PROP_BORDER_RIGHT_COLOR:
00450         return valueForColor(style->borderRightColor());
00451     case CSS_PROP_BORDER_BOTTOM_COLOR:
00452         return valueForColor(style->borderBottomColor());
00453     case CSS_PROP_BORDER_LEFT_COLOR:
00454         return valueForColor(style->borderLeftColor());
00455     case CSS_PROP_BORDER_TOP_STYLE:
00456         return valueForBorderStyle(style->borderTopStyle());
00457     case CSS_PROP_BORDER_RIGHT_STYLE:
00458         return valueForBorderStyle(style->borderRightStyle());
00459     case CSS_PROP_BORDER_BOTTOM_STYLE:
00460         return valueForBorderStyle(style->borderBottomStyle());
00461     case CSS_PROP_BORDER_LEFT_STYLE:
00462         return valueForBorderStyle(style->borderLeftStyle());
00463     case CSS_PROP_BORDER_TOP_WIDTH:
00464         return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );
00465     case CSS_PROP_BORDER_RIGHT_WIDTH:
00466         return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );
00467     case CSS_PROP_BORDER_BOTTOM_WIDTH:
00468         return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );
00469     case CSS_PROP_BORDER_LEFT_WIDTH:
00470         return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );
00471     case CSS_PROP_BOTTOM:
00472         return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM);
00473     case CSS_PROP_CAPTION_SIDE:
00474         switch (style->captionSide()) {
00475         case CAPLEFT:
00476             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00477         case CAPRIGHT:
00478             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00479         case CAPTOP:
00480             return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00481         case CAPBOTTOM:
00482             return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00483         }
00484         Q_ASSERT(0);
00485         break;
00486     case CSS_PROP_CLEAR:
00487         switch (style->clear()) {
00488         case CNONE:
00489             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00490         case CLEFT:
00491             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00492         case CRIGHT:
00493             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00494         case CBOTH:
00495             return new CSSPrimitiveValueImpl(CSS_VAL_BOTH);
00496         }
00497         Q_ASSERT(0);
00498         break;
00499     case CSS_PROP_CLIP:
00500         break;
00501     case CSS_PROP_COLOR:
00502         return valueForColor(style->color());
00503     case CSS_PROP_CONTENT:
00504         break;
00505     case CSS_PROP_COUNTER_INCREMENT:
00506         break;
00507     case CSS_PROP_COUNTER_RESET:
00508         break;
00509     case CSS_PROP_CURSOR:
00510         switch (style->cursor()) {
00511         case CURSOR_AUTO:
00512             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00513         case CURSOR_CROSS:
00514             return new CSSPrimitiveValueImpl(CSS_VAL_CROSSHAIR);
00515         case CURSOR_DEFAULT:
00516             return new CSSPrimitiveValueImpl(CSS_VAL_DEFAULT);
00517         case CURSOR_POINTER:
00518             return new CSSPrimitiveValueImpl(CSS_VAL_POINTER);
00519         case CURSOR_MOVE:
00520             return new CSSPrimitiveValueImpl(CSS_VAL_MOVE);
00521         case CURSOR_PROGRESS:
00522             return new CSSPrimitiveValueImpl(CSS_VAL_PROGRESS);
00523         case CURSOR_E_RESIZE:
00524             return new CSSPrimitiveValueImpl(CSS_VAL_E_RESIZE);
00525         case CURSOR_NE_RESIZE:
00526             return new CSSPrimitiveValueImpl(CSS_VAL_NE_RESIZE);
00527         case CURSOR_NW_RESIZE:
00528             return new CSSPrimitiveValueImpl(CSS_VAL_NW_RESIZE);
00529         case CURSOR_N_RESIZE:
00530             return new CSSPrimitiveValueImpl(CSS_VAL_N_RESIZE);
00531         case CURSOR_SE_RESIZE:
00532             return new CSSPrimitiveValueImpl(CSS_VAL_SE_RESIZE);
00533         case CURSOR_SW_RESIZE:
00534             return new CSSPrimitiveValueImpl(CSS_VAL_SW_RESIZE);
00535         case CURSOR_S_RESIZE:
00536             return new CSSPrimitiveValueImpl(CSS_VAL_S_RESIZE);
00537         case CURSOR_W_RESIZE:
00538             return new CSSPrimitiveValueImpl(CSS_VAL_W_RESIZE);
00539         case CURSOR_TEXT:
00540             return new CSSPrimitiveValueImpl(CSS_VAL_TEXT);
00541         case CURSOR_WAIT:
00542             return new CSSPrimitiveValueImpl(CSS_VAL_WAIT);
00543         case CURSOR_HELP:
00544             return new CSSPrimitiveValueImpl(CSS_VAL_HELP);
00545         }
00546         Q_ASSERT(0);
00547         break;
00548     case CSS_PROP_DIRECTION:
00549         switch (style->direction()) {
00550         case LTR:
00551             return new CSSPrimitiveValueImpl(CSS_VAL_LTR);
00552         case RTL:
00553             return new CSSPrimitiveValueImpl(CSS_VAL_RTL);
00554         }
00555         Q_ASSERT(0);
00556         break;
00557     case CSS_PROP_DISPLAY:
00558         switch (style->display()) {
00559         case INLINE:
00560             return new CSSPrimitiveValueImpl(CSS_VAL_INLINE);
00561         case BLOCK:
00562             return new CSSPrimitiveValueImpl(CSS_VAL_BLOCK);
00563         case LIST_ITEM:
00564             return new CSSPrimitiveValueImpl(CSS_VAL_LIST_ITEM);
00565         case RUN_IN:
00566             return new CSSPrimitiveValueImpl(CSS_VAL_RUN_IN);
00567         case COMPACT:
00568             return new CSSPrimitiveValueImpl(CSS_VAL_COMPACT);
00569         case INLINE_BLOCK:
00570             return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_BLOCK);
00571         case TABLE:
00572             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE);
00573         case INLINE_TABLE:
00574             return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_TABLE);
00575         case TABLE_ROW_GROUP:
00576             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW_GROUP);
00577         case TABLE_HEADER_GROUP:
00578             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_HEADER_GROUP);
00579         case TABLE_FOOTER_GROUP:
00580             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_FOOTER_GROUP);
00581         case TABLE_ROW:
00582             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW);
00583         case TABLE_COLUMN_GROUP:
00584             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN_GROUP);
00585         case TABLE_COLUMN:
00586             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN);
00587         case TABLE_CELL:
00588             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CELL);
00589         case TABLE_CAPTION:
00590             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CAPTION);
00591         case NONE:
00592             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00593         }
00594         Q_ASSERT( 0 );
00595         break;
00596     case CSS_PROP_EMPTY_CELLS:
00597         switch (style->emptyCells()) {
00598         case SHOW:
00599             return new CSSPrimitiveValueImpl(CSS_VAL_SHOW);
00600         case HIDE:
00601             return new CSSPrimitiveValueImpl(CSS_VAL_HIDE);
00602         }
00603         Q_ASSERT( 0 );
00604         break;
00605     case CSS_PROP_FLOAT:
00606     {
00607         switch (style->floating()) {
00608         case FNONE:
00609             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00610         case FLEFT:
00611             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00612         case FRIGHT:
00613             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00614         case FLEFT_ALIGN:
00615             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
00616         case FRIGHT_ALIGN:
00617             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
00618         }
00619     }
00620     case CSS_PROP_FONT_FAMILY:
00621     {
00622         FontDef def = style->htmlFont().getFontDef();
00623         return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING);
00624     }
00625     case CSS_PROP_FONT_SIZE:
00626     {
00627         FontDef def = style->htmlFont().getFontDef();
00628         return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX);
00629     }
00630     case CSS_PROP_FONT_STYLE:
00631     {
00632         // FIXME: handle oblique
00633         FontDef def = style->htmlFont().getFontDef();
00634         if (def.italic)
00635             return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC);
00636         else
00637             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00638     }
00639     case CSS_PROP_FONT_VARIANT:
00640     {
00641         FontDef def = style->htmlFont().getFontDef();
00642         if (def.smallCaps)
00643             return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS);
00644         else
00645             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00646     }
00647     case CSS_PROP_FONT_WEIGHT:
00648     {
00649         // FIXME: this does not reflect the full range of weights
00650         // that can be expressed with CSS
00651         FontDef def = style->htmlFont().getFontDef();
00652         if (def.weight == QFont::Bold)
00653             return new CSSPrimitiveValueImpl(CSS_VAL_BOLD);
00654         else
00655             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00656     }
00657     case CSS_PROP_HEIGHT:
00658         return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
00659     case CSS_PROP_LEFT:
00660         return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
00661     case CSS_PROP_LETTER_SPACING:
00662         if (style->letterSpacing() == 0)
00663             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00664         return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
00665     case CSS_PROP_LINE_HEIGHT:
00666     {
00667         Length length(style->lineHeight());
00668         if (length.value() < 0)
00669             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00670         if (length.isPercent()) {
00671             //XXX: merge from webcore the computedStyle/specifiedStyle distinction in rendering/font.h
00672             float computedSize = style->htmlFont().getFontDef().size;
00673             return new CSSPrimitiveValueImpl((int)(length._length * computedSize) / 100, CSSPrimitiveValue::CSS_PX);
00674         }
00675         else {
00676             return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PX);
00677         }
00678     }
00679     case CSS_PROP_LIST_STYLE_IMAGE:
00680         if (style->listStyleImage())
00681             return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI);
00682         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00683     case CSS_PROP_LIST_STYLE_POSITION:
00684         switch (style->listStylePosition()) {
00685         case OUTSIDE:
00686             return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE);
00687         case INSIDE:
00688             return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE);
00689         }
00690         Q_ASSERT( 0 );
00691         break;
00692     case CSS_PROP_LIST_STYLE_TYPE:
00693         return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING);
00694     case CSS_PROP_MARGIN_TOP:
00695         return valueForLength(style->marginTop(), renderer->contentHeight());
00696     case CSS_PROP_MARGIN_RIGHT:
00697         return valueForLength(style->marginRight(), renderer->contentWidth());
00698     case CSS_PROP_MARGIN_BOTTOM:
00699         return valueForLength(style->marginBottom(), renderer->contentHeight());
00700     case CSS_PROP_MARGIN_LEFT:
00701         return valueForLength(style->marginLeft(), renderer->contentWidth());
00702     case CSS_PROP__KHTML_MARQUEE:
00703         // FIXME: unimplemented
00704         break;
00705     case CSS_PROP__KHTML_MARQUEE_DIRECTION:
00706         switch (style->marqueeDirection()) {
00707         case MFORWARD:
00708             return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS);
00709         case MBACKWARD:
00710             return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS);
00711         case MAUTO:
00712             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00713         case MUP:
00714             return new CSSPrimitiveValueImpl(CSS_VAL_UP);
00715         case MDOWN:
00716             return new CSSPrimitiveValueImpl(CSS_VAL_DOWN);
00717         case MLEFT:
00718             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00719         case MRIGHT:
00720             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00721         }
00722         Q_ASSERT(0);
00723         return 0;
00724     case CSS_PROP__KHTML_MARQUEE_INCREMENT:
00725         return valueForLength(style->marqueeIncrement(), renderer->contentWidth());
00726     case CSS_PROP__KHTML_MARQUEE_REPETITION:
00727         if (style->marqueeLoopCount() < 0)
00728             return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE);
00729         return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);
00730     case CSS_PROP__KHTML_MARQUEE_SPEED:
00731         // FIXME: unimplemented
00732         break;
00733     case CSS_PROP__KHTML_MARQUEE_STYLE:
00734         switch (style->marqueeBehavior()) {
00735         case MNONE:
00736             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00737         case MSCROLL:
00738             return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00739         case MSLIDE:
00740             return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE);
00741         case MALTERNATE:
00742             return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE);
00743         case MUNFURL:
00744             return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL);
00745         }
00746         Q_ASSERT(0);
00747         return 0;
00748     case CSS_PROP_MAX_HEIGHT:
00749         return new CSSPrimitiveValueImpl( renderer->availableHeight(),
00750                                           CSSPrimitiveValue::CSS_PX );
00751         break;
00752     case CSS_PROP_MAX_WIDTH:
00753         return new CSSPrimitiveValueImpl( renderer->maxWidth(),
00754                                           CSSPrimitiveValue::CSS_PX );
00755         break;
00756     case CSS_PROP_MIN_HEIGHT:
00757         return new CSSPrimitiveValueImpl( renderer->contentHeight(),
00758                                           CSSPrimitiveValue::CSS_PX );
00759         break;
00760     case CSS_PROP_MIN_WIDTH:
00761         return new CSSPrimitiveValueImpl( renderer->minWidth(),
00762                                           CSSPrimitiveValue::CSS_PX );
00763         break;
00764     case CSS_PROP_OPACITY:
00765         return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);
00766     case CSS_PROP_ORPHANS:
00767         return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
00768     case CSS_PROP_OUTLINE_COLOR:
00769         break;
00770     case CSS_PROP_OUTLINE_OFFSET:
00771         break;
00772     case CSS_PROP_OUTLINE_STYLE:
00773         if (style->outlineStyleIsAuto())
00774             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00775         return valueForBorderStyle(style->outlineStyle());
00776     case CSS_PROP_OUTLINE_WIDTH:
00777         break;
00778     case CSS_PROP_OVERFLOW:
00779     {
00780         switch (style->overflow()) {
00781         case OVISIBLE:
00782             return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00783         case OHIDDEN:
00784             return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00785         case OSCROLL:
00786             return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00787         case OAUTO:
00788             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00789         case OMARQUEE:
00790             return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE);
00791         }
00792         Q_ASSERT(0);
00793         return 0;
00794     }
00795     case CSS_PROP_PADDING_TOP:
00796         return valueForLength(style->paddingTop(), renderer->contentHeight());
00797     case CSS_PROP_PADDING_RIGHT:
00798         return valueForLength(style->paddingRight(), renderer->contentWidth());
00799     case CSS_PROP_PADDING_BOTTOM:
00800         return valueForLength(style->paddingBottom(), renderer->contentHeight());
00801     case CSS_PROP_PADDING_LEFT:
00802         return valueForLength(style->paddingLeft(), renderer->contentWidth());
00803     case CSS_PROP_PAGE_BREAK_AFTER:
00804         switch (style->pageBreakAfter()) {
00805         case PBAUTO:
00806             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00807         case PBALWAYS:
00808             return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00809         case PBAVOID:
00810             return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00811         case PBLEFT:
00812             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00813         case PBRIGHT:
00814             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00815         }
00816         Q_ASSERT(0);
00817         break;
00818     case CSS_PROP_PAGE_BREAK_BEFORE:
00819         switch (style->pageBreakBefore()) {
00820         case PBAUTO:
00821             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00822         case PBALWAYS:
00823             return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00824         case PBAVOID:
00825             return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00826         case PBLEFT:
00827             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00828         case PBRIGHT:
00829             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00830         }
00831         Q_ASSERT(0);
00832         break;
00833     case CSS_PROP_PAGE_BREAK_INSIDE:
00834         switch (style->pageBreakInside()) {
00835         case PBAUTO:
00836             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00837         case PBAVOID:
00838             return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00839         case PBALWAYS:
00840             break; // not allowed
00841         }
00842         break;
00843     case CSS_PROP_POSITION:
00844         switch (style->position()) {
00845         case STATIC:
00846             return new CSSPrimitiveValueImpl(CSS_VAL_STATIC);
00847         case RELATIVE:
00848             return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE);
00849         case ABSOLUTE:
00850             return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE);
00851         case FIXED:
00852             return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00853         }
00854         Q_ASSERT(0);
00855         break;
00856     case CSS_PROP_QUOTES:
00857         break;
00858     case CSS_PROP_RIGHT:
00859         return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
00860     case CSS_PROP_SIZE:
00861         break;
00862     case CSS_PROP_TABLE_LAYOUT:
00863         switch (style->tableLayout()) {
00864         case TAUTO:
00865             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00866         case TFIXED:
00867             return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00868         }
00869         Q_ASSERT(0);
00870         break;
00871     case CSS_PROP_TEXT_ALIGN:
00872         return valueForTextAlign(style->textAlign());
00873     case CSS_PROP_TEXT_DECORATION:
00874     {
00875         QString string;
00876         if (style->textDecoration() & khtml::UNDERLINE)
00877             string += "underline";
00878         if (style->textDecoration() & khtml::OVERLINE) {
00879             if (string.length() > 0)
00880                 string += " ";
00881             string += "overline";
00882         }
00883         if (style->textDecoration() & khtml::LINE_THROUGH) {
00884             if (string.length() > 0)
00885                 string += " ";
00886             string += "line-through";
00887         }
00888         if (style->textDecoration() & khtml::BLINK) {
00889             if (string.length() > 0)
00890                 string += " ";
00891             string += "blink";
00892         }
00893         if (string.length() == 0)
00894             string = "none";
00895         return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00896     }
00897     case CSS_PROP_TEXT_INDENT:
00898         return valueForLength(style->textIndent(), renderer->contentWidth());
00899     case CSS_PROP_TEXT_SHADOW:
00900         return valueForShadow(style->textShadow());
00901     case CSS_PROP_TEXT_TRANSFORM:
00902         switch (style->textTransform()) {
00903         case CAPITALIZE:
00904             return new CSSPrimitiveValueImpl(CSS_VAL_CAPITALIZE);
00905         case UPPERCASE:
00906             return new CSSPrimitiveValueImpl(CSS_VAL_UPPERCASE);
00907         case LOWERCASE:
00908             return new CSSPrimitiveValueImpl(CSS_VAL_LOWERCASE);
00909         case TTNONE:
00910             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00911         }
00912         Q_ASSERT(0);
00913         break;
00914     case CSS_PROP_TOP:
00915         return getPositionOffsetValue(renderer, CSS_PROP_TOP);
00916     case CSS_PROP_UNICODE_BIDI:
00917         switch (style->unicodeBidi()) {
00918         case UBNormal:
00919             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00920         case Embed:
00921             return new CSSPrimitiveValueImpl(CSS_VAL_EMBED);
00922         case Override:
00923             return new CSSPrimitiveValueImpl(CSS_VAL_BIDI_OVERRIDE);
00924         }
00925         Q_ASSERT(0);
00926         break;
00927     case CSS_PROP_VERTICAL_ALIGN:
00928     {
00929         switch (style->verticalAlign()) {
00930         case BASELINE:
00931             return new CSSPrimitiveValueImpl(CSS_VAL_BASELINE);
00932         case MIDDLE:
00933             return new CSSPrimitiveValueImpl(CSS_VAL_MIDDLE);
00934         case SUB:
00935             return new CSSPrimitiveValueImpl(CSS_VAL_SUB);
00936         case SUPER:
00937             return new CSSPrimitiveValueImpl(CSS_VAL_SUPER);
00938         case TEXT_TOP:
00939             return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_TOP);
00940         case TEXT_BOTTOM:
00941             return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_BOTTOM);
00942         case TOP:
00943             return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00944         case BOTTOM:
00945             return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00946         case BASELINE_MIDDLE:
00947             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE);
00948         case LENGTH:
00949             return valueForLength(style->verticalAlignLength(), renderer->contentWidth());
00950         }
00951         Q_ASSERT(0);
00952         break;
00953     }
00954     case CSS_PROP_VISIBILITY:
00955         switch (style->visibility()) {
00956             case khtml::VISIBLE:
00957                 return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00958             case khtml::HIDDEN:
00959                 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00960             case khtml::COLLAPSE:
00961                 return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00962         }
00963         Q_ASSERT(0);
00964         break;
00965     case CSS_PROP_WHITE_SPACE:
00966     {
00967         switch (style->whiteSpace()) {
00968         case NORMAL:
00969             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00970         case PRE:
00971             return new CSSPrimitiveValueImpl(CSS_VAL_PRE);
00972         case PRE_WRAP:
00973             return new CSSPrimitiveValueImpl(CSS_VAL_PRE_WRAP);
00974         case PRE_LINE:
00975             return new CSSPrimitiveValueImpl(CSS_VAL_PRE_LINE);
00976         case NOWRAP:
00977             return new CSSPrimitiveValueImpl(CSS_VAL_NOWRAP);
00978         case KHTML_NOWRAP:
00979             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NOWRAP);
00980         }
00981         Q_ASSERT(0);
00982         break;
00983     }
00984     case CSS_PROP_WIDOWS:
00985         return new CSSPrimitiveValueImpl(style->widows(), CSSPrimitiveValue::CSS_NUMBER);
00986     case CSS_PROP_WIDTH:
00987         return new CSSPrimitiveValueImpl( renderer->contentWidth(),
00988                                          CSSPrimitiveValue::CSS_PX );
00989     case CSS_PROP_WORD_SPACING:
00990         return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX);
00991     case CSS_PROP_Z_INDEX:
00992         if (style->hasAutoZIndex())
00993             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00994         return new CSSPrimitiveValueImpl(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER);
00995     case CSS_PROP_BACKGROUND:
00996         break;
00997     case CSS_PROP_BORDER:
00998         break;
00999     case CSS_PROP_BORDER_COLOR:
01000         break;
01001     case CSS_PROP_BORDER_STYLE:
01002         break;
01003     case CSS_PROP_BORDER_TOP:
01004         return new CSSPrimitiveValueImpl( renderer->borderTop(),
01005                                          CSSPrimitiveValue::CSS_PX );
01006         break;
01007     case CSS_PROP_BORDER_RIGHT:
01008         return new CSSPrimitiveValueImpl( renderer->borderRight(),
01009                                          CSSPrimitiveValue::CSS_PX );
01010         break;
01011     case CSS_PROP_BORDER_BOTTOM:
01012         return new CSSPrimitiveValueImpl( renderer->borderBottom(),
01013                                          CSSPrimitiveValue::CSS_PX );
01014         break;
01015     case CSS_PROP_BORDER_LEFT:
01016         return new CSSPrimitiveValueImpl( renderer->borderLeft(),
01017                                          CSSPrimitiveValue::CSS_PX );
01018         break;
01019     case CSS_PROP_BORDER_WIDTH:
01020         break;
01021     case CSS_PROP_FONT:
01022         break;
01023     case CSS_PROP_LIST_STYLE:
01024         break;
01025     case CSS_PROP_MARGIN:
01026         break;
01027     case CSS_PROP_OUTLINE:
01028         break;
01029     case CSS_PROP_PADDING:
01030         break;
01031     case CSS_PROP_SCROLLBAR_BASE_COLOR:
01032         break;
01033     case CSS_PROP_SCROLLBAR_FACE_COLOR:
01034         break;
01035     case CSS_PROP_SCROLLBAR_SHADOW_COLOR:
01036         break;
01037     case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:
01038         break;
01039     case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:
01040         break;
01041     case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:
01042         break;
01043     case CSS_PROP_SCROLLBAR_TRACK_COLOR:
01044         break;
01045     case CSS_PROP_SCROLLBAR_ARROW_COLOR:
01046         break;
01047     case CSS_PROP__KHTML_FLOW_MODE:
01048         break;
01049     case CSS_PROP__KHTML_USER_INPUT:
01050         break;
01051     default:
01052         Q_ASSERT( 0 );
01053         break;
01054     }
01055     return 0;
01056 }
01057 
01058 DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
01059 {
01060     CSSValueImpl* value = getPropertyCSSValue(propertyID);
01061     if (value) {
01062         DOMString val = value->cssText();
01063         delete value;
01064         return val;
01065     }
01066     return "";
01067 }
01068 
01069 bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const
01070 {
01071     // All computed styles have a priority of false (not "important").
01072     return false;
01073 }
01074 
01075 DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool )
01076 {
01077     // ### emit error since we're read-only
01078     return DOMString();
01079 }
01080 
01081 bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool,
01082                                                bool )
01083 {
01084     // ### emit error since we're read-only
01085     return false;
01086 }
01087 
01088 void RenderStyleDeclarationImpl::setProperty ( int, int, bool,
01089                                                bool )
01090 {
01091     // ### emit error since we're read-only
01092 }
01093 
01094 void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool,
01095                                                     bool, bool )
01096 {
01097     // ### emit error since we're read-only
01098 }
01099 
01100 void RenderStyleDeclarationImpl::setProperty( const DOMString& )
01101 {
01102     // ### emit error since we're read-only
01103 }
01104 
01105 unsigned long RenderStyleDeclarationImpl::length() const
01106 {
01107     return numComputedProperties;
01108 }
01109 
01110 DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long i ) const
01111 {
01112     if (i >= numComputedProperties)
01113         return DOMString();
01114 
01115     return getPropertyName(computedProperties[i]);
01116 }
01117 
01118 CSSProperty RenderStyleDeclarationImpl::property( int id ) const
01119 {
01120     CSSProperty prop;
01121     prop.m_id = id;
01122     prop.m_important = false;
01123     prop.nonCSSHint = false;
01124 
01125     CSSValueImpl* v = getPropertyCSSValue( id );
01126     if ( !v )
01127         v = new CSSPrimitiveValueImpl;
01128     prop.setValue( v );
01129     return prop;
01130 }
01131 
KDE Home | KDE Accessibility Home | Description of Access Keys