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
00029 using namespace DOM;
00030 using namespace khtml;
00031
00032
00033 static CSSValueImpl *valueForLength(const Length &length, int max)
00034 {
00035 if (length.isPercent()) {
00036 return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PERCENTAGE);
00037 }
00038 else {
00039 return new CSSPrimitiveValueImpl(length.minWidth(max), CSSPrimitiveValue::CSS_PX);
00040 }
00041 }
00042
00043 static DOMString stringForBorderStyle(EBorderStyle style)
00044 {
00045 switch (style) {
00046 case khtml::BNATIVE:
00047 return "-khtml-native";
00048 case khtml::BNONE:
00049 return "none";
00050 case khtml::BHIDDEN:
00051 return "hidden";
00052 case khtml::INSET:
00053 return "inset";
00054 case khtml::GROOVE:
00055 return "groove";
00056 case khtml::RIDGE:
00057 return "ridge";
00058 case khtml::OUTSET:
00059 return "outset";
00060 case khtml::DOTTED:
00061 return "dotted";
00062 case khtml::DASHED:
00063 return "dashed";
00064 case khtml::SOLID:
00065 return "solid";
00066 case khtml::DOUBLE:
00067 return "double";
00068 }
00069 Q_ASSERT( 0 );
00070 return "";
00071 }
00072
00073 static DOMString stringForTextAlign(ETextAlign align)
00074 {
00075 switch (align) {
00076 case khtml::TAAUTO:
00077 return "auto";
00078 case khtml::LEFT:
00079 return "left";
00080 case khtml::RIGHT:
00081 return "right";
00082 case khtml::CENTER:
00083 return "center";
00084 case khtml::JUSTIFY:
00085 return "justify";
00086 case khtml::KHTML_LEFT:
00087 return "-khtml-left";
00088 case khtml::KHTML_RIGHT:
00089 return "-khtml-right";
00090 case khtml::KHTML_CENTER:
00091 return "-khtml-center";
00092 }
00093 Q_ASSERT( 0 );
00094 return "";
00095 }
00096
00097 DOMString khtml::stringForListStyleType(EListStyleType type)
00098 {
00099 switch (type) {
00100 case khtml::LDISC:
00101 return "disc";
00102 case khtml::LCIRCLE:
00103 return "circle";
00104 case khtml::LSQUARE:
00105 return "square";
00106 case khtml::LBOX:
00107 return "box";
00108 case khtml::LDIAMOND:
00109 return "-khtml-diamond";
00110 case khtml::LDECIMAL:
00111 return "decimal";
00112 case khtml::DECIMAL_LEADING_ZERO:
00113 return "decimal-leading-zero";
00114 case khtml::ARABIC_INDIC:
00115 return "-khtml-arabic-indic";
00116 case khtml::LAO:
00117 return "-khtml-lao";
00118 case khtml::PERSIAN:
00119 return "-khtml-persian";
00120 case khtml::URDU:
00121 return "-khtml-urdu";
00122 case khtml::THAI:
00123 return "-khtml-thai";
00124 case khtml::TIBETAN:
00125 return "-khtml-tibetan";
00126 case khtml::LOWER_ROMAN:
00127 return "lower-roman";
00128 case khtml::UPPER_ROMAN:
00129 return "upper-roman";
00130 case khtml::HEBREW:
00131 return "hebrew";
00132 case khtml::ARMENIAN:
00133 return "armenian";
00134 case khtml::GEORGIAN:
00135 return "georgian";
00136 case khtml::CJK_IDEOGRAPHIC:
00137 return "cjk-ideographic";
00138 case khtml::JAPANESE_FORMAL:
00139 return "-khtml-japanese-formal";
00140 case khtml::JAPANESE_INFORMAL:
00141 return "-khtml-japanese-informal";
00142 case khtml::SIMP_CHINESE_FORMAL:
00143 return "-khtml-simp-chinese-formal";
00144 case khtml::SIMP_CHINESE_INFORMAL:
00145 return "-khtml-simp-chinese-informal";
00146 case khtml::TRAD_CHINESE_FORMAL:
00147 return "-khtml-trad-chinese-formal";
00148 case khtml::TRAD_CHINESE_INFORMAL:
00149 return "-khtml-trad-chinese-informal";
00150 case khtml::LOWER_GREEK:
00151 return "lower-greek";
00152 case khtml::UPPER_GREEK:
00153 return "-khtml-upper-greek";
00154 case khtml::LOWER_ALPHA:
00155 return "lower-alpha";
00156 case khtml::UPPER_ALPHA:
00157 return "upper-alpha";
00158 case khtml::LOWER_LATIN:
00159 return "lower-latin";
00160 case khtml::UPPER_LATIN:
00161 return "upper-latin";
00162 case khtml::HIRAGANA:
00163 return "hiragana";
00164 case khtml::KATAKANA:
00165 return "katakana";
00166 case khtml::HIRAGANA_IROHA:
00167 return "hiragana-iroha";
00168 case khtml::KATAKANA_IROHA:
00169 return "katakana_iroha";
00170 case khtml::LNONE:
00171 return "none";
00172 }
00173 Q_ASSERT( 0 );
00174 return "";
00175 }
00176
00177 RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )
00178 : CSSStyleDeclarationImpl(0), m_node(node)
00179 {
00180 kdDebug() << "Render Style Declaration created" << endl;
00181 }
00182
00183 RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl()
00184 {
00185 kdDebug() << "Render Style Declaration destroyed" << endl;
00186 }
00187
00188 DOM::DOMString RenderStyleDeclarationImpl::cssText() const
00189 {
00190 return DOMString();
00191 }
00192
00193 void RenderStyleDeclarationImpl::setCssText( DOM::DOMString )
00194 {
00195
00196 }
00197
00198 CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const
00199 {
00200 NodeImpl *node = m_node.get();
00201 if (!node)
00202 return 0;
00203
00204
00205 DocumentImpl* docimpl = node->getDocument();
00206 if (docimpl) {
00207 docimpl->updateLayout();
00208 }
00209
00210 RenderObject *renderer = m_node->renderer();
00211 if (!renderer)
00212 return 0;
00213 RenderStyle *style = renderer->style();
00214 if (!style)
00215 return 0;
00216
00217 switch(propertyID)
00218 {
00219 case CSS_PROP_BACKGROUND_COLOR:
00220 return new CSSPrimitiveValueImpl(style->backgroundColor().rgb());
00221 case CSS_PROP_BACKGROUND_IMAGE:
00222 if (style->backgroundImage())
00223 return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),
00224 CSSPrimitiveValue::CSS_URI);
00225 return 0;
00226 case CSS_PROP_BACKGROUND_REPEAT:
00227 switch (style->backgroundRepeat()) {
00228 case khtml::REPEAT:
00229 return new CSSPrimitiveValueImpl("repeat", CSSPrimitiveValue::CSS_STRING);
00230 case khtml::REPEAT_X:
00231 return new CSSPrimitiveValueImpl("repeat-x", CSSPrimitiveValue::CSS_STRING);
00232 case khtml::REPEAT_Y:
00233 return new CSSPrimitiveValueImpl("repeat-y", CSSPrimitiveValue::CSS_STRING);
00234 case khtml::NO_REPEAT:
00235 return new CSSPrimitiveValueImpl("no-repeat", CSSPrimitiveValue::CSS_STRING);
00236 default:
00237 Q_ASSERT( 0 );
00238 }
00239 case CSS_PROP_BACKGROUND_ATTACHMENT:
00240 if (style->backgroundAttachment())
00241 return new CSSPrimitiveValueImpl("scroll", CSSPrimitiveValue::CSS_STRING);
00242 else
00243 return new CSSPrimitiveValueImpl("fixed", CSSPrimitiveValue::CSS_STRING);
00244 case CSS_PROP_BACKGROUND_POSITION:
00245 {
00246 DOMString string;
00247 Length length(style->backgroundXPosition());
00248 if (length.isPercent())
00249 string = QString::number(length._length) + "%";
00250 else
00251 string = QString::number(length.minWidth(renderer->contentWidth()));
00252 string += " ";
00253 length = style->backgroundYPosition();
00254 if (length.isPercent())
00255 string += QString::number(length._length) + "%";
00256 else
00257 string += QString::number(length.minWidth(renderer->contentWidth()));
00258 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00259 }
00260 case CSS_PROP_BACKGROUND_POSITION_X:
00261 return valueForLength(style->backgroundXPosition(), renderer->contentWidth());
00262 case CSS_PROP_BACKGROUND_POSITION_Y:
00263 return valueForLength(style->backgroundYPosition(), renderer->contentHeight());
00264 case CSS_PROP_BORDER_COLLAPSE:
00265 if (style->borderCollapse())
00266 return new CSSPrimitiveValueImpl("collapse", CSSPrimitiveValue::CSS_STRING);
00267 else
00268 return new CSSPrimitiveValueImpl("separate", CSSPrimitiveValue::CSS_STRING);
00269 case CSS_PROP_BORDER_SPACING:
00270 {
00271 QString string(QString::number(style->borderHorizontalSpacing()) +
00272 "px " +
00273 QString::number(style->borderVerticalSpacing()) +
00274 "px");
00275 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00276 }
00277 case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:
00278 return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),
00279 CSSPrimitiveValue::CSS_PX);
00280 case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:
00281 return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),
00282 CSSPrimitiveValue::CSS_PX);
00283 case CSS_PROP_BORDER_TOP_COLOR:
00284 return new CSSPrimitiveValueImpl(style->borderLeftColor().rgb());
00285 case CSS_PROP_BORDER_RIGHT_COLOR:
00286 return new CSSPrimitiveValueImpl(style->borderRightColor().rgb());
00287 case CSS_PROP_BORDER_BOTTOM_COLOR:
00288 return new CSSPrimitiveValueImpl(style->borderBottomColor().rgb());
00289 case CSS_PROP_BORDER_LEFT_COLOR:
00290 return new CSSPrimitiveValueImpl(style->borderLeftColor().rgb());
00291 case CSS_PROP_BORDER_TOP_STYLE:
00292 return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderTopStyle()),
00293 CSSPrimitiveValue::CSS_STRING);
00294 case CSS_PROP_BORDER_RIGHT_STYLE:
00295 return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderRightStyle()),
00296 CSSPrimitiveValue::CSS_STRING);
00297 case CSS_PROP_BORDER_BOTTOM_STYLE:
00298 return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderBottomStyle()),
00299 CSSPrimitiveValue::CSS_STRING);
00300 case CSS_PROP_BORDER_LEFT_STYLE:
00301 return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderLeftStyle()),
00302 CSSPrimitiveValue::CSS_STRING);
00303 case CSS_PROP_BORDER_TOP_WIDTH:
00304 return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );
00305 case CSS_PROP_BORDER_RIGHT_WIDTH:
00306 return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );
00307 case CSS_PROP_BORDER_BOTTOM_WIDTH:
00308 return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );
00309 case CSS_PROP_BORDER_LEFT_WIDTH:
00310 return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );
00311 case CSS_PROP_BOTTOM:
00312 break;
00313 case CSS_PROP_CAPTION_SIDE:
00314 break;
00315 case CSS_PROP_CLEAR:
00316 break;
00317 case CSS_PROP_CLIP:
00318 break;
00319 case CSS_PROP_COLOR:
00320 return new CSSPrimitiveValueImpl(style->color().rgb());
00321 case CSS_PROP_CONTENT:
00322 break;
00323 case CSS_PROP_COUNTER_INCREMENT:
00324 break;
00325 case CSS_PROP_COUNTER_RESET:
00326 break;
00327 case CSS_PROP_CURSOR:
00328 break;
00329 case CSS_PROP_DIRECTION:
00330 break;
00331 case CSS_PROP_DISPLAY:
00332 switch (style->display()) {
00333 case khtml::INLINE:
00334 return new CSSPrimitiveValueImpl("inline", CSSPrimitiveValue::CSS_STRING);
00335 case khtml::BLOCK:
00336 return new CSSPrimitiveValueImpl("block", CSSPrimitiveValue::CSS_STRING);
00337 case khtml::LIST_ITEM:
00338 return new CSSPrimitiveValueImpl("list-item", CSSPrimitiveValue::CSS_STRING);
00339 case khtml::RUN_IN:
00340 return new CSSPrimitiveValueImpl("run-in", CSSPrimitiveValue::CSS_STRING);
00341 case khtml::COMPACT:
00342 return new CSSPrimitiveValueImpl("compact", CSSPrimitiveValue::CSS_STRING);
00343 case khtml::INLINE_BLOCK:
00344 return new CSSPrimitiveValueImpl("inline-block", CSSPrimitiveValue::CSS_STRING);
00345 case khtml::TABLE:
00346 return new CSSPrimitiveValueImpl("table", CSSPrimitiveValue::CSS_STRING);
00347 case khtml::INLINE_TABLE:
00348 return new CSSPrimitiveValueImpl("inline-table", CSSPrimitiveValue::CSS_STRING);
00349 case khtml::TABLE_ROW_GROUP:
00350 return new CSSPrimitiveValueImpl("table-row-group", CSSPrimitiveValue::CSS_STRING);
00351 case khtml::TABLE_HEADER_GROUP:
00352 return new CSSPrimitiveValueImpl("table-header-group", CSSPrimitiveValue::CSS_STRING);
00353 case khtml::TABLE_FOOTER_GROUP:
00354 return new CSSPrimitiveValueImpl("table-footer-group", CSSPrimitiveValue::CSS_STRING);
00355 case khtml::TABLE_ROW:
00356 return new CSSPrimitiveValueImpl("table-row", CSSPrimitiveValue::CSS_STRING);
00357 case khtml::TABLE_COLUMN_GROUP:
00358 return new CSSPrimitiveValueImpl("table-column-group", CSSPrimitiveValue::CSS_STRING);
00359 case khtml::TABLE_COLUMN:
00360 return new CSSPrimitiveValueImpl("table-column", CSSPrimitiveValue::CSS_STRING);
00361 case khtml::TABLE_CELL:
00362 return new CSSPrimitiveValueImpl("table-cell", CSSPrimitiveValue::CSS_STRING);
00363 case khtml::TABLE_CAPTION:
00364 return new CSSPrimitiveValueImpl("table-caption", CSSPrimitiveValue::CSS_STRING);
00365 case khtml::NONE:
00366 return new CSSPrimitiveValueImpl("none", CSSPrimitiveValue::CSS_STRING);
00367 default:
00368 Q_ASSERT( 0 );
00369 }
00370 case CSS_PROP_EMPTY_CELLS:
00371 switch (style->emptyCells()) {
00372 case khtml::SHOW:
00373 return new CSSPrimitiveValueImpl("show", CSSPrimitiveValue::CSS_STRING);
00374 case khtml::HIDE:
00375 return new CSSPrimitiveValueImpl("hide", CSSPrimitiveValue::CSS_STRING);
00376 }
00377 break;
00378 case CSS_PROP_FLOAT:
00379 {
00380 switch (style->floating()) {
00381 case khtml::FNONE:
00382 return new CSSPrimitiveValueImpl("none", CSSPrimitiveValue::CSS_STRING);
00383 case khtml::FLEFT:
00384 return new CSSPrimitiveValueImpl("left", CSSPrimitiveValue::CSS_STRING);
00385 case khtml::FRIGHT:
00386 return new CSSPrimitiveValueImpl("right", CSSPrimitiveValue::CSS_STRING);
00387 case khtml::FLEFT_ALIGN:
00388 return new CSSPrimitiveValueImpl("-khtml-left", CSSPrimitiveValue::CSS_STRING);
00389 case khtml::FRIGHT_ALIGN:
00390 return new CSSPrimitiveValueImpl("-khtml-right", CSSPrimitiveValue::CSS_STRING);
00391 }
00392 }
00393 case CSS_PROP_FONT_FAMILY:
00394 {
00395 FontDef def = style->htmlFont().getFontDef();
00396 return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING);
00397 }
00398 case CSS_PROP_FONT_SIZE:
00399 {
00400 FontDef def = style->htmlFont().getFontDef();
00401 return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX);
00402 }
00403 case CSS_PROP_FONT_STYLE:
00404 {
00405
00406 FontDef def = style->htmlFont().getFontDef();
00407 if (def.italic)
00408 return new CSSPrimitiveValueImpl("italic", CSSPrimitiveValue::CSS_STRING);
00409 else
00410 return new CSSPrimitiveValueImpl("normal", CSSPrimitiveValue::CSS_STRING);
00411 }
00412 case CSS_PROP_FONT_VARIANT:
00413 {
00414 FontDef def = style->htmlFont().getFontDef();
00415 if (def.smallCaps)
00416 return new CSSPrimitiveValueImpl("small-caps", CSSPrimitiveValue::CSS_STRING);
00417 else
00418 return new CSSPrimitiveValueImpl("normal", CSSPrimitiveValue::CSS_STRING);
00419 }
00420 case CSS_PROP_FONT_WEIGHT:
00421 {
00422
00423
00424 FontDef def = style->htmlFont().getFontDef();
00425 if (def.weight == QFont::Bold)
00426 return new CSSPrimitiveValueImpl("bold", CSSPrimitiveValue::CSS_STRING);
00427 else
00428 return new CSSPrimitiveValueImpl("normal", CSSPrimitiveValue::CSS_STRING);
00429 }
00430 case CSS_PROP_HEIGHT:
00431 return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
00432 case CSS_PROP_LEFT:
00433 break;
00434 case CSS_PROP_LETTER_SPACING:
00435 if (style->letterSpacing() == 0)
00436 return new CSSPrimitiveValueImpl("normal", CSSPrimitiveValue::CSS_STRING);
00437 return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
00438 case CSS_PROP_LINE_HEIGHT:
00439 {
00440 Length length(style->lineHeight());
00441 if (length.isPercent()) {
00442
00443 float computedSize = style->htmlFont().getFontDef().size;
00444 return new CSSPrimitiveValueImpl((int)(length._length * computedSize) / 100, CSSPrimitiveValue::CSS_PX);
00445 }
00446 else {
00447 return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PX);
00448 }
00449 }
00450 case CSS_PROP_LIST_STYLE_IMAGE:
00451 break;
00452 case CSS_PROP_LIST_STYLE_POSITION:
00453 switch (style->listStylePosition()) {
00454 case OUTSIDE:
00455 return new CSSPrimitiveValueImpl("outside", CSSPrimitiveValue::CSS_STRING);
00456 case INSIDE:
00457 return new CSSPrimitiveValueImpl("inside", CSSPrimitiveValue::CSS_STRING);
00458 }
00459 Q_ASSERT( 0 );
00460 break;
00461 case CSS_PROP_LIST_STYLE_TYPE:
00462 return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING);
00463 case CSS_PROP_MARGIN_TOP:
00464 return valueForLength(style->marginTop(), renderer->contentHeight());
00465 case CSS_PROP_MARGIN_RIGHT:
00466 return valueForLength(style->marginRight(), renderer->contentWidth());
00467 case CSS_PROP_MARGIN_BOTTOM:
00468 return valueForLength(style->marginBottom(), renderer->contentHeight());
00469 case CSS_PROP_MARGIN_LEFT:
00470 return valueForLength(style->marginLeft(), renderer->contentWidth());
00471 case CSS_PROP_MAX_HEIGHT:
00472 return new CSSPrimitiveValueImpl( renderer->availableHeight(),
00473 CSSPrimitiveValue::CSS_PX );
00474 break;
00475 case CSS_PROP_MAX_WIDTH:
00476 return new CSSPrimitiveValueImpl( renderer->maxWidth(),
00477 CSSPrimitiveValue::CSS_PX );
00478 break;
00479 case CSS_PROP_MIN_HEIGHT:
00480 return new CSSPrimitiveValueImpl( renderer->contentHeight(),
00481 CSSPrimitiveValue::CSS_PX );
00482 break;
00483 case CSS_PROP_MIN_WIDTH:
00484 return new CSSPrimitiveValueImpl( renderer->minWidth(),
00485 CSSPrimitiveValue::CSS_PX );
00486 break;
00487 case CSS_PROP_OPACITY:
00488 break;
00489 case CSS_PROP_ORPHANS:
00490 break;
00491 case CSS_PROP_OUTLINE_COLOR:
00492 break;
00493 case CSS_PROP_OUTLINE_OFFSET:
00494 break;
00495 case CSS_PROP_OUTLINE_STYLE:
00496 break;
00497 case CSS_PROP_OUTLINE_WIDTH:
00498 break;
00499 case CSS_PROP_OVERFLOW:
00500 {
00501 switch (style->overflow()) {
00502 case khtml::OVISIBLE:
00503 return new CSSPrimitiveValueImpl("visible", CSSPrimitiveValue::CSS_STRING);
00504 case khtml::OHIDDEN:
00505 return new CSSPrimitiveValueImpl("hidden", CSSPrimitiveValue::CSS_STRING);
00506 case khtml::OSCROLL:
00507 return new CSSPrimitiveValueImpl("scroll", CSSPrimitiveValue::CSS_STRING);
00508 case khtml::OAUTO:
00509 return new CSSPrimitiveValueImpl("auto", CSSPrimitiveValue::CSS_STRING);
00510 case khtml::OMARQUEE:
00511 return new CSSPrimitiveValueImpl("marquee", CSSPrimitiveValue::CSS_STRING);
00512 }
00513 }
00514 case CSS_PROP_PADDING_TOP:
00515 return valueForLength(style->paddingTop(), renderer->contentHeight());
00516 case CSS_PROP_PADDING_RIGHT:
00517 return valueForLength(style->paddingRight(), renderer->contentWidth());
00518 case CSS_PROP_PADDING_BOTTOM:
00519 return valueForLength(style->paddingBottom(), renderer->contentHeight());
00520 case CSS_PROP_PADDING_LEFT:
00521 return valueForLength(style->paddingLeft(), renderer->contentWidth());
00522 case CSS_PROP_PAGE_BREAK_AFTER:
00523 break;
00524 case CSS_PROP_PAGE_BREAK_BEFORE:
00525 break;
00526 case CSS_PROP_PAGE_BREAK_INSIDE:
00527 break;
00528 case CSS_PROP_POSITION:
00529 break;
00530 case CSS_PROP_QUOTES:
00531 break;
00532 case CSS_PROP_RIGHT:
00533 break;
00534 case CSS_PROP_SIZE:
00535 break;
00536 case CSS_PROP_TABLE_LAYOUT:
00537 break;
00538 case CSS_PROP_TEXT_ALIGN:
00539 return new CSSPrimitiveValueImpl(stringForTextAlign(style->textAlign()), CSSPrimitiveValue::CSS_STRING);
00540 case CSS_PROP_TEXT_DECORATION:
00541 {
00542 QString string;
00543 if (style->textDecoration() & khtml::UNDERLINE)
00544 string += "underline";
00545 if (style->textDecoration() & khtml::OVERLINE) {
00546 if (string.length() > 0)
00547 string += " ";
00548 string += "overline";
00549 }
00550 if (style->textDecoration() & khtml::LINE_THROUGH) {
00551 if (string.length() > 0)
00552 string += " ";
00553 string += "line-through";
00554 }
00555 if (style->textDecoration() & khtml::BLINK) {
00556 if (string.length() > 0)
00557 string += " ";
00558 string += "blink";
00559 }
00560 if (string.length() == 0)
00561 string = "none";
00562 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00563 }
00564 case CSS_PROP_TEXT_INDENT:
00565 return valueForLength(style->textIndent(), renderer->contentWidth());
00566 case CSS_PROP_TEXT_TRANSFORM:
00567 break;
00568 case CSS_PROP_TOP:
00569 break;
00570 case CSS_PROP_UNICODE_BIDI:
00571 break;
00572 case CSS_PROP_VERTICAL_ALIGN:
00573 {
00574 switch (style->verticalAlign()) {
00575 case khtml::BASELINE:
00576 return new CSSPrimitiveValueImpl("baseline", CSSPrimitiveValue::CSS_STRING);
00577 case khtml::MIDDLE:
00578 return new CSSPrimitiveValueImpl("middle", CSSPrimitiveValue::CSS_STRING);
00579 case khtml::SUB:
00580 return new CSSPrimitiveValueImpl("sub", CSSPrimitiveValue::CSS_STRING);
00581 case khtml::SUPER:
00582 return new CSSPrimitiveValueImpl("super", CSSPrimitiveValue::CSS_STRING);
00583 case khtml::TEXT_TOP:
00584 return new CSSPrimitiveValueImpl("text-top", CSSPrimitiveValue::CSS_STRING);
00585 case khtml::TEXT_BOTTOM:
00586 return new CSSPrimitiveValueImpl("text-bottom", CSSPrimitiveValue::CSS_STRING);
00587 case khtml::TOP:
00588 return new CSSPrimitiveValueImpl("top", CSSPrimitiveValue::CSS_STRING);
00589 case khtml::BOTTOM:
00590 return new CSSPrimitiveValueImpl("bottom", CSSPrimitiveValue::CSS_STRING);
00591 case khtml::BASELINE_MIDDLE:
00592 return new CSSPrimitiveValueImpl("baseline-middle", CSSPrimitiveValue::CSS_STRING);
00593 case khtml::LENGTH:
00594 return valueForLength(style->verticalAlignLength(), renderer->contentWidth());
00595 }
00596 }
00597 case CSS_PROP_VISIBILITY:
00598 switch (style->visibility()) {
00599 case khtml::VISIBLE:
00600 return new CSSPrimitiveValueImpl("visible", CSSPrimitiveValue::CSS_STRING);
00601 case khtml::HIDDEN:
00602 return new CSSPrimitiveValueImpl("hidden", CSSPrimitiveValue::CSS_STRING);
00603 case khtml::COLLAPSE:
00604 return new CSSPrimitiveValueImpl("collapse", CSSPrimitiveValue::CSS_STRING);
00605 }
00606 break;
00607 case CSS_PROP_WHITE_SPACE:
00608 {
00609 switch (style->whiteSpace()) {
00610 case khtml::NORMAL:
00611 return new CSSPrimitiveValueImpl("normal", CSSPrimitiveValue::CSS_STRING);
00612 case khtml::NOWRAP:
00613 return new CSSPrimitiveValueImpl("nowrap", CSSPrimitiveValue::CSS_STRING);
00614 case khtml::PRE:
00615 return new CSSPrimitiveValueImpl("pre", CSSPrimitiveValue::CSS_STRING);
00616 case khtml::PRE_WRAP:
00617 return new CSSPrimitiveValueImpl("pre-wrap", CSSPrimitiveValue::CSS_STRING);
00618 case khtml::PRE_LINE:
00619 return new CSSPrimitiveValueImpl("pre-line", CSSPrimitiveValue::CSS_STRING);
00620 case khtml::KHTML_NOWRAP:
00621 return new CSSPrimitiveValueImpl("-khtml-nowrap", CSSPrimitiveValue::CSS_STRING);
00622 }
00623 break;
00624 }
00625 case CSS_PROP_WIDOWS:
00626 break;
00627 case CSS_PROP_WIDTH:
00628 return new CSSPrimitiveValueImpl( renderer->contentWidth(),
00629 CSSPrimitiveValue::CSS_PX );
00630 case CSS_PROP_WORD_SPACING:
00631 return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX);
00632 case CSS_PROP_Z_INDEX:
00633 break;
00634 case CSS_PROP_BACKGROUND:
00635 break;
00636 case CSS_PROP_BORDER:
00637 break;
00638 case CSS_PROP_BORDER_COLOR:
00639 break;
00640 case CSS_PROP_BORDER_STYLE:
00641 break;
00642 case CSS_PROP_BORDER_TOP:
00643 return new CSSPrimitiveValueImpl( renderer->borderTop(),
00644 CSSPrimitiveValue::CSS_PX );
00645 break;
00646 case CSS_PROP_BORDER_RIGHT:
00647 return new CSSPrimitiveValueImpl( renderer->borderRight(),
00648 CSSPrimitiveValue::CSS_PX );
00649 break;
00650 case CSS_PROP_BORDER_BOTTOM:
00651 return new CSSPrimitiveValueImpl( renderer->borderBottom(),
00652 CSSPrimitiveValue::CSS_PX );
00653 break;
00654 case CSS_PROP_BORDER_LEFT:
00655 return new CSSPrimitiveValueImpl( renderer->borderLeft(),
00656 CSSPrimitiveValue::CSS_PX );
00657 break;
00658 case CSS_PROP_BORDER_WIDTH:
00659 break;
00660 case CSS_PROP_FONT:
00661 break;
00662 case CSS_PROP_LIST_STYLE:
00663 break;
00664 case CSS_PROP_MARGIN:
00665 break;
00666 case CSS_PROP_OUTLINE:
00667 break;
00668 case CSS_PROP_PADDING:
00669 break;
00670 case CSS_PROP_SCROLLBAR_BASE_COLOR:
00671 break;
00672 case CSS_PROP_SCROLLBAR_FACE_COLOR:
00673 break;
00674 case CSS_PROP_SCROLLBAR_SHADOW_COLOR:
00675 break;
00676 case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:
00677 break;
00678 case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:
00679 break;
00680 case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:
00681 break;
00682 case CSS_PROP_SCROLLBAR_TRACK_COLOR:
00683 break;
00684 case CSS_PROP_SCROLLBAR_ARROW_COLOR:
00685 break;
00686 case CSS_PROP__KHTML_FLOW_MODE:
00687 break;
00688 case CSS_PROP__KHTML_USER_INPUT:
00689 break;
00690 default:
00691 Q_ASSERT( 0 );
00692 break;
00693 }
00694 return 0;
00695 }
00696
00697 DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
00698 {
00699 CSSValueImpl* value = getPropertyCSSValue(propertyID);
00700 if (value)
00701 return value->cssText();
00702 return "";
00703 }
00704
00705 bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const
00706 {
00707
00708
00709 return false;
00710 }
00711
00712 DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool )
00713 {
00714
00715 return DOMString();
00716 }
00717
00718 bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool,
00719 bool )
00720 {
00721
00722 return false;
00723 }
00724
00725 void RenderStyleDeclarationImpl::setProperty ( int, int, bool,
00726 bool )
00727 {
00728
00729 }
00730
00731 void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool,
00732 bool, bool )
00733 {
00734
00735 }
00736
00737 void RenderStyleDeclarationImpl::setProperty( const DOMString& )
00738 {
00739
00740 }
00741
00742 DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long ) const
00743 {
00744
00745 return DOMString();
00746 }
00747
00748
00749 CSSProperty RenderStyleDeclarationImpl::property( int id ) const
00750 {
00751 CSSProperty prop;
00752 prop.m_id = id;
00753 prop.m_bImportant = false;
00754 prop.nonCSSHint = false;
00755
00756 CSSValueImpl* v = getPropertyCSSValue( id );
00757 if ( !v )
00758 v = new CSSPrimitiveValueImpl;
00759 prop.setValue( v );
00760 return prop;
00761 }