cssstyleselector.cpp

来自「将konqueror浏览器移植到ARM9 2410中」· C++ 代码 · 共 1,995 行 · 第 1/5 页

CPP
1,995
字号
        style->setFont(f);        break;    }    case CSS_PROP_LIST_STYLE_POSITION:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setListStylePosition(e->parentNode()->style()->listStylePosition());            return;        }        if(!primitiveValue) return;        if(primitiveValue->getIdent())            style->setListStylePosition( (EListStylePosition) (primitiveValue->getIdent() - CSS_VAL_OUTSIDE) );        return;    }    case CSS_PROP_LIST_STYLE_TYPE:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setListStyleType(e->parentNode()->style()->listStyleType());            return;        }        if(!primitiveValue) return;        if(primitiveValue->getIdent())        {            EListStyleType t;	    int id = primitiveValue->getIdent();	    if ( id == CSS_VAL_NONE) { // important!!	      t = LNONE;	    } else {	      t = EListStyleType(id - CSS_VAL_DISC);	    }            style->setListStyleType(t);        }        return;    }    case CSS_PROP_OVERFLOW:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setOverflow(e->parentNode()->style()->overflow());            return;        }        if(!primitiveValue) return;        EOverflow o;        switch(primitiveValue->getIdent())        {        case CSS_VAL_VISIBLE:            o = OVISIBLE; break;        case CSS_VAL_HIDDEN:            o = OHIDDEN; kdDebug() << "overflow:hidden" << endl; break;        case CSS_VAL_SCROLL:            o = SCROLL; break;        case CSS_VAL_AUTO:            o = AUTO; break;        default:            return;        }        style->setOverflow(o);        return;    }    break;    case CSS_PROP_PAGE:    case CSS_PROP_PAGE_BREAK_AFTER:    case CSS_PROP_PAGE_BREAK_BEFORE:    case CSS_PROP_PAGE_BREAK_INSIDE://    case CSS_PROP_PAUSE_AFTER://    case CSS_PROP_PAUSE_BEFORE:        break;    case CSS_PROP_POSITION:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setPosition(e->parentNode()->style()->position());            return;        }        if(!primitiveValue) return;        EPosition p;        switch(primitiveValue->getIdent())        {        case CSS_VAL_STATIC:            p = STATIC; break;        case CSS_VAL_RELATIVE:            p = RELATIVE; break;        case CSS_VAL_ABSOLUTE:            p = ABSOLUTE; break;        case CSS_VAL_FIXED:            {                doc->view()->useSlowRepaints();                p = FIXED;                break;            }        default:            return;        }        style->setPosition(p);        return;    }//     case CSS_PROP_SPEAK://     case CSS_PROP_SPEAK_HEADER://     case CSS_PROP_SPEAK_NUMERAL://     case CSS_PROP_SPEAK_PUNCTUATION:    case CSS_PROP_TABLE_LAYOUT:    case CSS_PROP_UNICODE_BIDI:        break;    case CSS_PROP_TEXT_TRANSFORM:        {        if(value->valueType() == CSSValue::CSS_INHERIT) {            if(!e->parentNode()) return;            style->setTextTransform(e->parentNode()->style()->textTransform());            return;        }        if(!primitiveValue->getIdent()) return;        ETextTransform tt;        switch(primitiveValue->getIdent()) {        case CSS_VAL_CAPITALIZE:  tt = CAPITALIZE;  break;        case CSS_VAL_UPPERCASE:   tt = UPPERCASE;   break;        case CSS_VAL_LOWERCASE:   tt = LOWERCASE;   break;        case CSS_VAL_NONE:        default:                  tt = TTNONE;      break;        }        style->setTextTransform(tt);        break;        }    case CSS_PROP_VISIBILITY:    {        if(value->valueType() == CSSValue::CSS_INHERIT) {            if(!e->parentNode()) return;            style->setVisiblity(e->parentNode()->style()->visiblity());            return;        }        switch( primitiveValue->getIdent() ) {        case CSS_VAL_HIDDEN:            style->setVisiblity( HIDDEN );            break;        case CSS_VAL_VISIBLE:            style->setVisiblity( VISIBLE );            break;        case CSS_VAL_COLLAPSE:            style->setVisiblity( COLLAPSE );        default:            break;        }        break;    }    case CSS_PROP_WHITE_SPACE:        if(value->valueType() == CSSValue::CSS_INHERIT) {            if(!e->parentNode()) return;            style->setWhiteSpace(e->parentNode()->style()->whiteSpace());            return;        }        if(!primitiveValue->getIdent()) return;        EWhiteSpace s;        switch(primitiveValue->getIdent()) {        case CSS_VAL_NOWRAP:            s = NOWRAP;            break;        case CSS_VAL_PRE:            s = PRE;            break;        case CSS_VAL_NORMAL:        default:            s = NORMAL;            break;        }        style->setWhiteSpace(s);        break;// special properties (css_extensions)//    case CSS_PROP_AZIMUTH:        // CSS2Azimuth    case CSS_PROP_BACKGROUND_POSITION:        // CSS2BackgroundPosition        break;    case CSS_PROP_BACKGROUND_POSITION_X:      {      if(!primitiveValue) break;      Length l;      int type = primitiveValue->primitiveType();      if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG)	l = Length(primitiveValue->computeLength(style, doc), Fixed);      else if(type == CSSPrimitiveValue::CSS_PERCENTAGE)	l = Length((int)primitiveValue->getFloatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);      else	return;      style->setBackgroundXPosition(l);      break;      }    case CSS_PROP_BACKGROUND_POSITION_Y:      {      if(!primitiveValue) break;      Length l;      int type = primitiveValue->primitiveType();      if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG)	l = Length(primitiveValue->computeLength(style, doc), Fixed);      else if(type == CSSPrimitiveValue::CSS_PERCENTAGE)	l = Length((int)primitiveValue->getFloatValue(CSSPrimitiveValue::CSS_PERCENTAGE), Percent);      else	return;      style->setBackgroundYPosition(l);      break;      }    case CSS_PROP_BORDER_SPACING:        {        if(!primitiveValue) break;        short spacing = 0;        spacing = primitiveValue->computeLength(style, doc);        style->setBorderSpacing(spacing);        break;        }        // CSS2BorderSpacing    case CSS_PROP_CURSOR:        // CSS2Cursor        if(value->valueType() == CSSValue::CSS_INHERIT) {            if(!e->parentNode()) return;            style->setCursor(e->parentNode()->style()->cursor());            return;        } else if(primitiveValue) {	    if(primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_URI) {            	CSSImageValueImpl *image = static_cast<CSSImageValueImpl *>(primitiveValue);            	kdDebug( 6080 ) << "setting cursor image to " << image->cssText().string() << endl;            	style->setCursorImage(image->image());            } else {		style->setCursor( (ECursor) (primitiveValue->getIdent() - CSS_VAL_AUTO) );	    }        }        break;//    case CSS_PROP_PLAY_DURING:        // CSS2PlayDuring    case CSS_PROP_TEXT_SHADOW:        // list of CSS2TextShadow        break;// colors || inherit    case CSS_PROP_BACKGROUND_COLOR:    case CSS_PROP_BORDER_TOP_COLOR:    case CSS_PROP_BORDER_RIGHT_COLOR:    case CSS_PROP_BORDER_BOTTOM_COLOR:    case CSS_PROP_BORDER_LEFT_COLOR:    case CSS_PROP_COLOR:    case CSS_PROP_OUTLINE_COLOR:        // this property is an extension used to get HTML4 <font> right.    case CSS_PROP_TEXT_DECORATION_COLOR:        // ie scrollbar styling    case CSS_PROP_SCROLLBAR_FACE_COLOR:    case CSS_PROP_SCROLLBAR_SHADOW_COLOR:    case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:    case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:    case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:    case CSS_PROP_SCROLLBAR_TRACK_COLOR:    case CSS_PROP_SCROLLBAR_ARROW_COLOR:    {        QColor col;        if(value->valueType() == CSSValue::CSS_INHERIT)        {            switch(prop->m_id)            {            case CSS_PROP_BACKGROUND_COLOR:                style->setBackgroundColor(e->parentNode()->style()->backgroundColor()); break;            case CSS_PROP_BORDER_TOP_COLOR:                style->setBorderTopColor(e->parentNode()->style()->borderTopColor()); break;            case CSS_PROP_BORDER_RIGHT_COLOR:                style->setBorderRightColor(e->parentNode()->style()->borderRightColor()); break;            case CSS_PROP_BORDER_BOTTOM_COLOR:                style->setBorderBottomColor(e->parentNode()->style()->borderBottomColor()); break;            case CSS_PROP_BORDER_LEFT_COLOR:                style->setBorderLeftColor(e->parentNode()->style()->borderLeftColor()); break;            case CSS_PROP_COLOR:                style->setColor(e->parentNode()->style()->color()); break;            case CSS_PROP_OUTLINE_COLOR:		style->setOutlineColor(e->parentNode()->style()->outlineColor()); break;            default:                // ###                break;            }            return;        }        if(!primitiveValue) return;        if(primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_RGBCOLOR)            col = primitiveValue->getRGBColorValue()->color();        else            return;        //kdDebug( 6080 ) << "applying color " << col.isValid() << endl;        switch(prop->m_id)        {        case CSS_PROP_BACKGROUND_COLOR:            style->setBackgroundColor(col); break;        case CSS_PROP_BORDER_TOP_COLOR:            style->setBorderTopColor(col); break;        case CSS_PROP_BORDER_RIGHT_COLOR:            style->setBorderRightColor(col); break;        case CSS_PROP_BORDER_BOTTOM_COLOR:            style->setBorderBottomColor(col); break;        case CSS_PROP_BORDER_LEFT_COLOR:            style->setBorderLeftColor(col); break;        case CSS_PROP_COLOR:            style->setColor(col); break;        case CSS_PROP_TEXT_DECORATION_COLOR:            style->setTextDecorationColor(col); break;        case CSS_PROP_OUTLINE_COLOR:            style->setOutlineColor(col); break;        case CSS_PROP_SCROLLBAR_FACE_COLOR:            style->setPaletteColor(QPalette::Active, QColorGroup::Button, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Button, col);            break;        case CSS_PROP_SCROLLBAR_SHADOW_COLOR:            style->setPaletteColor(QPalette::Active, QColorGroup::Shadow, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Shadow, col);            break;        case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:            style->setPaletteColor(QPalette::Active, QColorGroup::Light, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Light, col);            break;        case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:            break;        case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:            style->setPaletteColor(QPalette::Active, QColorGroup::Dark, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Dark, col);            break;        case CSS_PROP_SCROLLBAR_TRACK_COLOR:            style->setPaletteColor(QPalette::Active, QColorGroup::Base, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Base, col);            style->setPaletteColor(QPalette::Active, QColorGroup::Mid, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Mid, col);            style->setPaletteColor(QPalette::Active, QColorGroup::Background, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::Background, col);            break;        case CSS_PROP_SCROLLBAR_ARROW_COLOR:            style->setPaletteColor(QPalette::Active, QColorGroup::ButtonText, col);            style->setPaletteColor(QPalette::Inactive, QColorGroup::ButtonText, col);            break;        default:            return;        }        return;    }    break;// uri || inherit    case CSS_PROP_BACKGROUND_IMAGE:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setBackgroundImage(e->parentNode()->style()->backgroundImage());            break;        }        if(!primitiveValue) return;        CSSImageValueImpl *image = static_cast<CSSImageValueImpl *>(primitiveValue);        style->setBackgroundImage(image->image());        //kdDebug( 6080 ) << "setting image in style to " << image->image() << endl;        break;    }//     case CSS_PROP_CUE_AFTER://     case CSS_PROP_CUE_BEFORE://         break;    case CSS_PROP_LIST_STYLE_IMAGE:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setListStyleImage(e->parentNode()->style()->listStyleImage());            break;        }        if(!primitiveValue) return;        CSSImageValueImpl *image = static_cast<CSSImageValueImpl *>(primitiveValue);        style->setListStyleImage(image->image());        kdDebug( 6080 ) << "setting image in list to " << image->image() << endl;        break;    }// length    case CSS_PROP_BORDER_TOP_WIDTH:    case CSS_PROP_BORDER_RIGHT_WIDTH:    case CSS_PROP_BORDER_BOTTOM_WIDTH:    case CSS_PROP_BORDER_LEFT_WIDTH:    case CSS_PROP_OUTLINE_WIDTH:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            switch(prop->m_id)            {            case CSS_PROP_BORDER_TOP_WIDTH:

⌨️ 快捷键说明

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