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 + -
显示快捷键?