diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-05-26 12:43:49 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-05-26 12:43:49 +0200 |
commit | 4b8e3faa707e764d4d971b7efcca4c2414bb27df (patch) | |
tree | 715d0956557318bc7c444fdf084262e4a3ca4026 /src | |
parent | e506d6bcdddc2cda548e7e1dd064519b0856d534 (diff) | |
download | qtlocation-mapboxgl-4b8e3faa707e764d4d971b7efcca4c2414bb27df.tar.gz |
consolidate stylesheet cascading
Diffstat (limited to 'src')
-rw-r--r-- | src/style/style.cpp | 185 | ||||
-rw-r--r-- | src/style/style_parser.cpp | 2 |
2 files changed, 53 insertions, 134 deletions
diff --git a/src/style/style.cpp b/src/style/style.cpp index e3adc3c897..7f9b6ba782 100644 --- a/src/style/style.cpp +++ b/src/style/style.cpp @@ -25,6 +25,50 @@ void Style::reset() { properties_to_transition.clear(); } +void Style::cascadeProperties(GenericProperties &properties, const GenericClass& klass, const std::string& layer_name, const std::string& class_name, float z) { + if (klass.enabled) { + properties.enabled = klass.enabled.get().evaluate<bool>(z); + } + + if (klass.translate) { + properties.translate = {{ klass.translate.get()[0].evaluate<float>(z), + klass.translate.get()[1].evaluate<float>(z) }}; + computed.effective_classes[layer_name][TransitionablePropertyKey::Translate] = class_name; + if (klass.translate_transition && klass.translate_transition.get().duration) { + properties_to_transition[layer_name][TransitionablePropertyKey::Translate] = klass.translate_transition.get(); + } + } + + if (klass.translateAnchor) { + properties.translateAnchor = klass.translateAnchor.get(); + } + + if (klass.opacity) { + properties.opacity = klass.opacity.get().evaluate<float>(z); + computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; + if (klass.opacity_transition && klass.opacity_transition.get().duration) { + properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = klass.opacity_transition.get(); + } + } + + if (klass.prerender) { + properties.prerender = klass.prerender.get(); + } + + if (klass.prerenderBuffer) { + properties.prerenderBuffer = klass.prerenderBuffer.get(); + } + + if (klass.prerenderSize) { + properties.prerenderSize = klass.prerenderSize.get(); + } + + if (klass.prerenderBlur) { + properties.prerenderBlur = klass.prerenderBlur.get(); + } +} + + void Style::cascade(float z) { uv::writelock lock(mtx); @@ -62,22 +106,7 @@ void Style::cascade(float z) { llmr::FillProperties& fill = computed.fills[layer_name]; - if (layer.enabled) { - fill.enabled = layer.enabled.get().evaluate<bool>(z); - } - - if (layer.translate) { - fill.translate = {{ layer.translate.get()[0].evaluate<float>(z), - layer.translate.get()[1].evaluate<float>(z) }}; - computed.effective_classes[layer_name][TransitionablePropertyKey::Translate] = class_name; - if (layer.translate_transition && layer.translate_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Translate] = layer.translate_transition.get(); - } - } - - if (layer.translateAnchor) { - fill.translateAnchor = layer.translateAnchor.get(); - } + cascadeProperties(fill, layer, layer_name, class_name, z); if (layer.winding) { fill.winding = layer.winding.get(); @@ -103,25 +132,9 @@ void Style::cascade(float z) { } } - if (layer.opacity) { - fill.opacity = layer.opacity.get().evaluate<float>(z); - computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; - if (layer.opacity_transition && layer.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = layer.opacity_transition.get(); - } - } - if (layer.image) { fill.image = layer.image.get(); } - - if (layer.prerender) { - fill.prerender = layer.prerender.get(); - } - - if (layer.prerenderBlur) { - fill.prerenderBlur = layer.prerenderBlur.get(); - } } // Cascade line classes. @@ -131,22 +144,7 @@ void Style::cascade(float z) { llmr::LineProperties& stroke = computed.lines[layer_name]; - if (layer.enabled) { - stroke.enabled = layer.enabled.get().evaluate<bool>(z); - } - - if (layer.translate) { - stroke.translate = {{ layer.translate.get()[0].evaluate<float>(z), - layer.translate.get()[1].evaluate<float>(z) }}; - computed.effective_classes[layer_name][TransitionablePropertyKey::Translate] = class_name; - if (layer.translate_transition && layer.translate_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Translate] = layer.translate_transition.get(); - } - } - - if (layer.translateAnchor) { - stroke.translateAnchor = layer.translateAnchor.get(); - } + cascadeProperties(stroke, layer, layer_name, class_name, z); if (layer.width) { stroke.width = layer.width.get().evaluate<float>(z); @@ -181,14 +179,6 @@ void Style::cascade(float z) { properties_to_transition[layer_name][TransitionablePropertyKey::DashArray] = layer.dash_array_transition.get(); } } - - if (layer.opacity) { - stroke.opacity = layer.opacity.get().evaluate<float>(z); - computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; - if (layer.opacity_transition && layer.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = layer.opacity_transition.get(); - } - } } // Cascade icon classes. @@ -198,22 +188,7 @@ void Style::cascade(float z) { llmr::IconProperties& icon = computed.icons[layer_name]; - if (layer.enabled) { - icon.enabled = layer.enabled.get().evaluate<bool>(z); - } - - if (layer.translate) { - icon.translate = {{ layer.translate.get()[0].evaluate<float>(z), - layer.translate.get()[1].evaluate<float>(z) }}; - computed.effective_classes[layer_name][TransitionablePropertyKey::Translate] = class_name; - if (layer.translate_transition && layer.translate_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Translate] = layer.translate_transition.get(); - } - } - - if (layer.translateAnchor) { - icon.translateAnchor = layer.translateAnchor.get(); - } + cascadeProperties(icon, layer, layer_name, class_name, z); if (layer.color) { icon.color = layer.color.get(); @@ -227,14 +202,6 @@ void Style::cascade(float z) { icon.size = layer.size.get().evaluate<float>(z); } - if (layer.opacity) { - icon.opacity = layer.opacity.get().evaluate<float>(z); - computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; - if (layer.opacity_transition && layer.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = layer.opacity_transition.get(); - } - } - if (layer.image) { icon.image = layer.image.get(); } @@ -263,22 +230,7 @@ void Style::cascade(float z) { llmr::TextProperties& text = computed.texts[layer_name]; - if (layer.enabled) { - text.enabled = layer.enabled.get().evaluate<bool>(z); - } - - if (layer.translate) { - text.translate = {{ layer.translate.get()[0].evaluate<float>(z), - layer.translate.get()[1].evaluate<float>(z) }}; - computed.effective_classes[layer_name][TransitionablePropertyKey::Translate] = class_name; - if (layer.translate_transition && layer.translate_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Translate] = layer.translate_transition.get(); - } - } - - if (layer.translateAnchor) { - text.translateAnchor = layer.translateAnchor.get(); - } + cascadeProperties(text, layer, layer_name, class_name, z); if (layer.color) { text.color = layer.color.get(); @@ -323,14 +275,6 @@ void Style::cascade(float z) { if (layer.always_visible) { text.always_visible = layer.always_visible.get().evaluate<bool>(z); } - - if (layer.opacity) { - text.opacity = layer.opacity.get().evaluate<float>(z); - computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; - if (layer.opacity_transition && layer.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = layer.opacity_transition.get(); - } - } } // Cascade raster classes. @@ -340,17 +284,7 @@ void Style::cascade(float z) { llmr::RasterProperties& raster = computed.rasters[layer_name]; - if (layer.enabled) { - raster.enabled = layer.enabled.get().evaluate<bool>(z); - } - - if (layer.opacity) { - raster.opacity = layer.opacity.get().evaluate<float>(z); - computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; - if (layer.opacity_transition && layer.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = layer.opacity_transition.get(); - } - } + cascadeProperties(raster, layer, layer_name, class_name, z); } // Cascade composite classes. @@ -360,21 +294,13 @@ void Style::cascade(float z) { llmr::CompositeProperties& composite = computed.composites[layer_name]; - if (layer.enabled) { - composite.enabled = layer.enabled.get().evaluate<bool>(z); - } - - if (layer.opacity) { - composite.opacity = layer.opacity.get().evaluate<float>(z); - computed.effective_classes[layer_name][TransitionablePropertyKey::Opacity] = class_name; - if (layer.opacity_transition && layer.opacity_transition.get().duration) { - properties_to_transition[layer_name][TransitionablePropertyKey::Opacity] = layer.opacity_transition.get(); - } - } + cascadeProperties(composite, layer, layer_name, class_name, z); } // Cascade background. { + cascadeProperties(computed.background, sheetClass.background, "background", class_name, z); + if (sheetClass.background.color) { computed.background.color = sheetClass.background.color.get(); computed.effective_classes["background"][TransitionablePropertyKey::Color] = class_name; @@ -382,13 +308,6 @@ void Style::cascade(float z) { properties_to_transition["background"][TransitionablePropertyKey::Color] = sheetClass.background.color_transition.get(); } } - if (sheetClass.background.opacity) { - computed.background.opacity = sheetClass.background.opacity.get().evaluate<float>(z); - computed.effective_classes["background"][TransitionablePropertyKey::Opacity] = class_name; - if (sheetClass.background.opacity_transition && sheetClass.background.opacity_transition.get().duration) { - properties_to_transition["background"][TransitionablePropertyKey::Opacity] = sheetClass.background.opacity_transition.get(); - } - } } } diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index b6e73147dc..56e28350b9 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -533,7 +533,7 @@ void StyleParser::parseGenericClass(GenericClass &klass, JSVal value) { } if (value.HasMember("prerender-blur")) { - klass.prerenderBlur = parseBoolean(value["prerender-blur"]); + klass.prerenderBlur = toNumber<uint64_t>(parseValue(value["prerender-blur"])); } } |