From 270c24a9a8c8a02e62132cd4cb7b8aac2c1e6de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 23 Jul 2014 15:37:01 +0200 Subject: add symbol* properties/keys --- include/mbgl/style/property_key.hpp | 12 ++++++++- include/mbgl/style/style_bucket.hpp | 43 +++++++++++++++++++++++++++++++++ include/mbgl/style/style_properties.hpp | 33 +++++++++++++++++++++++++ include/mbgl/style/types.hpp | 39 ++++++++++++++++++++++++++++++ src/style/property_fallback.cpp | 29 ++++++++++++++-------- src/style/style_layer.cpp | 1 - src/style/style_parser.cpp | 1 - src/style/style_properties.cpp | 1 + 8 files changed, 146 insertions(+), 13 deletions(-) diff --git a/include/mbgl/style/property_key.hpp b/include/mbgl/style/property_key.hpp index d9005f2f4a..d5553ebf0d 100644 --- a/include/mbgl/style/property_key.hpp +++ b/include/mbgl/style/property_key.hpp @@ -30,7 +30,14 @@ enum class PropertyKey { IconOpacity, IconRotate, - IconRotateAnchor, + IconSize, + IconColor, + IconHaloColor, + IconHaloWidth, + IconHaloBlur, + IconTranslateX, + IconTranslateY, + IconTranslateAnchor, TextOpacity, TextSize, @@ -38,6 +45,9 @@ enum class PropertyKey { TextHaloColor, TextHaloWidth, TextHaloBlur, + TextTranslateX, + TextTranslateY, + TextTranslateAnchor, CompositeOpacity, diff --git a/include/mbgl/style/style_bucket.hpp b/include/mbgl/style/style_bucket.hpp index 26a0ca2f70..6948a96158 100644 --- a/include/mbgl/style/style_bucket.hpp +++ b/include/mbgl/style/style_bucket.hpp @@ -4,8 +4,10 @@ #include #include #include + #include #include +#include #include #include @@ -59,6 +61,47 @@ public: bool always_visible = false; }; +class StyleBucketSymbol : util::noncopyable { +public: + PlacementType placement = PlacementType::Default; + float min_distance = 250.0f; + + struct { + bool allow_overlap = false; + bool ignore_placement = false; + bool optional = false; + RotationAlignmentType rotation_alignment = RotationAlignmentType::Viewport; + float max_size = 1.0f; + std::string image; + float padding = 2.0f; + bool keep_upright = false; + vec2 offset = {0, 0}; + } icon; + + struct { + RotationAlignmentType rotation_alignment = RotationAlignmentType::Viewport; + std::string field; + std::string font; + float max_size = 16.0f; + float max_width = 15.0f * 24 /* em */; + float line_height = 1.2f * 24 /* em */; + float letter_spacing = 0.0f * 24 /* em */; + TextJustifyType justify = TextJustifyType::Center; + TextHorizontalAlignType horizontal_align = TextHorizontalAlignType::Center; + TextVerticalAlignType vertical_align = TextVerticalAlignType::Center; + float max_angle_delta = 45.0f /* degrees */; + float rotate = 0.0f; + float slant = 0.0f; + float padding = 2.0f; + bool keep_upright = true; + TextTransformType transform = TextTransformType::None; + vec2 offset = {0, 0}; + bool allow_overlap = false; + bool ignore_placement = false; + bool optional = false; + } text; +}; + class StyleBucketRaster { public: }; diff --git a/include/mbgl/style/style_properties.hpp b/include/mbgl/style/style_properties.hpp index ccd5ce4aec..9575347be3 100644 --- a/include/mbgl/style/style_properties.hpp +++ b/include/mbgl/style/style_properties.hpp @@ -69,6 +69,39 @@ struct TextProperties { } }; +struct SymbolProperties { + inline SymbolProperties() {} + + struct { + float opacity = 1.0f; + float rotate = 0.0f; + float size = 1.0f; + Color color = {{ 0, 0, 0, 1 }}; + Color halo_color = {{ 0, 0, 0, 0 }}; + float halo_width = 0.0f; + float halo_blur = 0.0f; + std::array translate = {{ 0, 0 }}; + TranslateAnchorType translate_anchor = TranslateAnchorType::Map; + } icon; + + struct { + float opacity = 1.0f; + float size = 12.0f; + Color color = {{ 0, 0, 0, 1 }}; + Color halo_color = {{ 0, 0, 0, 0 }}; + float halo_width = 0.0f; + float halo_blur = 0.0f; + std::array translate = {{ 0, 0 }}; + TranslateAnchorType translate_anchor = TranslateAnchorType::Map; + } text; + + inline bool isVisible() const { + return (icon.opacity > 0 && (icon.color[3] > 0 || icon.halo_color[3] > 0) && icon.size > 0) || + (text.opacity > 0 && (text.color[3] > 0 || text.halo_color[3] > 0) && text.size > 0); + } +}; + + struct CompositeProperties { inline CompositeProperties() {} float opacity = 1.0f; diff --git a/include/mbgl/style/types.hpp b/include/mbgl/style/types.hpp index f8e99418da..70090a7e36 100644 --- a/include/mbgl/style/types.hpp +++ b/include/mbgl/style/types.hpp @@ -61,6 +61,12 @@ enum class TextPathType : uint8_t { Default = Horizontal }; +enum class PlacementType : bool { + Point, + Line, + Default = Point +}; + enum class TextTransformType : uint8_t { None, Uppercase, @@ -80,6 +86,33 @@ enum class RotateAnchorType : uint8_t { Default = Viewport }; +enum class RotationAlignmentType : bool { + Map, + Viewport, + Default = Viewport +}; + +enum class TextJustifyType : uint8_t { + Center, + Left, + Right, + Default = Center +}; + +enum class TextHorizontalAlignType : uint8_t { + Left, + Center, + Right, + Default = Center +}; + +enum class TextVerticalAlignType : uint8_t { + Top, + Center, + Bottom, + Default = Center +}; + enum class SourceType : uint8_t { Vector, Raster, @@ -114,6 +147,12 @@ inline TextPathType parseTextPathType(const std::string &path) { return TextPathType::Default; } +inline PlacementType parsePlacementType(const std::string &path) { + if (path == "point") return PlacementType::Point; + if (path == "line") return PlacementType::Line; + return PlacementType::Default; +} + inline TextTransformType parseTextTransformType(const std::string& transform) { if (transform == "uppercase") return TextTransformType::Uppercase; if (transform == "lowercase") return TextTransformType::Lowercase; diff --git a/src/style/property_fallback.cpp b/src/style/property_fallback.cpp index 78e6fc8638..fb291034e9 100644 --- a/src/style/property_fallback.cpp +++ b/src/style/property_fallback.cpp @@ -23,16 +23,25 @@ const std::map PropertyFallbackValue::properties = { { PropertyKey::LineDashLand, defaultStyleProperties().dash_array[0] }, { PropertyKey::LineDashGap, defaultStyleProperties().dash_array[1] }, - { PropertyKey::IconOpacity, defaultStyleProperties().opacity }, - { PropertyKey::IconRotate, defaultStyleProperties().rotate }, - { PropertyKey::IconRotateAnchor, defaultStyleProperties().rotate_anchor }, - - { PropertyKey::TextOpacity, defaultStyleProperties().opacity }, - { PropertyKey::TextSize, defaultStyleProperties().size }, - { PropertyKey::TextColor, defaultStyleProperties().color }, - { PropertyKey::TextHaloColor, defaultStyleProperties().halo_color }, - { PropertyKey::TextHaloWidth, defaultStyleProperties().halo_width }, - { PropertyKey::TextHaloBlur, defaultStyleProperties().halo_blur }, + { PropertyKey::IconOpacity, defaultStyleProperties().icon.opacity }, + { PropertyKey::IconRotate, defaultStyleProperties().icon.rotate }, + { PropertyKey::IconSize, defaultStyleProperties().icon.size }, + { PropertyKey::IconColor, defaultStyleProperties().icon.color }, + { PropertyKey::IconHaloColor, defaultStyleProperties().icon.halo_color }, + { PropertyKey::IconHaloWidth, defaultStyleProperties().icon.halo_width }, + { PropertyKey::IconHaloBlur, defaultStyleProperties().icon.halo_blur }, + { PropertyKey::IconTranslateX, defaultStyleProperties().icon.translate[0] }, + { PropertyKey::IconTranslateY, defaultStyleProperties().icon.translate[1] }, + { PropertyKey::IconTranslateAnchor, defaultStyleProperties().icon.translate_anchor }, + { PropertyKey::TextOpacity, defaultStyleProperties().text.opacity }, + { PropertyKey::TextSize, defaultStyleProperties().text.size }, + { PropertyKey::TextColor, defaultStyleProperties().text.color }, + { PropertyKey::TextHaloColor, defaultStyleProperties().text.halo_color }, + { PropertyKey::TextHaloWidth, defaultStyleProperties().text.halo_width }, + { PropertyKey::TextHaloBlur, defaultStyleProperties().text.halo_blur }, + { PropertyKey::TextTranslateX, defaultStyleProperties().text.translate[0] }, + { PropertyKey::TextTranslateY, defaultStyleProperties().text.translate[1] }, + { PropertyKey::TextTranslateAnchor, defaultStyleProperties().text.translate_anchor }, { PropertyKey::CompositeOpacity, defaultStyleProperties().opacity }, diff --git a/src/style/style_layer.cpp b/src/style/style_layer.cpp index 69c5a8c8ca..df94ef9524 100644 --- a/src/style/style_layer.cpp +++ b/src/style/style_layer.cpp @@ -196,7 +196,6 @@ void StyleLayer::applyStyleProperties(const float z, const times IconProperties &icon = properties.get(); applyStyleProperty(PropertyKey::IconOpacity, icon.opacity, z, now); applyStyleProperty(PropertyKey::IconRotate, icon.rotate, z, now); - applyStyleProperty(PropertyKey::IconRotateAnchor, icon.rotate_anchor, z, now); } template <> diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index 5b0bf6f68e..0bed3381cd 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -592,7 +592,6 @@ void StyleParser::parseStyle(JSVal value, ClassProperties &klass) { parseOptionalProperty>("icon-opacity", Key::IconOpacity, klass, value); parseOptionalProperty("transition-icon-opacity", Key::IconOpacity, klass, value); parseOptionalProperty>("icon-rotate", Key::IconRotate, klass, value); - parseOptionalProperty("icon-rotate-anchor", Key::IconRotateAnchor, klass, value); parseOptionalProperty>("text-opacity", Key::TextOpacity, klass, value); parseOptionalProperty("transition-text-opacity", Key::TextOpacity, klass, value); diff --git a/src/style/style_properties.cpp b/src/style/style_properties.cpp index 3d6bc41b81..3908d35ffa 100644 --- a/src/style/style_properties.cpp +++ b/src/style/style_properties.cpp @@ -6,6 +6,7 @@ template<> const FillProperties &defaultStyleProperties() { static const FillPro template<> const LineProperties &defaultStyleProperties() { static const LineProperties p; return p; } template<> const IconProperties &defaultStyleProperties() { static const IconProperties p; return p; } template<> const TextProperties &defaultStyleProperties() { static const TextProperties p; return p; } +template<> const SymbolProperties &defaultStyleProperties() { static const SymbolProperties p; return p; } template<> const CompositeProperties &defaultStyleProperties() { static const CompositeProperties p; return p; } template<> const RasterProperties &defaultStyleProperties() { static const RasterProperties p; return p; } template<> const BackgroundProperties &defaultStyleProperties() { static const BackgroundProperties p; return p; } -- cgit v1.2.1