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 CSSValueImpl* valueForShadow(const ShadowData *shadow)
00269 {
00270     if (!shadow)
00271         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00272     CSSValueListImpl *list = new CSSValueListImpl;
00273     for (const ShadowData *s = shadow; s; s = s->next) {
00274         CSSPrimitiveValueImpl *x = new CSSPrimitiveValueImpl(s->x, CSSPrimitiveValue::CSS_PX);
00275         CSSPrimitiveValueImpl *y = new CSSPrimitiveValueImpl(s->y, CSSPrimitiveValue::CSS_PX);
00276         CSSPrimitiveValueImpl *blur = new CSSPrimitiveValueImpl(s->blur, CSSPrimitiveValue::CSS_PX);
00277         CSSPrimitiveValueImpl *color = new CSSPrimitiveValueImpl(s->color.rgb());
00278         list->append(new ShadowValueImpl(x, y, blur, color));
00279     }
00280     return list;
00281 }
00282 
00283 static CSSValueImpl *getPositionOffsetValue(RenderObject *renderer, int propertyID)
00284 {
00285     if (!renderer)
00286         return 0;
00287 
00288     RenderStyle *style = renderer->style();
00289     if (!style)
00290         return 0;
00291 
00292     Length l;
00293     switch (propertyID) {
00294     case CSS_PROP_LEFT:
00295         l = style->left();
00296         break;
00297     case CSS_PROP_RIGHT:
00298         l = style->right();
00299         break;
00300     case CSS_PROP_TOP:
00301         l = style->top();
00302         break;
00303     case CSS_PROP_BOTTOM:
00304         l = style->bottom();
00305         break;
00306     default:
00307         return 0;
00308     }
00309 
00310     if (renderer->isPositioned())
00311         return valueForLength(l, renderer->contentWidth());
00312     
00313     if (renderer->isRelPositioned())
00314         // FIXME: It's not enough to simply return "auto" values for one offset if the other side is defined.
00315         // In other words if left is auto and right is not auto, then left's computed value is negative right.
00316         // So we should get the opposite length unit and see if it is auto.
00317         return valueForLength(l, renderer->contentWidth());
00318     
00319     return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00320  }
00321 
00322 
00323 RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )
00324     : CSSStyleDeclarationImpl(0), m_node(node)
00325 {
00326     kdDebug() << "Render Style Declaration created" << endl;
00327 }
00328 
00329 RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl()
00330 {
00331     kdDebug() << "Render Style Declaration destroyed" << endl;
00332 }
00333 
00334 DOM::DOMString RenderStyleDeclarationImpl::cssText() const
00335 {
00336     DOMString result;
00337 
00338     for (unsigned i = 0; i < numComputedProperties; i++) {
00339         if (i != 0)
00340             result += " ";
00341         result += getPropertyName(computedProperties[i]);
00342         result += ": ";
00343         result += getPropertyValue(computedProperties[i]);
00344         result += ";";
00345     }
00346 
00347     return result;
00348 }
00349 
00350 void RenderStyleDeclarationImpl::setCssText( DOM::DOMString )
00351 {
00352     // ### report that this sucka is read only
00353 }
00354 
00355 CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const
00356 {
00357     NodeImpl *node = m_node.get();
00358     if (!node)
00359         return 0;
00360 
00361     // Make sure our layout is up to date before we allow a query on these attributes.
00362     DocumentImpl* docimpl = node->getDocument();
00363     if (docimpl) {
00364         docimpl->updateLayout();
00365     }
00366 
00367     RenderObject *renderer = m_node->renderer();
00368     if (!renderer)
00369         return 0;
00370     RenderStyle *style = renderer->style();
00371     if (!style)
00372         return 0;
00373 
00374     switch(propertyID)
00375     {
00376     case CSS_PROP_BACKGROUND_COLOR:
00377         return new CSSPrimitiveValueImpl(style->backgroundColor().rgb());
00378     case CSS_PROP_BACKGROUND_IMAGE:
00379         if (style->backgroundImage())
00380             return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),
00381                                              CSSPrimitiveValue::CSS_URI);
00382         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00383     case CSS_PROP_BACKGROUND_REPEAT:
00384         switch (style->backgroundRepeat()) {
00385         case khtml::REPEAT:
00386             return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT);
00387         case khtml::REPEAT_X:
00388             return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_X);
00389         case khtml::REPEAT_Y:
00390             return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_Y);
00391         case khtml::NO_REPEAT:
00392             return new CSSPrimitiveValueImpl(CSS_VAL_NO_REPEAT);
00393         default:
00394             Q_ASSERT( 0 );
00395         }
00396     case CSS_PROP_BACKGROUND_ATTACHMENT:
00397         if (style->backgroundAttachment())
00398             return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00399         else
00400             return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00401     case CSS_PROP_BACKGROUND_POSITION:
00402     {
00403         DOMString string;
00404         Length length(style->backgroundXPosition());
00405         if (length.isPercent())
00406             string = QString::number(length._length) + "%";
00407         else
00408             string = QString::number(length.minWidth(renderer->contentWidth()));
00409         string += " ";
00410         length = style->backgroundYPosition();
00411         if (length.isPercent())
00412             string += QString::number(length._length) + "%";
00413         else
00414             string += QString::number(length.minWidth(renderer->contentWidth()));
00415         return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00416     }
00417     case CSS_PROP_BACKGROUND_POSITION_X:
00418         return valueForLength(style->backgroundXPosition(), renderer->contentWidth());
00419     case CSS_PROP_BACKGROUND_POSITION_Y:
00420         return valueForLength(style->backgroundYPosition(), renderer->contentHeight());
00421     case CSS_PROP_BORDER_COLLAPSE:
00422         if (style->borderCollapse())
00423             return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00424         else
00425             return new CSSPrimitiveValueImpl(CSS_VAL_SEPARATE);
00426     case CSS_PROP_BORDER_SPACING:
00427     {
00428         QString string(QString::number(style->borderHorizontalSpacing()) +
00429                        "px " +
00430                        QString::number(style->borderVerticalSpacing()) +
00431                        "px");
00432         return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00433     }
00434     case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:
00435         return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),
00436                                          CSSPrimitiveValue::CSS_PX);
00437     case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:
00438         return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),
00439                                          CSSPrimitiveValue::CSS_PX);
00440     case CSS_PROP_BORDER_TOP_COLOR:
00441         return new CSSPrimitiveValueImpl(style->borderTopColor().rgb());
00442     case CSS_PROP_BORDER_RIGHT_COLOR:
00443         return new CSSPrimitiveValueImpl(style->borderRightColor().rgb());
00444     case CSS_PROP_BORDER_BOTTOM_COLOR:
00445         return new CSSPrimitiveValueImpl(style->borderBottomColor().rgb());
00446     case CSS_PROP_BORDER_LEFT_COLOR:
00447         return new CSSPrimitiveValueImpl(style->borderLeftColor().rgb());
00448     case CSS_PROP_BORDER_TOP_STYLE:
00449         return valueForBorderStyle(style->borderTopStyle());
00450     case CSS_PROP_BORDER_RIGHT_STYLE:
00451         return valueForBorderStyle(style->borderRightStyle());
00452     case CSS_PROP_BORDER_BOTTOM_STYLE:
00453         return valueForBorderStyle(style->borderBottomStyle());
00454     case CSS_PROP_BORDER_LEFT_STYLE:
00455         return valueForBorderStyle(style->borderLeftStyle());
00456     case CSS_PROP_BORDER_TOP_WIDTH:
00457         return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );
00458     case CSS_PROP_BORDER_RIGHT_WIDTH:
00459         return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );
00460     case CSS_PROP_BORDER_BOTTOM_WIDTH:
00461         return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );
00462     case CSS_PROP_BORDER_LEFT_WIDTH:
00463         return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );
00464     case CSS_PROP_BOTTOM:
00465         return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM);
00466     case CSS_PROP_CAPTION_SIDE:
00467         switch (style->captionSide()) {
00468         case CAPLEFT:
00469             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00470         case CAPRIGHT:
00471             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00472         case CAPTOP:
00473             return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00474         case CAPBOTTOM:
00475             return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00476         }
00477         Q_ASSERT(0);
00478         break;
00479     case CSS_PROP_CLEAR:
00480         switch (style->clear()) {
00481         case CNONE:
00482             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00483         case CLEFT:
00484             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00485         case CRIGHT:
00486             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00487         case CBOTH:
00488             return new CSSPrimitiveValueImpl(CSS_VAL_BOTH);
00489         }
00490         Q_ASSERT(0);
00491         break;
00492     case CSS_PROP_CLIP:
00493         break;
00494     case CSS_PROP_COLOR:
00495         return new CSSPrimitiveValueImpl(style->color().rgb());
00496     case CSS_PROP_CONTENT:
00497         break;
00498     case CSS_PROP_COUNTER_INCREMENT:
00499         break;
00500     case CSS_PROP_COUNTER_RESET:
00501         break;
00502     case CSS_PROP_CURSOR:
00503         switch (style->cursor()) {
00504         case CURSOR_AUTO:
00505             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00506         case CURSOR_CROSS:
00507             return new CSSPrimitiveValueImpl(CSS_VAL_CROSSHAIR);
00508         case CURSOR_DEFAULT:
00509             return new CSSPrimitiveValueImpl(CSS_VAL_DEFAULT);
00510         case CURSOR_POINTER:
00511             return new CSSPrimitiveValueImpl(CSS_VAL_POINTER);
00512         case CURSOR_MOVE:
00513             return new CSSPrimitiveValueImpl(CSS_VAL_MOVE);
00514         case CURSOR_PROGRESS:
00515             return new CSSPrimitiveValueImpl(CSS_VAL_PROGRESS);
00516         case CURSOR_E_RESIZE:
00517             return new CSSPrimitiveValueImpl(CSS_VAL_E_RESIZE);
00518         case CURSOR_NE_RESIZE:
00519             return new CSSPrimitiveValueImpl(CSS_VAL_NE_RESIZE);
00520         case CURSOR_NW_RESIZE:
00521             return new CSSPrimitiveValueImpl(CSS_VAL_NW_RESIZE);
00522         case CURSOR_N_RESIZE:
00523             return new CSSPrimitiveValueImpl(CSS_VAL_N_RESIZE);
00524         case CURSOR_SE_RESIZE:
00525             return new CSSPrimitiveValueImpl(CSS_VAL_SE_RESIZE);
00526         case CURSOR_SW_RESIZE:
00527             return new CSSPrimitiveValueImpl(CSS_VAL_SW_RESIZE);
00528         case CURSOR_S_RESIZE:
00529             return new CSSPrimitiveValueImpl(CSS_VAL_S_RESIZE);
00530         case CURSOR_W_RESIZE:
00531             return new CSSPrimitiveValueImpl(CSS_VAL_W_RESIZE);
00532         case CURSOR_TEXT:
00533             return new CSSPrimitiveValueImpl(CSS_VAL_TEXT);
00534         case CURSOR_WAIT:
00535             return new CSSPrimitiveValueImpl(CSS_VAL_WAIT);
00536         case CURSOR_HELP:
00537             return new CSSPrimitiveValueImpl(CSS_VAL_HELP);
00538         }
00539         Q_ASSERT(0);
00540         break;
00541     case CSS_PROP_DIRECTION:
00542         switch (style->direction()) {
00543         case LTR:
00544             return new CSSPrimitiveValueImpl(CSS_VAL_LTR);
00545         case RTL:
00546             return new CSSPrimitiveValueImpl(CSS_VAL_RTL);
00547         }
00548         Q_ASSERT(0);
00549         break;
00550     case CSS_PROP_DISPLAY:
00551         switch (style->display()) {
00552         case INLINE:
00553             return new CSSPrimitiveValueImpl(CSS_VAL_INLINE);
00554         case BLOCK:
00555             return new CSSPrimitiveValueImpl(CSS_VAL_BLOCK);
00556         case LIST_ITEM:
00557             return new CSSPrimitiveValueImpl(CSS_VAL_LIST_ITEM);
00558         case RUN_IN:
00559             return new CSSPrimitiveValueImpl(CSS_VAL_RUN_IN);
00560         case COMPACT:
00561             return new CSSPrimitiveValueImpl(CSS_VAL_COMPACT);
00562         case INLINE_BLOCK:
00563             return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_BLOCK);
00564         case TABLE:
00565             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE);
00566         case INLINE_TABLE:
00567             return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_TABLE);
00568         case TABLE_ROW_GROUP:
00569             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW_GROUP);
00570         case TABLE_HEADER_GROUP:
00571             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_HEADER_GROUP);
00572         case TABLE_FOOTER_GROUP:
00573             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_FOOTER_GROUP);
00574         case TABLE_ROW:
00575             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW);
00576         case TABLE_COLUMN_GROUP:
00577             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN_GROUP);
00578         case TABLE_COLUMN:
00579             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN);
00580         case TABLE_CELL:
00581             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CELL);
00582         case TABLE_CAPTION:
00583             return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CAPTION);
00584         case NONE:
00585             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00586         }
00587         Q_ASSERT( 0 );
00588         break;
00589     case CSS_PROP_EMPTY_CELLS:
00590         switch (style->emptyCells()) {
00591         case SHOW:
00592             return new CSSPrimitiveValueImpl(CSS_VAL_SHOW);
00593         case HIDE:
00594             return new CSSPrimitiveValueImpl(CSS_VAL_HIDE);
00595         }
00596         Q_ASSERT( 0 );
00597         break;
00598     case CSS_PROP_FLOAT:
00599     {
00600         switch (style->floating()) {
00601         case FNONE:
00602             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00603         case FLEFT:
00604             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00605         case FRIGHT:
00606             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00607         case FLEFT_ALIGN:
00608             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
00609         case FRIGHT_ALIGN:
00610             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
00611         }
00612     }
00613     case CSS_PROP_FONT_FAMILY:
00614     {
00615         FontDef def = style->htmlFont().getFontDef();
00616         return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING);
00617     }
00618     case CSS_PROP_FONT_SIZE:
00619     {
00620         FontDef def = style->htmlFont().getFontDef();
00621         return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX);
00622     }
00623     case CSS_PROP_FONT_STYLE:
00624     {
00625         // FIXME: handle oblique
00626         FontDef def = style->htmlFont().getFontDef();
00627         if (def.italic)
00628             return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC);
00629         else
00630             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00631     }
00632     case CSS_PROP_FONT_VARIANT:
00633     {
00634         FontDef def = style->htmlFont().getFontDef();
00635         if (def.smallCaps)
00636             return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS);
00637         else
00638             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00639     }
00640     case CSS_PROP_FONT_WEIGHT:
00641     {
00642         // FIXME: this does not reflect the full range of weights
00643         // that can be expressed with CSS
00644         FontDef def = style->htmlFont().getFontDef();
00645         if (def.weight == QFont::Bold)
00646             return new CSSPrimitiveValueImpl(CSS_VAL_BOLD);
00647         else
00648             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00649     }
00650     case CSS_PROP_HEIGHT:
00651         return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
00652     case CSS_PROP_LEFT:
00653         return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
00654     case CSS_PROP_LETTER_SPACING:
00655         if (style->letterSpacing() == 0)
00656             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00657         return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
00658     case CSS_PROP_LINE_HEIGHT:
00659     {
00660         Length length(style->lineHeight());
00661         if (length.value() < 0)
00662             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00663         if (length.isPercent()) {
00664             //XXX: merge from webcore the computedStyle/specifiedStyle distinction in rendering/font.h
00665             float computedSize = style->htmlFont().getFontDef().size;
00666             return new CSSPrimitiveValueImpl((int)(length._length * computedSize) / 100, CSSPrimitiveValue::CSS_PX);
00667         }
00668         else {
00669             return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PX);
00670         }
00671     }
00672     case CSS_PROP_LIST_STYLE_IMAGE:
00673         if (style->listStyleImage())
00674             return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI);
00675         return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00676     case CSS_PROP_LIST_STYLE_POSITION:
00677         switch (style->listStylePosition()) {
00678         case OUTSIDE:
00679             return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE);
00680         case INSIDE:
00681             return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE);
00682         }
00683         Q_ASSERT( 0 );
00684         break;
00685     case CSS_PROP_LIST_STYLE_TYPE:
00686         return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING);
00687     case CSS_PROP_MARGIN_TOP:
00688         return valueForLength(style->marginTop(), renderer->contentHeight());
00689     case CSS_PROP_MARGIN_RIGHT:
00690         return valueForLength(style->marginRight(), renderer->contentWidth());
00691     case CSS_PROP_MARGIN_BOTTOM:
00692         return valueForLength(style->marginBottom(), renderer->contentHeight());
00693     case CSS_PROP_MARGIN_LEFT:
00694         return valueForLength(style->marginLeft(), renderer->contentWidth());
00695     case CSS_PROP__KHTML_MARQUEE:
00696         // FIXME: unimplemented
00697         break;
00698     case CSS_PROP__KHTML_MARQUEE_DIRECTION:
00699         switch (style->marqueeDirection()) {
00700         case MFORWARD:
00701             return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS);
00702         case MBACKWARD:
00703             return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS);
00704         case MAUTO:
00705             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00706         case MUP:
00707             return new CSSPrimitiveValueImpl(CSS_VAL_UP);
00708         case MDOWN:
00709             return new CSSPrimitiveValueImpl(CSS_VAL_DOWN);
00710         case MLEFT:
00711             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00712         case MRIGHT:
00713             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00714         }
00715         Q_ASSERT(0);
00716         return 0;
00717     case CSS_PROP__KHTML_MARQUEE_INCREMENT:
00718         return valueForLength(style->marqueeIncrement(), renderer->contentWidth());
00719     case CSS_PROP__KHTML_MARQUEE_REPETITION:
00720         if (style->marqueeLoopCount() < 0)
00721             return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE);
00722         return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);
00723     case CSS_PROP__KHTML_MARQUEE_SPEED:
00724         // FIXME: unimplemented
00725         break;
00726     case CSS_PROP__KHTML_MARQUEE_STYLE:
00727         switch (style->marqueeBehavior()) {
00728         case MNONE:
00729             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00730         case MSCROLL:
00731             return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00732         case MSLIDE:
00733             return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE);
00734         case MALTERNATE:
00735             return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE);
00736         case MUNFURL:
00737             return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL);
00738         }
00739         Q_ASSERT(0);
00740         return 0;
00741     case CSS_PROP_MAX_HEIGHT:
00742         return new CSSPrimitiveValueImpl( renderer->availableHeight(),
00743                                           CSSPrimitiveValue::CSS_PX );
00744         break;
00745     case CSS_PROP_MAX_WIDTH:
00746         return new CSSPrimitiveValueImpl( renderer->maxWidth(),
00747                                           CSSPrimitiveValue::CSS_PX );
00748         break;
00749     case CSS_PROP_MIN_HEIGHT:
00750         return new CSSPrimitiveValueImpl( renderer->contentHeight(),
00751                                           CSSPrimitiveValue::CSS_PX );
00752         break;
00753     case CSS_PROP_MIN_WIDTH:
00754         return new CSSPrimitiveValueImpl( renderer->minWidth(),
00755                                           CSSPrimitiveValue::CSS_PX );
00756         break;
00757     case CSS_PROP_OPACITY:
00758         return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);
00759     case CSS_PROP_ORPHANS:
00760         return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
00761     case CSS_PROP_OUTLINE_COLOR:
00762         break;
00763     case CSS_PROP_OUTLINE_OFFSET:
00764         break;
00765     case CSS_PROP_OUTLINE_STYLE:
00766         if (style->outlineStyleIsAuto())
00767             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00768         return valueForBorderStyle(style->outlineStyle());
00769     case CSS_PROP_OUTLINE_WIDTH:
00770         break;
00771     case CSS_PROP_OVERFLOW:
00772     {
00773         switch (style->overflow()) {
00774         case OVISIBLE:
00775             return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00776         case OHIDDEN:
00777             return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00778         case OSCROLL:
00779             return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00780         case OAUTO:
00781             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00782         case OMARQUEE:
00783             return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE);
00784         }
00785         Q_ASSERT(0);
00786         return 0;
00787     }
00788     case CSS_PROP_PADDING_TOP:
00789         return valueForLength(style->paddingTop(), renderer->contentHeight());
00790     case CSS_PROP_PADDING_RIGHT:
00791         return valueForLength(style->paddingRight(), renderer->contentWidth());
00792     case CSS_PROP_PADDING_BOTTOM:
00793         return valueForLength(style->paddingBottom(), renderer->contentHeight());
00794     case CSS_PROP_PADDING_LEFT:
00795         return valueForLength(style->paddingLeft(), renderer->contentWidth());
00796     case CSS_PROP_PAGE_BREAK_AFTER:
00797         switch (style->pageBreakAfter()) {
00798         case PBAUTO:
00799             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00800         case PBALWAYS:
00801             return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00802         case PBAVOID:
00803             return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00804         case PBLEFT:
00805             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00806         case PBRIGHT:
00807             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00808         }
00809         Q_ASSERT(0);
00810         break;
00811     case CSS_PROP_PAGE_BREAK_BEFORE:
00812         switch (style->pageBreakBefore()) {
00813         case PBAUTO:
00814             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00815         case PBALWAYS:
00816             return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00817         case PBAVOID:
00818             return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00819         case PBLEFT:
00820             return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00821         case PBRIGHT:
00822             return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00823         }
00824         Q_ASSERT(0);
00825         break;
00826     case CSS_PROP_PAGE_BREAK_INSIDE:
00827         switch (style->pageBreakInside()) {
00828         case PBAUTO:
00829             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00830         case PBAVOID:
00831             return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00832         case PBALWAYS:
00833             break; // not allowed
00834         }
00835         break;
00836     case CSS_PROP_POSITION:
00837         switch (style->position()) {
00838         case STATIC:
00839             return new CSSPrimitiveValueImpl(CSS_VAL_STATIC);
00840         case RELATIVE:
00841             return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE);
00842         case ABSOLUTE:
00843             return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE);
00844         case FIXED:
00845             return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00846         }
00847         Q_ASSERT(0);
00848         break;
00849     case CSS_PROP_QUOTES:
00850         break;
00851     case CSS_PROP_RIGHT:
00852         return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
00853     case CSS_PROP_SIZE:
00854         break;
00855     case CSS_PROP_TABLE_LAYOUT:
00856         switch (style->tableLayout()) {
00857         case TAUTO:
00858             return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00859         case TFIXED:
00860             return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00861         }
00862         Q_ASSERT(0);
00863         break;
00864     case CSS_PROP_TEXT_ALIGN:
00865         return valueForTextAlign(style->textAlign());
00866     case CSS_PROP_TEXT_DECORATION:
00867     {
00868         QString string;
00869         if (style->textDecoration() & khtml::UNDERLINE)
00870             string += "underline";
00871         if (style->textDecoration() & khtml::OVERLINE) {
00872             if (string.length() > 0)
00873                 string += " ";
00874             string += "overline";
00875         }
00876         if (style->textDecoration() & khtml::LINE_THROUGH) {
00877             if (string.length() > 0)
00878                 string += " ";
00879             string += "line-through";
00880         }
00881         if (style->textDecoration() & khtml::BLINK) {
00882             if (string.length() > 0)
00883                 string += " ";
00884             string += "blink";
00885         }
00886         if (string.length() == 0)
00887             string = "none";
00888         return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00889     }
00890     case CSS_PROP_TEXT_INDENT:
00891         return valueForLength(style->textIndent(), renderer->contentWidth());
00892     case CSS_PROP_TEXT_SHADOW:
00893         return valueForShadow(style->textShadow());
00894     case CSS_PROP_TEXT_TRANSFORM:
00895         switch (style->textTransform()) {
00896         case CAPITALIZE:
00897             return new CSSPrimitiveValueImpl(CSS_VAL_CAPITALIZE);
00898         case UPPERCASE:
00899             return new CSSPrimitiveValueImpl(CSS_VAL_UPPERCASE);
00900         case LOWERCASE:
00901             return new CSSPrimitiveValueImpl(CSS_VAL_LOWERCASE);
00902         case TTNONE:
00903             return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00904         }
00905         Q_ASSERT(0);
00906         break;
00907     case CSS_PROP_TOP:
00908         return getPositionOffsetValue(renderer, CSS_PROP_TOP);
00909     case CSS_PROP_UNICODE_BIDI:
00910         switch (style->unicodeBidi()) {
00911         case UBNormal:
00912             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00913         case Embed:
00914             return new CSSPrimitiveValueImpl(CSS_VAL_EMBED);
00915         case Override:
00916             return new CSSPrimitiveValueImpl(CSS_VAL_BIDI_OVERRIDE);
00917         }
00918         Q_ASSERT(0);
00919         break;
00920     case CSS_PROP_VERTICAL_ALIGN:
00921     {
00922         switch (style->verticalAlign()) {
00923         case BASELINE:
00924             return new CSSPrimitiveValueImpl(CSS_VAL_BASELINE);
00925         case MIDDLE:
00926             return new CSSPrimitiveValueImpl(CSS_VAL_MIDDLE);
00927         case SUB:
00928             return new CSSPrimitiveValueImpl(CSS_VAL_SUB);
00929         case SUPER:
00930             return new CSSPrimitiveValueImpl(CSS_VAL_SUPER);
00931         case TEXT_TOP:
00932             return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_TOP);
00933         case TEXT_BOTTOM:
00934             return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_BOTTOM);
00935         case TOP:
00936             return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00937         case BOTTOM:
00938             return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00939         case BASELINE_MIDDLE:
00940             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE);
00941         case LENGTH:
00942             return valueForLength(style->verticalAlignLength(), renderer->contentWidth());
00943         }
00944         Q_ASSERT(0);
00945         break;
00946     }
00947     case CSS_PROP_VISIBILITY:
00948         switch (style->visibility()) {
00949             case khtml::VISIBLE:
00950                 return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00951             case khtml::HIDDEN:
00952                 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00953             case khtml::COLLAPSE:
00954                 return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00955         }
00956         Q_ASSERT(0);
00957         break;
00958     case CSS_PROP_WHITE_SPACE:
00959     {
00960         switch (style->whiteSpace()) {
00961         case NORMAL:
00962             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00963         case PRE:
00964             return new CSSPrimitiveValueImpl(CSS_VAL_PRE);
00965         case PRE_WRAP:
00966             return new CSSPrimitiveValueImpl(CSS_VAL_PRE_WRAP);
00967         case PRE_LINE:
00968             return new CSSPrimitiveValueImpl(CSS_VAL_PRE_LINE);
00969         case NOWRAP:
00970             return new CSSPrimitiveValueImpl(CSS_VAL_NOWRAP);
00971         case KHTML_NOWRAP:
00972             return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NOWRAP);
00973         }
00974         Q_ASSERT(0);
00975         break;
00976     }
00977     case CSS_PROP_WIDOWS:
00978         return new CSSPrimitiveValueImpl(style->widows(), CSSPrimitiveValue::CSS_NUMBER);
00979     case CSS_PROP_WIDTH:
00980         return new CSSPrimitiveValueImpl( renderer->contentWidth(),
00981                                          CSSPrimitiveValue::CSS_PX );
00982     case CSS_PROP_WORD_SPACING:
00983         return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX);
00984     case CSS_PROP_Z_INDEX:
00985         if (style->hasAutoZIndex())
00986             return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00987         return new CSSPrimitiveValueImpl(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER);
00988     case CSS_PROP_BACKGROUND:
00989         break;
00990     case CSS_PROP_BORDER:
00991         break;
00992     case CSS_PROP_BORDER_COLOR:
00993         break;
00994     case CSS_PROP_BORDER_STYLE:
00995         break;
00996     case CSS_PROP_BORDER_TOP:
00997         return new CSSPrimitiveValueImpl( renderer->borderTop(),
00998                                          CSSPrimitiveValue::CSS_PX );
00999         break;
01000     case CSS_PROP_BORDER_RIGHT:
01001         return new CSSPrimitiveValueImpl( renderer->borderRight(),
01002                                          CSSPrimitiveValue::CSS_PX );
01003         break;
01004     case CSS_PROP_BORDER_BOTTOM:
01005         return new CSSPrimitiveValueImpl( renderer->borderBottom(),
01006                                          CSSPrimitiveValue::CSS_PX );
01007         break;
01008     case CSS_PROP_BORDER_LEFT:
01009         return new CSSPrimitiveValueImpl( renderer->borderLeft(),
01010                                          CSSPrimitiveValue::CSS_PX );
01011         break;
01012     case CSS_PROP_BORDER_WIDTH:
01013         break;
01014     case CSS_PROP_FONT:
01015         break;
01016     case CSS_PROP_LIST_STYLE:
01017         break;
01018     case CSS_PROP_MARGIN:
01019         break;
01020     case CSS_PROP_OUTLINE:
01021         break;
01022     case CSS_PROP_PADDING:
01023         break;
01024     case CSS_PROP_SCROLLBAR_BASE_COLOR:
01025         break;
01026     case CSS_PROP_SCROLLBAR_FACE_COLOR:
01027         break;
01028     case CSS_PROP_SCROLLBAR_SHADOW_COLOR:
01029         break;
01030     case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:
01031         break;
01032     case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:
01033         break;
01034     case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:
01035         break;
01036     case CSS_PROP_SCROLLBAR_TRACK_COLOR:
01037         break;
01038     case CSS_PROP_SCROLLBAR_ARROW_COLOR:
01039         break;
01040     case CSS_PROP__KHTML_FLOW_MODE:
01041         break;
01042     case CSS_PROP__KHTML_USER_INPUT:
01043         break;
01044     default:
01045         Q_ASSERT( 0 );
01046         break;
01047     }
01048     return 0;
01049 }
01050 
01051 DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
01052 {
01053     CSSValueImpl* value = getPropertyCSSValue(propertyID);
01054     if (value) {
01055         DOMString val = value->cssText();
01056         delete value;
01057         return val;
01058     }
01059     return "";
01060 }
01061 
01062 bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const
01063 {
01064     // All computed styles have a priority of false (not "important").
01065     return false;
01066 }
01067 
01068 DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool )
01069 {
01070     // ### emit error since we're read-only
01071     return DOMString();
01072 }
01073 
01074 bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool,
01075                                                bool )
01076 {
01077     // ### emit error since we're read-only
01078     return false;
01079 }
01080 
01081 void RenderStyleDeclarationImpl::setProperty ( int, int, bool,
01082                                                bool )
01083 {
01084     // ### emit error since we're read-only
01085 }
01086 
01087 void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool,
01088                                                     bool, bool )
01089 {
01090     // ### emit error since we're read-only
01091 }
01092 
01093 void RenderStyleDeclarationImpl::setProperty( const DOMString& )
01094 {
01095     // ### emit error since we're read-only
01096 }
01097 
01098 unsigned long RenderStyleDeclarationImpl::length() const
01099 {
01100     return numComputedProperties;
01101 }
01102 
01103 DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long i ) const
01104 {
01105     if (i >= numComputedProperties)
01106         return DOMString();
01107 
01108     return getPropertyName(computedProperties[i]);
01109 }
01110 
01111 CSSProperty RenderStyleDeclarationImpl::property( int id ) const
01112 {
01113     CSSProperty prop;
01114     prop.m_id = id;
01115     prop.m_bImportant = false;
01116     prop.nonCSSHint = false;
01117 
01118     CSSValueImpl* v = getPropertyCSSValue( id );
01119     if ( !v )
01120         v = new CSSPrimitiveValueImpl;
01121     prop.setValue( v );
01122     return prop;
01123 }
01124 
KDE Home | KDE Accessibility Home | Description of Access Keys