css_renderstyledeclarationimpl.cpp

来自「konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版」· C++ 代码 · 共 762 行 · 第 1/2 页

CPP
762
字号
/** * css_renderstyledeclarationimpl.cpp * * Copyright (C)  2004  Zack Rusin <zack@kde.org> * Copyright (C)  2004  Apple Computer, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301  USA */#include "css_renderstyledeclarationimpl.h"#include "rendering/render_style.h"#include "rendering/render_object.h"#include "cssproperties.h"using namespace DOM;using namespace khtml;static CSSValueImpl *valueForLength(const Length &length, int max){    if (length.isPercent()) {        return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PERCENTAGE);    }    else {        return new CSSPrimitiveValueImpl(length.minWidth(max), CSSPrimitiveValue::CSS_PX);    }}static DOMString stringForBorderStyle(EBorderStyle style){    switch (style) {    case khtml::BNATIVE:        return "-khtml-native";    case khtml::BNONE:        return "none";    case khtml::BHIDDEN:        return "hidden";    case khtml::INSET:        return "inset";    case khtml::GROOVE:        return "groove";    case khtml::RIDGE:        return "ridge";    case khtml::OUTSET:        return "outset";    case khtml::DOTTED:        return "dotted";    case khtml::DASHED:        return "dashed";    case khtml::SOLID:        return "solid";    case khtml::DOUBLE:        return "double";    }    Q_ASSERT( 0 );    return "";}static DOMString stringForTextAlign(ETextAlign align){    switch (align) {    case khtml::TAAUTO:        return "auto";    case khtml::LEFT:        return "left";    case khtml::RIGHT:        return "right";    case khtml::CENTER:        return "center";    case khtml::JUSTIFY:        return "justify";    case khtml::KHTML_LEFT:        return "-khtml-left";    case khtml::KHTML_RIGHT:        return "-khtml-right";    case khtml::KHTML_CENTER:        return "-khtml-center";    }    Q_ASSERT( 0 );    return "";}DOMString khtml::stringForListStyleType(EListStyleType type){    switch (type) {        case khtml::LDISC:            return "disc";        case khtml::LCIRCLE:            return "circle";        case khtml::LSQUARE:            return "square";        case khtml::LBOX:            return "box";        case khtml::LDIAMOND:            return "-khtml-diamond";        case khtml::LDECIMAL:            return "decimal";        case khtml::DECIMAL_LEADING_ZERO:            return "decimal-leading-zero";        case khtml::ARABIC_INDIC:            return "-khtml-arabic-indic";        case khtml::LAO:            return "-khtml-lao";        case khtml::PERSIAN:            return "-khtml-persian";        case khtml::URDU:            return "-khtml-urdu";        case khtml::THAI:            return "-khtml-thai";        case khtml::TIBETAN:            return "-khtml-tibetan";        case khtml::LOWER_ROMAN:            return "lower-roman";        case khtml::UPPER_ROMAN:            return "upper-roman";        case khtml::HEBREW:            return "hebrew";        case khtml::ARMENIAN:            return "armenian";        case khtml::GEORGIAN:            return "georgian";        case khtml::CJK_IDEOGRAPHIC:            return "cjk-ideographic";        case khtml::JAPANESE_FORMAL:            return "-khtml-japanese-formal";        case khtml::JAPANESE_INFORMAL:            return "-khtml-japanese-informal";        case khtml::SIMP_CHINESE_FORMAL:            return "-khtml-simp-chinese-formal";        case khtml::SIMP_CHINESE_INFORMAL:            return "-khtml-simp-chinese-informal";        case khtml::TRAD_CHINESE_FORMAL:            return "-khtml-trad-chinese-formal";        case khtml::TRAD_CHINESE_INFORMAL:            return "-khtml-trad-chinese-informal";        case khtml::LOWER_GREEK:            return "lower-greek";        case khtml::UPPER_GREEK:            return "-khtml-upper-greek";        case khtml::LOWER_ALPHA:            return "lower-alpha";        case khtml::UPPER_ALPHA:            return "upper-alpha";        case khtml::LOWER_LATIN:            return "lower-latin";        case khtml::UPPER_LATIN:            return "upper-latin";        case khtml::HIRAGANA:            return "hiragana";        case khtml::KATAKANA:            return "katakana";        case khtml::HIRAGANA_IROHA:            return "hiragana-iroha";        case khtml::KATAKANA_IROHA:            return "katakana_iroha";        case khtml::LNONE:            return "none";    }    Q_ASSERT( 0 );    return "";}RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )    : CSSStyleDeclarationImpl(0), m_node(node){    kdDebug() << "Render Style Declaration created" << endl;}RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl(){    kdDebug() << "Render Style Declaration destroyed" << endl;}DOM::DOMString RenderStyleDeclarationImpl::cssText() const{    return DOMString();}void RenderStyleDeclarationImpl::setCssText( DOM::DOMString ){    // ### report that this sucka is read only}CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const{    NodeImpl *node = m_node.get();    if (!node)        return 0;    // Make sure our layout is up to date before we allow a query on these attributes.    DocumentImpl* docimpl = node->getDocument();    if (docimpl) {        docimpl->updateLayout();    }    RenderObject *renderer = m_node->renderer();    if (!renderer)        return 0;    RenderStyle *style = renderer->style();    if (!style)        return 0;    switch(propertyID)    {    case CSS_PROP_BACKGROUND_COLOR:        return new CSSPrimitiveValueImpl(style->backgroundColor().rgb());    case CSS_PROP_BACKGROUND_IMAGE:        if (style->backgroundImage())            return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),                                             CSSPrimitiveValue::CSS_URI);        return 0;    case CSS_PROP_BACKGROUND_REPEAT:        switch (style->backgroundRepeat()) {        case khtml::REPEAT:            return new CSSPrimitiveValueImpl("repeat", CSSPrimitiveValue::CSS_STRING);        case khtml::REPEAT_X:            return new CSSPrimitiveValueImpl("repeat-x", CSSPrimitiveValue::CSS_STRING);        case khtml::REPEAT_Y:            return new CSSPrimitiveValueImpl("repeat-y", CSSPrimitiveValue::CSS_STRING);        case khtml::NO_REPEAT:            return new CSSPrimitiveValueImpl("no-repeat", CSSPrimitiveValue::CSS_STRING);        default:            Q_ASSERT( 0 );        }    case CSS_PROP_BACKGROUND_ATTACHMENT:        if (style->backgroundAttachment())            return new CSSPrimitiveValueImpl("scroll", CSSPrimitiveValue::CSS_STRING);        else            return new CSSPrimitiveValueImpl("fixed", CSSPrimitiveValue::CSS_STRING);    case CSS_PROP_BACKGROUND_POSITION:    {        DOMString string;        Length length(style->backgroundXPosition());        if (length.isPercent())            string = QString::number(length._length) + "%";        else            string = QString::number(length.minWidth(renderer->contentWidth()));        string += " ";        length = style->backgroundYPosition();        if (length.isPercent())            string += QString::number(length._length) + "%";        else            string += QString::number(length.minWidth(renderer->contentWidth()));        return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);    }    case CSS_PROP_BACKGROUND_POSITION_X:        return valueForLength(style->backgroundXPosition(), renderer->contentWidth());    case CSS_PROP_BACKGROUND_POSITION_Y:        return valueForLength(style->backgroundYPosition(), renderer->contentHeight());    case CSS_PROP_BORDER_COLLAPSE:        if (style->borderCollapse())            return new CSSPrimitiveValueImpl("collapse", CSSPrimitiveValue::CSS_STRING);        else            return new CSSPrimitiveValueImpl("separate", CSSPrimitiveValue::CSS_STRING);    case CSS_PROP_BORDER_SPACING:    {        QString string(QString::number(style->borderHorizontalSpacing()) +                       "px " +                       QString::number(style->borderVerticalSpacing()) +                       "px");        return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);    }    case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:        return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),                                         CSSPrimitiveValue::CSS_PX);    case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:        return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),                                         CSSPrimitiveValue::CSS_PX);    case CSS_PROP_BORDER_TOP_COLOR:        return new CSSPrimitiveValueImpl(style->borderLeftColor().rgb());    case CSS_PROP_BORDER_RIGHT_COLOR:        return new CSSPrimitiveValueImpl(style->borderRightColor().rgb());    case CSS_PROP_BORDER_BOTTOM_COLOR:        return new CSSPrimitiveValueImpl(style->borderBottomColor().rgb());    case CSS_PROP_BORDER_LEFT_COLOR:        return new CSSPrimitiveValueImpl(style->borderLeftColor().rgb());    case CSS_PROP_BORDER_TOP_STYLE:        return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderTopStyle()),                                         CSSPrimitiveValue::CSS_STRING);    case CSS_PROP_BORDER_RIGHT_STYLE:        return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderRightStyle()),                                         CSSPrimitiveValue::CSS_STRING);    case CSS_PROP_BORDER_BOTTOM_STYLE:        return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderBottomStyle()),                                         CSSPrimitiveValue::CSS_STRING);    case CSS_PROP_BORDER_LEFT_STYLE:        return new CSSPrimitiveValueImpl(stringForBorderStyle(style->borderLeftStyle()),                                         CSSPrimitiveValue::CSS_STRING);    case CSS_PROP_BORDER_TOP_WIDTH:        return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );    case CSS_PROP_BORDER_RIGHT_WIDTH:        return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );    case CSS_PROP_BORDER_BOTTOM_WIDTH:        return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );    case CSS_PROP_BORDER_LEFT_WIDTH:        return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );    case CSS_PROP_BOTTOM:        break;    case CSS_PROP_CAPTION_SIDE:        break;    case CSS_PROP_CLEAR:        break;    case CSS_PROP_CLIP:        break;    case CSS_PROP_COLOR:        return new CSSPrimitiveValueImpl(style->color().rgb());    case CSS_PROP_CONTENT:        break;    case CSS_PROP_COUNTER_INCREMENT:        break;    case CSS_PROP_COUNTER_RESET:        break;    case CSS_PROP_CURSOR:        break;    case CSS_PROP_DIRECTION:        break;    case CSS_PROP_DISPLAY:        switch (style->display()) {        case khtml::INLINE:            return new CSSPrimitiveValueImpl("inline", CSSPrimitiveValue::CSS_STRING);        case khtml::BLOCK:            return new CSSPrimitiveValueImpl("block", CSSPrimitiveValue::CSS_STRING);        case khtml::LIST_ITEM:            return new CSSPrimitiveValueImpl("list-item", CSSPrimitiveValue::CSS_STRING);        case khtml::RUN_IN:            return new CSSPrimitiveValueImpl("run-in", CSSPrimitiveValue::CSS_STRING);        case khtml::COMPACT:            return new CSSPrimitiveValueImpl("compact", CSSPrimitiveValue::CSS_STRING);        case khtml::INLINE_BLOCK:            return new CSSPrimitiveValueImpl("inline-block", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE:            return new CSSPrimitiveValueImpl("table", CSSPrimitiveValue::CSS_STRING);        case khtml::INLINE_TABLE:            return new CSSPrimitiveValueImpl("inline-table", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_ROW_GROUP:            return new CSSPrimitiveValueImpl("table-row-group", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_HEADER_GROUP:            return new CSSPrimitiveValueImpl("table-header-group", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_FOOTER_GROUP:            return new CSSPrimitiveValueImpl("table-footer-group", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_ROW:            return new CSSPrimitiveValueImpl("table-row", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_COLUMN_GROUP:            return new CSSPrimitiveValueImpl("table-column-group", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_COLUMN:            return new CSSPrimitiveValueImpl("table-column", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_CELL:            return new CSSPrimitiveValueImpl("table-cell", CSSPrimitiveValue::CSS_STRING);        case khtml::TABLE_CAPTION:            return new CSSPrimitiveValueImpl("table-caption", CSSPrimitiveValue::CSS_STRING);        case khtml::NONE:            return new CSSPrimitiveValueImpl("none", CSSPrimitiveValue::CSS_STRING);        default:            Q_ASSERT( 0 );        }    case CSS_PROP_EMPTY_CELLS:        switch (style->emptyCells()) {            case khtml::SHOW:                return new CSSPrimitiveValueImpl("show", CSSPrimitiveValue::CSS_STRING);            case khtml::HIDE:                return new CSSPrimitiveValueImpl("hide", CSSPrimitiveValue::CSS_STRING);        }        break;    case CSS_PROP_FLOAT:    {        switch (style->floating()) {        case khtml::FNONE:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?