cssstyleselector.cpp

来自「monqueror一个很具有参考价值的源玛」· C++ 代码 · 共 1,977 行 · 第 1/5 页

CPP
1,977
字号
        break;    }    case CSS_PROP_EMPTY_CELLS:        break;    case CSS_PROP_FLOAT:    {        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            style->setFloating(e->parentNode()->style()->floating());            return;        }        if(!primitiveValue) return;        EFloat f;        switch(primitiveValue->getIdent())        {        case CSS_VAL_LEFT:            f = FLEFT; break;        case CSS_VAL_RIGHT:            f = FRIGHT; break;        case CSS_VAL_NONE:            f = FNONE; break;        default:            return;        }        style->setFloating(f);        break;    }        break;    case CSS_PROP_FONT_STRETCH:        break;    case CSS_PROP_FONT_STYLE:    {        MGFont f = style->font();        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            f.setItalic(e->parentNode()->style()->font().italic());            style->setFont(f);            return;        }        if(!primitiveValue) return;        switch(primitiveValue->getIdent())        {            // ### oblique is the same as italic for the moment...        case CSS_VAL_OBLIQUE:        case CSS_VAL_ITALIC:            f.setItalic(true);            break;        case CSS_VAL_NORMAL:            f.setItalic(false);            break;        default:            return;        }        style->setFont(f);        break;    }    case CSS_PROP_FONT_VARIANT:        // ### no small caps at the moment...        break;    case CSS_PROP_FONT_WEIGHT:    {        MGFont f = style->font();        if(value->valueType() == CSSValue::CSS_INHERIT)        {            if(!e->parentNode()) return;            f.setWeight(e->parentNode()->style()->font().weight());            style->setFont(f);            return;        }        if(!primitiveValue) return;        if(primitiveValue->getIdent())        {            switch(primitiveValue->getIdent())            {                // ### we just support normal and bold fonts at the moment...                // setWeight can actually accept values between 0 and 99...            case CSS_VAL_BOLD:            case CSS_VAL_BOLDER:                f.setWeight(MG::Bold);                break;            case CSS_VAL_NORMAL:            case CSS_VAL_LIGHTER:                f.setWeight(MG::Normal);                break;            default:                return;            }        }        else        {            // ### fix parsing of 100-900 values in parser, apply them here        }        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())        {            EListStylePosition p;            switch(primitiveValue->getIdent())            {            case CSS_VAL_INSIDE:                p = INSIDE; break;            case CSS_VAL_BOLDER:                p = OUTSIDE; break;            default:                return;            }            style->setListStylePosition(p);        }        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;            switch(primitiveValue->getIdent())            {            case CSS_VAL_DISC:                t = DISC; break;            case CSS_VAL_CIRCLE:                t = CIRCLE; break;            case CSS_VAL_SQUARE:                t = SQUARE; break;            case CSS_VAL_HEBREW:                t = HEBREW; break;            case CSS_VAL_ARMENIAN:                t = ARMENIAN; break;            case CSS_VAL_GEORGIAN:                t = GEORGIAN; break;            case CSS_VAL_CJK_IDEOGRAPHIC:                t = CJK_IDEOGRAPHIC; break;            case CSS_VAL_HIRAGANA:                t = HIRAGANA; break;            case CSS_VAL_KATAKANA:                t = KATAKANA; break;            case CSS_VAL_HIRAGANA_IROHA:                t = HIRAGANA_IROHA; break;            case CSS_VAL_KATAKANA_IROHA:                t = KATAKANA_IROHA; break;            case CSS_VAL_DECIMAL_LEADING_ZERO:                t = DECIMAL_LEADING_ZERO; break;            case CSS_VAL_DECIMAL:                t = LDECIMAL; break;            case CSS_VAL_LOWER_ROMAN:                t = LOWER_ROMAN; break;            case CSS_VAL_UPPER_ROMAN:                t = UPPER_ROMAN; break;            case CSS_VAL_LOWER_GREEK:                t = LOWER_GREEK; break;            case CSS_VAL_LOWER_ALPHA:                t = LOWER_ALPHA; break;            case CSS_VAL_LOWER_LATIN:                t = LOWER_LATIN; break;            case CSS_VAL_UPPER_ALPHA:                t = UPPER_ALPHA; break;            case CSS_VAL_UPPER_LATIN:                t = UPPER_LATIN; break;            case CSS_VAL_NONE:                t = LNONE; break;            default:                return;            }            style->setListStyleType(t);        }        return;    }    case CSS_PROP_OUTLINE_STYLE:    case CSS_PROP_OVERFLOW:    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:            {                DocumentImpl *doc = e->ownerDocument();                if(doc && doc->view())                    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_TEXT_TRANSFORM:    case CSS_PROP_UNICODE_BIDI:        break;    case CSS_PROP_VISIBILITY:        {        if(value->valueType() == CSSValue::CSS_INHERIT) {            if(!e->parentNode()) return;            style->setVisiblity(e->parentNode()->style()->visiblity());            return;        }        if(!primitiveValue->getIdent()) return;        EVisiblity s;        switch(primitiveValue->getIdent()) {        case CSS_VAL_VISIBLE:            s = VISIBLE;            break;        case CSS_VAL_HIDDEN:            s = HIDDEN;            break;        case CSS_VAL_COLLAPSE:            s = COLLAPSE;            break;        default:            return;        }        style->setVisiblity(s);        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_KONQ_BGPOS_X:      {      if(!primitiveValue) break;      Length l;      int type = primitiveValue->primitiveType();      if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG)	l = Length(computeLength(primitiveValue, style, part), 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_KONQ_BGPOS_Y:      {      if(!primitiveValue) break;      Length l;      int type = primitiveValue->primitiveType();      if(type > CSSPrimitiveValue::CSS_PERCENTAGE && type < CSSPrimitiveValue::CSS_DEG)	l = Length(computeLength(primitiveValue, style, part), 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 = computeLength(primitiveValue, style, part);        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;        }        if(!primitiveValue->getIdent()) return;        {            ECursor c = CURSOR_AUTO;            switch(primitiveValue->getIdent()) {            case CSS_VAL_AUTO:                break;            case CSS_VAL_DEFAULT:                c = CURSOR_DEFAULT; break;                // ### shouldn't that be crosshair????            case CSS_VAL_CROSSHAIR:                c = CURSOR_CROSS; break;            case CSS_VAL_POINTER:                c = CURSOR_POINTER; break;            case CSS_VAL_MOVE:                c = CURSOR_MOVE; break;            case CSS_VAL_E_RESIZE:                c = CURSOR_E_RESIZE; break;            case CSS_VAL_NE_RESIZE:                c = CURSOR_NE_RESIZE; break;            case CSS_VAL_NW_RESIZE:                c = CURSOR_NW_RESIZE; break;            case CSS_VAL_N_RESIZE:                c = CURSOR_N_RESIZE; break;            case CSS_VAL_SE_RESIZE:                c = CURSOR_SE_RESIZE; break;            case CSS_VAL_SW_RESIZE:                c = CURSOR_SW_RESIZE; break;            case CSS_VAL_S_RESIZE:                c = CURSOR_S_RESIZE; break;            case CSS_VAL_W_RESIZE:                c = CURSOR_W_RESIZE; break;            case CSS_VAL_TEXT:                c = CURSOR_TEXT; break;            case CSS_VAL_WAIT:                c = CURSOR_WAIT; break;            case CSS_VAL_HELP:                c = CURSOR_HELP; break;            }            style->setCursor(c);        }        break;    case CSS_PROP_PLAY_DURING:        // CSS2PlayDuring    case CSS_PROP_TEXT_SHADOW:        // list of CSS2TextShadow        break;

⌨️ 快捷键说明

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