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 }