diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2014-09-23 13:54:19 +0000 |
|---|---|---|
| committer | tavmjong-free <tavmjong@free.fr> | 2014-09-23 13:54:19 +0000 |
| commit | 7eee00aa64d59585d3b1c0e411551384a0a137a2 (patch) | |
| tree | 2cd7525df81987407e8157ab29f71138d632dfd9 /src/style-internal.cpp | |
| parent | Extensions. Fix for Bug #1372200 (Comment within <script> element in INX file... (diff) | |
| download | inkscape-7eee00aa64d59585d3b1c0e411551384a0a137a2.tar.gz inkscape-7eee00aa64d59585d3b1c0e411551384a0a137a2.zip | |
Fix for #1334792. Correct inheritance for 'line-height' property.
(bzr r13564)
Diffstat (limited to 'src/style-internal.cpp')
| -rw-r--r-- | src/style-internal.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/style-internal.cpp b/src/style-internal.cpp index 2212f8fff..a55a11403 100644 --- a/src/style-internal.cpp +++ b/src/style-internal.cpp @@ -287,6 +287,14 @@ SPILength::read( gchar const *str ) { /* Percentage */ unit = SP_CSS_UNIT_PERCENT; value = value * 0.01; + if (name.compare( "line-height" ) == 0) { + // See: http://www.w3.org/TR/CSS2/visudet.html#propdef-line-height + if( style ) { + computed = value * style->font_size.computed; + } else { + computed = value * SPIFontSize::font_size_default; + } + } } else { /* Invalid */ return; @@ -355,6 +363,7 @@ void SPILength::cascade( const SPIBase* const parent ) { if( const SPILength* p = dynamic_cast<const SPILength*>(parent) ) { if( (inherits && !set) || inherit ) { + unit = p->unit; value = p->value; computed = p->computed; } else { @@ -365,6 +374,9 @@ SPILength::cascade( const SPIBase* const parent ) { } else if (unit == SP_CSS_UNIT_EX) { // FIXME: Get x height from libnrtype or pango. computed = value * em * 0.5; + } else if (unit == SP_CSS_UNIT_PERCENT && name.compare( "line-height" ) == 0 ) { + // Special case + computed = value * em; } } } else { @@ -469,6 +481,18 @@ SPILengthOrNormal::write( guint const flags, SPIBase const *const base) const { } void +SPILengthOrNormal::cascade( const SPIBase* const parent ) { + if( const SPILengthOrNormal* p = dynamic_cast<const SPILengthOrNormal*>(parent) ) { + if( (inherits && !set) || inherit ) { + normal = p->normal; + } + SPILength::cascade( parent ); + } else { + std::cerr << "SPILengthOrNormal::cascade(): Incorrect parent type" << std::endl; + } +} + +void SPILengthOrNormal::merge( const SPIBase* const parent ) { if( const SPILengthOrNormal* p = dynamic_cast<const SPILengthOrNormal*>(parent) ) { if( inherits ) { |
