minor namespace cleanup in group_layout_manager

This commit is contained in:
Mickey Rose 2016-01-25 02:41:46 +01:00
parent 7761d32ec5
commit 9d7b3d00e1
3 changed files with 37 additions and 24 deletions

View file

@ -31,43 +31,51 @@
// stl // stl
#include <vector> #include <vector>
using std::vector;
namespace mapnik namespace mapnik
{ {
using bound_box = box2d<double>;
struct group_layout_manager struct group_layout_manager
{ {
group_layout_manager(group_layout const& layout) using bound_box = box2d<double>;
group_layout_manager()
: update_layout_(false)
{}
explicit group_layout_manager(group_layout const& layout)
: layout_(layout), : layout_(layout),
input_origin_(0, 0), update_layout_(false)
member_boxes_(vector<bound_box>()),
member_offsets_(vector<pixel_position>()),
update_layout_(true)
{ {
} }
group_layout_manager(group_layout const& layout, pixel_position const& input_origin) group_layout_manager(group_layout const& layout, pixel_position const& input_origin)
: layout_(layout), : layout_(layout),
input_origin_(input_origin), input_origin_(input_origin),
member_boxes_(vector<bound_box>()), update_layout_(false)
member_offsets_(vector<pixel_position>()),
update_layout_(true)
{ {
} }
group_layout_manager(group_layout const& layout, pixel_position const& input_origin, group_layout_manager(group_layout const& layout, pixel_position const& input_origin,
vector<bound_box> const& item_boxes) std::vector<bound_box> const& item_boxes)
: layout_(layout), : layout_(layout),
input_origin_(input_origin), input_origin_(input_origin),
member_boxes_(item_boxes), member_boxes_(item_boxes),
member_offsets_(vector<pixel_position>()),
update_layout_(true) update_layout_(true)
{ {
} }
void set_input_origin(double x, double y)
{
input_origin_.set(x, y);
update_layout_ = true;
}
void set_input_origin(pixel_position const& input_origin)
{
input_origin_ = input_origin;
update_layout_ = true;
}
inline void set_layout(group_layout const& layout) inline void set_layout(group_layout const& layout)
{ {
layout_ = layout; layout_ = layout;
@ -94,8 +102,8 @@ private:
group_layout layout_; group_layout layout_;
pixel_position input_origin_; pixel_position input_origin_;
vector<bound_box> member_boxes_; std::vector<bound_box> member_boxes_;
vector<pixel_position> member_offsets_; std::vector<pixel_position> member_offsets_;
bool update_layout_; bool update_layout_;
}; };

View file

@ -170,7 +170,7 @@ void render_group_symbolizer(group_symbolizer const& sym,
matches.emplace_back(rule, sub_feature); matches.emplace_back(rule, sub_feature);
// construct a bounding box around all symbolizers for the matched rule // construct a bounding box around all symbolizers for the matched rule
bound_box bounds; box2d<double> bounds;
render_thunk_list thunks; render_thunk_list thunks;
render_thunk_extractor extractor(bounds, thunks, *sub_feature, common.vars_, prj_trans, render_thunk_extractor extractor(bounds, thunks, *sub_feature, common.vars_, prj_trans,
virtual_renderer, clipping_extent); virtual_renderer, clipping_extent);

View file

@ -34,19 +34,21 @@ namespace mapnik
// This visitor will process offsets for the given layout // This visitor will process offsets for the given layout
struct process_layout struct process_layout
{ {
using bound_box = box2d<double>;
// The vector containing the existing, centered item bounding boxes // The vector containing the existing, centered item bounding boxes
vector<bound_box> const& member_boxes_; std::vector<bound_box> const& member_boxes_;
// The vector to populate with item offsets // The vector to populate with item offsets
vector<pixel_position> & member_offsets_; std::vector<pixel_position> & member_offsets_;
// The origin point of the member boxes // The origin point of the member boxes
// i.e. The member boxes are positioned around input_origin, // i.e. The member boxes are positioned around input_origin,
// and the offset values should position them around (0,0) // and the offset values should position them around (0,0)
pixel_position const& input_origin_; pixel_position const& input_origin_;
process_layout(vector<bound_box> const& member_bboxes, process_layout(std::vector<bound_box> const& member_bboxes,
vector<pixel_position> &member_offsets, std::vector<pixel_position> &member_offsets,
pixel_position const& input_origin) pixel_position const& input_origin)
: member_boxes_(member_bboxes), : member_boxes_(member_bboxes),
member_offsets_(member_offsets), member_offsets_(member_offsets),
@ -54,9 +56,12 @@ struct process_layout
{ {
} }
// arrange group memebers in centered, horizontal row // arrange group members in centered, horizontal row
void operator()(simple_row_layout const& layout) const void operator()(simple_row_layout const& layout) const
{ {
member_offsets_.clear();
member_offsets_.reserve(member_boxes_.size());
double total_width = (member_boxes_.size() - 1) * layout.get_item_margin(); double total_width = (member_boxes_.size() - 1) * layout.get_item_margin();
for (auto const& box : member_boxes_) for (auto const& box : member_boxes_)
{ {
@ -66,7 +71,7 @@ struct process_layout
double x_offset = -(total_width / 2.0); double x_offset = -(total_width / 2.0);
for (auto const& box : member_boxes_) for (auto const& box : member_boxes_)
{ {
member_offsets_.push_back(pixel_position(x_offset - box.minx(), -input_origin_.y)); member_offsets_.emplace_back(x_offset - box.minx(), -input_origin_.y);
x_offset += box.width() + layout.get_item_margin(); x_offset += box.width() + layout.get_item_margin();
} }
} }
@ -150,7 +155,7 @@ private:
} }
}; };
bound_box group_layout_manager::offset_box_at(size_t i) box2d<double> group_layout_manager::offset_box_at(size_t i)
{ {
handle_update(); handle_update();
pixel_position const& offset = member_offsets_.at(i); pixel_position const& offset = member_offsets_.at(i);