⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 css_valueimpl.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void CSSValueListImpl::append(CSSValueImpl *val){    m_values.append(val);    val->ref();}DOM::DOMString CSSValueListImpl::cssText() const{    // ###    return DOM::DOMString();}// -------------------------------------------------------------------------------------CSSPrimitiveValueImpl::CSSPrimitiveValueImpl()    : CSSValueImpl(){    m_type = 0;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(int ident)    : CSSValueImpl(){    m_value.ident = ident;    m_type = CSSPrimitiveValue::CSS_IDENT;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(float num, CSSPrimitiveValue::UnitTypes type){    m_value.num = num;    m_type = type;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(const DOMString &str, CSSPrimitiveValue::UnitTypes type){    m_value.string = str.implementation();    if(m_value.string) m_value.string->ref();    m_type = type;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(const Counter &c){    m_value.counter = c.handle();    if (m_value.counter)	m_value.counter->ref();    m_type = CSSPrimitiveValue::CSS_COUNTER;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl( RectImpl *r){    m_value.rect = r;    if (m_value.rect)	m_value.rect->ref();    m_type = CSSPrimitiveValue::CSS_RECT;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(const RGBColor &rgb){    m_value.rgbcolor = new RGBColor(rgb);    m_type = CSSPrimitiveValue::CSS_RGBCOLOR;}CSSPrimitiveValueImpl::CSSPrimitiveValueImpl(const QColor &color){    m_value.rgbcolor = new RGBColor(color);    m_type = CSSPrimitiveValue::CSS_RGBCOLOR;}CSSPrimitiveValueImpl::~CSSPrimitiveValueImpl(){    cleanup();}void CSSPrimitiveValueImpl::cleanup(){    if(m_type == CSSPrimitiveValue::CSS_RGBCOLOR)	delete m_value.rgbcolor;    else if(m_type < CSSPrimitiveValue::CSS_STRING || m_type == CSSPrimitiveValue::CSS_IDENT)    { }    else if(m_type < CSSPrimitiveValue::CSS_COUNTER)	if(m_value.string) m_value.string->deref();    else if(m_type == CSSPrimitiveValue::CSS_COUNTER)	m_value.counter->deref();    else if(m_type == CSSPrimitiveValue::CSS_RECT)	m_value.rect->deref();    m_type = 0;}unsigned short CSSPrimitiveValueImpl::primitiveType() const{    return m_type;}void CSSPrimitiveValueImpl::setFloatValue( unsigned short unitType, float floatValue, int &exceptioncode ){    exceptioncode = 0;    cleanup();    // ### check if property supports this type    if(m_type > CSSPrimitiveValue::CSS_DIMENSION) {	exceptioncode = CSSException::SYNTAX_ERR + CSSException::_EXCEPTION_OFFSET;	return;    }    //if(m_type > CSSPrimitiveValue::CSS_DIMENSION) throw DOMException(DOMException::INVALID_ACCESS_ERR);    m_value.num = floatValue;    m_type = unitType;}float CSSPrimitiveValueImpl::getFloatValue( unsigned short /*unitType*/){    return m_value.num;}void CSSPrimitiveValueImpl::setStringValue( unsigned short stringType, const DOMString &stringValue, int &exceptioncode ){    exceptioncode = 0;    cleanup();    //if(m_type < CSSPrimitiveValue::CSS_STRING) throw DOMException(DOMException::INVALID_ACCESS_ERR);    //if(m_type > CSSPrimitiveValue::CSS_ATTR) throw DOMException(DOMException::INVALID_ACCESS_ERR);    if(m_type < CSSPrimitiveValue::CSS_STRING || m_type >> CSSPrimitiveValue::CSS_ATTR) {	exceptioncode = CSSException::SYNTAX_ERR + CSSException::_EXCEPTION_OFFSET;	return;    }    if(stringType != CSSPrimitiveValue::CSS_IDENT)    {	m_value.string = stringValue.implementation();	m_value.string->ref();	m_type = stringType;    }    // ### parse ident}DOMStringImpl *CSSPrimitiveValueImpl::getStringValue(  ){    if(m_type < CSSPrimitiveValue::CSS_STRING) return 0;    if(m_type > CSSPrimitiveValue::CSS_ATTR) return 0;    if(m_type == CSSPrimitiveValue::CSS_IDENT)    {	// ###	return 0;    }    return m_value.string;}CounterImpl *CSSPrimitiveValueImpl::getCounterValue(  ){    if(m_type != CSSPrimitiveValue::CSS_COUNTER) return 0;    return m_value.counter;}RectImpl *CSSPrimitiveValueImpl::getRectValue(  ){    if(m_type != CSSPrimitiveValue::CSS_RECT) return 0;    return m_value.rect;}RGBColor *CSSPrimitiveValueImpl::getRGBColorValue(  ){    if(m_type != CSSPrimitiveValue::CSS_RGBCOLOR) return 0;    return m_value.rgbcolor;}unsigned short CSSPrimitiveValueImpl::valueType() const{    return CSSValue::CSS_PRIMITIVE_VALUE;}bool CSSPrimitiveValueImpl::parseString( const DOMString &/*string*/, bool ){    // ###    return false;}int CSSPrimitiveValueImpl::getIdent(){    if(m_type != CSSPrimitiveValue::CSS_IDENT) return 0;    return m_value.ident;}DOM::DOMString CSSPrimitiveValueImpl::cssText() const{    // ### return the original value instead of a generated one (e.g. color    // name if it was specified) - check what spec says about this    DOMString text;    switch ( m_type ) {	case CSSPrimitiveValue::CSS_UNKNOWN:	    // ###	    break;	case CSSPrimitiveValue::CSS_NUMBER:	    text = DOMString(QString::number( (int)m_value.num ));	    break;	case CSSPrimitiveValue::CSS_PERCENTAGE:	    text = DOMString(QString::number( m_value.num ) + "%");	    break;	case CSSPrimitiveValue::CSS_EMS:	    text = DOMString(QString::number( m_value.num ) + "em");	    break;	case CSSPrimitiveValue::CSS_EXS:	    text = DOMString(QString::number( m_value.num ) + "ex");	    break;	case CSSPrimitiveValue::CSS_PX:	    text = DOMString(QString::number( m_value.num ) + "px");	    break;	case CSSPrimitiveValue::CSS_CM:	    text = DOMString(QString::number( m_value.num ) + "cm");	    break;	case CSSPrimitiveValue::CSS_MM:	    text = DOMString(QString::number( m_value.num ) + "mm");	    break;	case CSSPrimitiveValue::CSS_IN:	    text = DOMString(QString::number( m_value.num ) + "in");	    break;	case CSSPrimitiveValue::CSS_PT:	    text = DOMString(QString::number( m_value.num ) + "pt");	    break;	case CSSPrimitiveValue::CSS_PC:	    text = DOMString(QString::number( m_value.num ) + "pc");	    break;	case CSSPrimitiveValue::CSS_DEG:	    text = DOMString(QString::number( m_value.num ) + "deg");	    break;	case CSSPrimitiveValue::CSS_RAD:	    text = DOMString(QString::number( m_value.num ) + "rad");	    break;	case CSSPrimitiveValue::CSS_GRAD:	    text = DOMString(QString::number( m_value.num ) + "grad");	    break;	case CSSPrimitiveValue::CSS_MS:	    text = DOMString(QString::number( m_value.num ) + "ms");	    break;	case CSSPrimitiveValue::CSS_S:	    text = DOMString(QString::number( m_value.num ) + "s");	    break;	case CSSPrimitiveValue::CSS_HZ:	    text = DOMString(QString::number( m_value.num ) + "hz");	    break;	case CSSPrimitiveValue::CSS_KHZ:	    text = DOMString(QString::number( m_value.num ) + "khz");	    break;	case CSSPrimitiveValue::CSS_DIMENSION:	    // ###	    break;	case CSSPrimitiveValue::CSS_STRING:	    // ###	    break;	case CSSPrimitiveValue::CSS_URI:	    text = DOMString( m_value.string );	    break;	case CSSPrimitiveValue::CSS_IDENT:	    text = getValueName(m_value.ident);	    break;	case CSSPrimitiveValue::CSS_ATTR:	    // ###	    break;	case CSSPrimitiveValue::CSS_COUNTER:	    // ###	    break;	case CSSPrimitiveValue::CSS_RECT:	    // ###	    break;	case CSSPrimitiveValue::CSS_RGBCOLOR:	    text = m_value.rgbcolor->color().name();	    break;	default:	    break;    }    return text;}int CSSPrimitiveValueImpl::computeLength(khtml::RenderStyle *style, DOM::DocumentImpl *doc ){    return ( int ) computeLengthFloat( style, doc );}float CSSPrimitiveValueImpl::computeLengthFloat(khtml::RenderStyle *style, DOM::DocumentImpl *doc ){    float dpiY = 72.; // fallback    QPaintDeviceMetrics *devMetrics = doc->paintDeviceMetrics();    if ( devMetrics )        dpiY = devMetrics->logicalDpiY();    if ( !khtml::printpainter && dpiY < 96 )        dpiY = 96.;    float factor = 1.;    float documentScalingFactor = (float)doc->view()->part()->scalingFactor() / 100.;    switch(m_type)    {    case CSSPrimitiveValue::CSS_EMS:       	factor = style->font().pixelSize();	documentScalingFactor = 1.;	break;    case CSSPrimitiveValue::CSS_EXS:	{        QFontMetrics fm = khtml::fontMetrics(style->font());        QRect b = fm.boundingRect('x');        factor = b.height();	documentScalingFactor = 1.;        break;	}    case CSSPrimitiveValue::CSS_PX:        break;    case CSSPrimitiveValue::CSS_CM:	factor = dpiY/2.54; //72dpi/(2.54 cm/in)        break;    case CSSPrimitiveValue::CSS_MM:	factor = dpiY/25.4;        break;    case CSSPrimitiveValue::CSS_IN:            factor = dpiY;        break;    case CSSPrimitiveValue::CSS_PT:            factor = dpiY/72.;        break;    case CSSPrimitiveValue::CSS_PC:        // 1 pc == 12 pt            factor = dpiY*12./72.;        break;    default:        return -1;    }    return m_value.num*factor*documentScalingFactor;}// -----------------------------------------------------------------RectImpl::RectImpl(){    m_top = 0;    m_right = 0;    m_bottom = 0;    m_left = 0;}RectImpl::~RectImpl(){    if (m_top) m_top->deref();    if (m_right) m_right->deref();    if (m_bottom) m_bottom->deref();    if (m_left) m_left->deref();}void RectImpl::setTop( CSSPrimitiveValueImpl *top ){    if( top ) top->ref();    if ( m_top ) m_top->deref();    m_top = top;}void RectImpl::setRight( CSSPrimitiveValueImpl *right ){    if( right ) right->ref();    if ( m_right ) m_right->deref();    m_right = right;}void RectImpl::setBottom( CSSPrimitiveValueImpl *bottom ){    if( bottom ) bottom->ref();    if ( m_bottom ) m_bottom->deref();    m_bottom = bottom;}void RectImpl::setLeft( CSSPrimitiveValueImpl *left ){    if( left ) left->ref();    if ( m_left ) m_left->deref();    m_left = left;}// -----------------------------------------------------------------CSSImageValueImpl::CSSImageValueImpl(const DOMString &url, const DOMString &baseurl, StyleBaseImpl *style)    : CSSPrimitiveValueImpl(url, CSSPrimitiveValue::CSS_URI){    khtml::DocLoader *docLoader = 0;    StyleBaseImpl *root = style;    while (root->parent())	root = root->parent();    if (root->isCSSStyleSheet())	docLoader = static_cast<CSSStyleSheetImpl*>(root)->docLoader();    if (docLoader)	m_image = docLoader->requestImage(url, baseurl);    else	m_image = khtml::Cache::requestImage(0, url, baseurl);    if(m_image) m_image->ref(this);}CSSImageValueImpl::CSSImageValueImpl()    : CSSPrimitiveValueImpl(CSS_VAL_NONE){    m_image = 0;}CSSImageValueImpl::~CSSImageValueImpl(){    if(m_image) m_image->deref(this);}

⌨️ 快捷键说明

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