summaryrefslogtreecommitdiffstats
path: root/src/style-internal.cpp
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2014-09-23 13:54:19 +0000
committertavmjong-free <tavmjong@free.fr>2014-09-23 13:54:19 +0000
commit7eee00aa64d59585d3b1c0e411551384a0a137a2 (patch)
tree2cd7525df81987407e8157ab29f71138d632dfd9 /src/style-internal.cpp
parentExtensions. Fix for Bug #1372200 (Comment within <script> element in INX file... (diff)
downloadinkscape-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.cpp24
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 ) {