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