📄 css_valueimpl.cpp
字号:
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 + -