more generic expressions in enum
support expressions in halo-comp-op symbolizer property
This commit is contained in:
parent
aa9966ed88
commit
19b38c2ed9
3 changed files with 11 additions and 33 deletions
|
@ -51,8 +51,6 @@
|
||||||
// boost
|
// boost
|
||||||
#include <boost/variant/variant_fwd.hpp>
|
#include <boost/variant/variant_fwd.hpp>
|
||||||
#include <boost/concept_check.hpp>
|
#include <boost/concept_check.hpp>
|
||||||
// agg
|
|
||||||
#include "agg_pixfmt_rgba.h"
|
|
||||||
|
|
||||||
namespace agg { struct trans_affine; }
|
namespace agg { struct trans_affine; }
|
||||||
|
|
||||||
|
@ -132,7 +130,8 @@ enum class property_types : std::uint8_t
|
||||||
target_dash_array,
|
target_dash_array,
|
||||||
target_colorizer,
|
target_colorizer,
|
||||||
target_repeat_key,
|
target_repeat_key,
|
||||||
target_group_symbolizer_properties
|
target_group_symbolizer_properties,
|
||||||
|
target_halo_comp_op
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool operator==(symbolizer_base const& lhs, symbolizer_base const& rhs)
|
inline bool operator==(symbolizer_base const& lhs, symbolizer_base const& rhs)
|
||||||
|
@ -174,7 +173,9 @@ struct expression_result
|
||||||
typedef T result_type;
|
typedef T result_type;
|
||||||
static result_type convert(value_type const& val)
|
static result_type convert(value_type const& val)
|
||||||
{
|
{
|
||||||
return static_cast<T>(val.convert<value_integer>());
|
auto result = comp_op_from_string(val.to_string());
|
||||||
|
if (result) return static_cast<result_type>(*result);
|
||||||
|
return result_type(0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -188,18 +189,6 @@ struct expression_result<T,false>
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
|
||||||
struct expression_result<agg::comp_op_e,true>
|
|
||||||
{
|
|
||||||
typedef agg::comp_op_e result_type;
|
|
||||||
static result_type convert(value_type const& val)
|
|
||||||
{
|
|
||||||
auto result = comp_op_from_string(val.to_string());
|
|
||||||
if (result) return static_cast<result_type>(*result);
|
|
||||||
return agg::comp_op_src_over;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// enum
|
// enum
|
||||||
template <typename T, bool is_enum = true>
|
template <typename T, bool is_enum = true>
|
||||||
|
|
|
@ -862,7 +862,7 @@ struct set_symbolizer_property_impl
|
||||||
}
|
}
|
||||||
catch (config_error const&)
|
catch (config_error const&)
|
||||||
{
|
{
|
||||||
// try parser as an expression
|
// try parsing as an expression
|
||||||
optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
|
optional<expression_ptr> val = node.get_opt_attr<expression_ptr>(name);
|
||||||
if (val) put(sym, key, *val);
|
if (val) put(sym, key, *val);
|
||||||
}
|
}
|
||||||
|
@ -878,13 +878,14 @@ struct set_symbolizer_property_impl<Symbolizer, composite_mode_e>
|
||||||
std::string const& name = std::get<0>(get_meta(key));
|
std::string const& name = std::get<0>(get_meta(key));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
optional<std::string> comp_op_name = node.get_opt_attr<std::string>("comp-op");
|
optional<std::string> comp_op_name = node.get_opt_attr<std::string>(name);
|
||||||
|
|
||||||
if (comp_op_name)
|
if (comp_op_name)
|
||||||
{
|
{
|
||||||
optional<composite_mode_e> comp_op = comp_op_from_string(*comp_op_name);
|
optional<composite_mode_e> comp_op = comp_op_from_string(*comp_op_name);
|
||||||
if (comp_op)
|
if (comp_op)
|
||||||
{
|
{
|
||||||
put(sym, keys::comp_op, *comp_op);
|
put(sym, key, *comp_op);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1203,19 +1204,7 @@ void map_parser::parse_text_symbolizer(rule & rule, xml_node const& node)
|
||||||
text_symbolizer text_symbol;
|
text_symbolizer text_symbol;
|
||||||
parse_symbolizer_base(text_symbol, node);
|
parse_symbolizer_base(text_symbol, node);
|
||||||
// halo-comp-op
|
// halo-comp-op
|
||||||
optional<std::string> comp_op_name = node.get_opt_attr<std::string>("halo-comp-op");
|
set_symbolizer_property<symbolizer_base,composite_mode_e>(text_symbol, keys::halo_comp_op, node);
|
||||||
if (comp_op_name)
|
|
||||||
{
|
|
||||||
optional<composite_mode_e> halo_comp_op = comp_op_from_string(*comp_op_name);
|
|
||||||
if (halo_comp_op)
|
|
||||||
{
|
|
||||||
put(text_symbol, keys::halo_comp_op, *halo_comp_op);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw config_error("failed to parse halo-comp-op: '" + *comp_op_name + "'");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
put<text_placements_ptr>(text_symbol, keys::text_placements_, placement_finder);
|
put<text_placements_ptr>(text_symbol, keys::text_placements_, placement_finder);
|
||||||
optional<halo_rasterizer_e> halo_rasterizer_ = node.get_opt_attr<halo_rasterizer_e>("halo-rasterizer");
|
optional<halo_rasterizer_e> halo_rasterizer_ = node.get_opt_attr<halo_rasterizer_e>("halo-rasterizer");
|
||||||
|
|
|
@ -98,7 +98,7 @@ static const property_meta_type key_meta[to_integral(keys::MAX_SYMBOLIZER_KEY)]
|
||||||
property_meta_type{ "largest-box-only", false, nullptr, property_types::target_bool },
|
property_meta_type{ "largest-box-only", false, nullptr, property_types::target_bool },
|
||||||
property_meta_type{ "minimum-path-length", false, nullptr, property_types::target_double },
|
property_meta_type{ "minimum-path-length", false, nullptr, property_types::target_double },
|
||||||
property_meta_type{ "halo-comp-op", enumeration_wrapper(src_over),
|
property_meta_type{ "halo-comp-op", enumeration_wrapper(src_over),
|
||||||
[](enumeration_wrapper e) { return *comp_op_to_string(composite_mode_e(e.value)); }, property_types::target_comp_op},
|
[](enumeration_wrapper e) { return *comp_op_to_string(composite_mode_e(e.value)); }, property_types::target_halo_comp_op},
|
||||||
};
|
};
|
||||||
|
|
||||||
property_meta_type const& get_meta(mapnik::keys key)
|
property_meta_type const& get_meta(mapnik::keys key)
|
||||||
|
|
Loading…
Reference in a new issue