📄 css_computedstyle.cpp
字号:
}
case CSS_PROP_FONT_SIZE:
{
FontDef def = style->htmlFont().getFontDef();
return new CSSPrimitiveValueImpl(def.specifiedSize, CSSPrimitiveValue::CSS_PX);
}
case CSS_PROP_FONT_STRETCH:
// FIXME: unimplemented
break;
case CSS_PROP_FONT_STYLE:
{
// FIXME: handle oblique?
FontDef def = style->htmlFont().getFontDef();
if (def.italic)
return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC);
else
return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
}
case CSS_PROP_FONT_VARIANT:
{
FontDef def = style->htmlFont().getFontDef();
if (def.smallCaps)
return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS);
else
return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
}
case CSS_PROP_FONT_WEIGHT:
{
// FIXME: this does not reflect the full range of weights
// that can be expressed with CSS
FontDef def = style->htmlFont().getFontDef();
if (def.weight == QFont::Bold)
return new CSSPrimitiveValueImpl(CSS_VAL_BOLD);
else
return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
}
case CSS_PROP_HEIGHT:
return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
case CSS_PROP_LEFT:
return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
case CSS_PROP_LETTER_SPACING:
if (style->letterSpacing() == 0)
return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
case CSS_PROP__APPLE_LINE_CLAMP:
return new CSSPrimitiveValueImpl(style->lineClamp(), CSSPrimitiveValue::CSS_PERCENTAGE);
case CSS_PROP_LINE_HEIGHT: {
Length length(style->lineHeight());
if (length.value < 0)
return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
if (length.isPercent()) {
// This is imperfect, because it doesn't include the zoom factor and the real computation
// for how high to be in pixels does include things like minimum font size and the zoom factor.
// On the other hand, since font-size doesn't include the zoom factor, we really can't do
// that here either.
float fontSize = style->htmlFont().getFontDef().specifiedSize;
return new CSSPrimitiveValueImpl((int)(length.length() * fontSize) / 100, CSSPrimitiveValue::CSS_PX);
}
else {
return new CSSPrimitiveValueImpl(length.length(), CSSPrimitiveValue::CSS_PX);
}
}
case CSS_PROP_LIST_STYLE_IMAGE:
if (style->listStyleImage())
return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI);
return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
case CSS_PROP_LIST_STYLE_POSITION:
switch (style->listStylePosition()) {
case khtml::OUTSIDE:
return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE);
case khtml::INSIDE:
return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_LIST_STYLE_TYPE:
switch (style->listStyleType()) {
case khtml::LNONE:
return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
case khtml::DISC:
return new CSSPrimitiveValueImpl(CSS_VAL_DISC);
case khtml::CIRCLE:
return new CSSPrimitiveValueImpl(CSS_VAL_CIRCLE);
case khtml::SQUARE:
return new CSSPrimitiveValueImpl(CSS_VAL_SQUARE);
case khtml::LDECIMAL:
return new CSSPrimitiveValueImpl(CSS_VAL_DECIMAL);
case khtml::DECIMAL_LEADING_ZERO:
return new CSSPrimitiveValueImpl(CSS_VAL_DECIMAL_LEADING_ZERO);
case khtml::LOWER_ROMAN:
return new CSSPrimitiveValueImpl(CSS_VAL_LOWER_ROMAN);
case khtml::UPPER_ROMAN:
return new CSSPrimitiveValueImpl(CSS_VAL_UPPER_ROMAN);
case khtml::LOWER_GREEK:
return new CSSPrimitiveValueImpl(CSS_VAL_LOWER_GREEK);
case khtml::LOWER_ALPHA:
return new CSSPrimitiveValueImpl(CSS_VAL_LOWER_ALPHA);
case khtml::LOWER_LATIN:
return new CSSPrimitiveValueImpl(CSS_VAL_LOWER_LATIN);
case khtml::UPPER_ALPHA:
return new CSSPrimitiveValueImpl(CSS_VAL_UPPER_ALPHA);
case khtml::UPPER_LATIN:
return new CSSPrimitiveValueImpl(CSS_VAL_UPPER_LATIN);
case khtml::HEBREW:
return new CSSPrimitiveValueImpl(CSS_VAL_HEBREW);
case khtml::ARMENIAN:
return new CSSPrimitiveValueImpl(CSS_VAL_ARMENIAN);
case khtml::GEORGIAN:
return new CSSPrimitiveValueImpl(CSS_VAL_GEORGIAN);
case khtml::CJK_IDEOGRAPHIC:
return new CSSPrimitiveValueImpl(CSS_VAL_CJK_IDEOGRAPHIC);
case khtml::HIRAGANA:
return new CSSPrimitiveValueImpl(CSS_VAL_HIRAGANA);
case khtml::KATAKANA:
return new CSSPrimitiveValueImpl(CSS_VAL_KATAKANA);
case khtml::HIRAGANA_IROHA:
return new CSSPrimitiveValueImpl(CSS_VAL_HIRAGANA_IROHA);
case khtml::KATAKANA_IROHA:
return new CSSPrimitiveValueImpl(CSS_VAL_KATAKANA_IROHA);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_MARGIN_TOP:
return valueForLength(style->marginTop());
case CSS_PROP_MARGIN_RIGHT:
return valueForLength(style->marginRight());
case CSS_PROP_MARGIN_BOTTOM:
return valueForLength(style->marginBottom());
case CSS_PROP_MARGIN_LEFT:
return valueForLength(style->marginLeft());
case CSS_PROP__KHTML_MARQUEE:
// FIXME: unimplemented
break;
case CSS_PROP__KHTML_MARQUEE_DIRECTION:
switch (style->marqueeDirection()) {
case khtml::MFORWARD:
return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS);
case khtml::MBACKWARD:
return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS);
case khtml::MAUTO:
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
case khtml::MUP:
return new CSSPrimitiveValueImpl(CSS_VAL_UP);
case khtml::MDOWN:
return new CSSPrimitiveValueImpl(CSS_VAL_DOWN);
case khtml::MLEFT:
return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
case khtml::MRIGHT:
return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP__KHTML_MARQUEE_INCREMENT:
return valueForLength(style->marqueeIncrement());
case CSS_PROP__KHTML_MARQUEE_REPETITION:
if (style->marqueeLoopCount() < 0)
return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE);
return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);
case CSS_PROP__KHTML_MARQUEE_SPEED:
// FIXME: unimplemented
break;
case CSS_PROP__KHTML_MARQUEE_STYLE:
switch (style->marqueeBehavior()) {
case khtml::MNONE:
return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
case khtml::MSCROLL:
return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
case khtml::MSLIDE:
return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE);
case khtml::MALTERNATE:
return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE);
case khtml::MUNFURL:
return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP__KHTML_USER_MODIFY:
switch (style->userModify()) {
case khtml::READ_ONLY:
return new CSSPrimitiveValueImpl(CSS_VAL_READ_ONLY);
case khtml::READ_WRITE:
return new CSSPrimitiveValueImpl(CSS_VAL_READ_WRITE);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_MAX_HEIGHT:
return valueForLength(style->maxHeight());
case CSS_PROP_MAX_WIDTH:
return valueForLength(style->maxWidth());
case CSS_PROP_MIN_HEIGHT:
return valueForLength(style->minHeight());
case CSS_PROP_MIN_WIDTH:
return valueForLength(style->minWidth());
case CSS_PROP_OPACITY:
return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);
case CSS_PROP_ORPHANS:
return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
case CSS_PROP_OUTLINE_COLOR:
// FIXME: unimplemented
break;
case CSS_PROP_OUTLINE_OFFSET:
// FIXME: unimplemented
break;
case CSS_PROP_OUTLINE_STYLE:
if (style->outlineStyleIsAuto())
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
return valueForBorderStyle(style->outlineStyle());
case CSS_PROP_OUTLINE_WIDTH:
// FIXME: unimplemented
break;
case CSS_PROP_OVERFLOW:
switch (style->overflow()) {
case khtml::OVISIBLE:
return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
case khtml::OHIDDEN:
return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
case khtml::OSCROLL:
return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
case khtml::OAUTO:
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
case khtml::OMARQUEE:
return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE);
case khtml::OOVERLAY:
return new CSSPrimitiveValueImpl(CSS_VAL_OVERLAY);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_PADDING_TOP:
return valueForLength(style->paddingTop());
case CSS_PROP_PADDING_RIGHT:
return valueForLength(style->paddingRight());
case CSS_PROP_PADDING_BOTTOM:
return valueForLength(style->paddingBottom());
case CSS_PROP_PADDING_LEFT:
return valueForLength(style->paddingLeft());
case CSS_PROP_PAGE:
// FIXME: unimplemented
break;
case CSS_PROP_PAGE_BREAK_AFTER:
switch (style->pageBreakAfter()) {
case khtml::PBAUTO:
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
case khtml::PBALWAYS:
return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
case khtml::PBAVOID:
return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_PAGE_BREAK_BEFORE:
switch (style->pageBreakBefore()) {
case khtml::PBAUTO:
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
case khtml::PBALWAYS:
return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
case khtml::PBAVOID:
return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_PAGE_BREAK_INSIDE:
switch (style->pageBreakInside()) {
case khtml::PBAUTO:
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
case khtml::PBAVOID:
return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
case khtml::PBALWAYS:
break; // not allowed
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_POSITION:
switch (style->position()) {
case khtml::STATIC:
return new CSSPrimitiveValueImpl(CSS_VAL_STATIC);
case khtml::RELATIVE:
return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE);
case khtml::ABSOLUTE:
return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE);
case khtml::FIXED:
return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_QUOTES:
// FIXME: unimplemented
break;
case CSS_PROP_RIGHT:
return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
case CSS_PROP_SIZE:
// FIXME: unimplemented
break;
case CSS_PROP_TABLE_LAYOUT:
switch (style->tableLayout()) {
case khtml::TAUTO:
return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
case khtml::TFIXED:
return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
}
ASSERT_NOT_REACHED();
return 0;
case CSS_PROP_TEXT_ALIGN:
return valueForTextAlign(style->textAlign());
case CSS_PROP_TEXT_DECORATION:
{
QString string;
if (style->textDecoration() & khtml::UNDERLINE)
string += "underline";
if (style->textDecoration() & khtml::OVERLINE) {
if (string.length() > 0)
string += " ";
string += "overline";
}
if (style->textDecoration() & khtml::LINE_THROUGH) {
if (string.length() > 0)
string += " ";
string += "line-through";
}
if (style->textDecoration() & khtml::BLINK) {
if (string.length() > 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -