khtml Library API Documentation

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 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 // ### report that this sucka is read only 00182 } 00183 00184 CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const 00185 { 00186 // Make sure our layout is up to date before we allow a query on these attributes. 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 // FIXME: handle oblique 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 // FIXME: this does not reflect the full range of weights 00393 // that can be expressed with CSS 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 //XXX: merge from webcore the computedStyle/specifiedStyle distinction in rendering/font.h 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 // This class does not support the notion of priority, since the object 00680 // is a computed value. 00681 return false; 00682 } 00683 00684 DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool ) 00685 { 00686 // ### emit error since we're read-only 00687 return DOMString(); 00688 } 00689 00690 bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool, 00691 bool ) 00692 { 00693 // ### emit error since we're read-only 00694 return false; 00695 } 00696 00697 void RenderStyleDeclarationImpl::setProperty ( int, int, bool, 00698 bool ) 00699 { 00700 // ### emit error since we're read-only 00701 } 00702 00703 void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool, 00704 bool, bool ) 00705 { 00706 // ### emit error since we're read-only 00707 } 00708 00709 void RenderStyleDeclarationImpl::setProperty( const DOMString& ) 00710 { 00711 // ### emit error since we're read-only 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 }
KDE Logo
This file is part of the documentation for khtml Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Apr 14 00:38:25 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003