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.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Feb 8 06:25:34 2006 by doxygen 1.4.4 written by Dimitri van Heesch, © 1997-2003