Fix metawriters.

This commit is contained in:
Hermann Kraus 2012-01-22 19:53:29 +01:00
parent 02eca0825f
commit b945dff774
5 changed files with 22 additions and 22 deletions

View file

@ -41,7 +41,7 @@
namespace mapnik {
struct placement;
class text_placement_info;
/** Implementation of std::map that also returns const& for operator[]. */
class metawriter_property_map
@ -98,8 +98,8 @@ public:
virtual void add_box(box2d<double> const& box, Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties)=0;
virtual void add_text(placement const& placement,
face_set_ptr face,
virtual void add_text(text_placement_info const& placement,
face_manager_freetype &font_manager,
Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties)=0;

View file

@ -65,8 +65,8 @@ public:
virtual void add_box(box2d<double> const& box, Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties);
virtual void add_text(placement const& p,
face_set_ptr face,
virtual void add_text(text_placement_info const& p,
face_manager_freetype &font_manager,
Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties);

View file

@ -45,8 +45,8 @@ public:
virtual void add_box(box2d<double> const& box, Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties);
virtual void add_text(placement const& p,
face_set_ptr face,
virtual void add_text(text_placement_info const& p,
face_manager_freetype &font_manager,
Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties);

View file

@ -23,7 +23,7 @@
// Mapnik
#include <mapnik/metawriter.hpp>
#include <mapnik/metawriter_json.hpp>
#include <mapnik/placement_finder.hpp>
#include <mapnik/text_placements.hpp>
// Boost
#include <boost/foreach.hpp>
@ -175,8 +175,8 @@ void metawriter_json_stream::add_box(box2d<double> const &box, Feature const& fe
}
void metawriter_json_stream::add_text(placement const& p,
face_set_ptr face,
void metawriter_json_stream::add_text(text_placement_info const& p,
face_manager_freetype &font_manager,
Feature const& feature,
CoordTransform const& t,
metawriter_properties const& properties)
@ -193,13 +193,13 @@ void metawriter_json_stream::add_text(placement const& p,
Hightest y = baseline of top line
*/
// if (p.placements.size()) std::cout << p.info.get_string() << "\n";
for (unsigned n = 0; n < p.placements.size(); n++) {
placement_element & current_placement = const_cast<placement_element &>(p.placements[n]);
bool inside = false;
bool inside = false; /* Part of text is inside rendering region */
bool straight = true;
int c; double x, y, angle;
int c;
double x, y, angle;
char_properties *format;
current_placement.rewind();
for (int i = 0; i < current_placement.num_nodes(); ++i) {
@ -219,13 +219,12 @@ void metawriter_json_stream::add_text(placement const& p,
double minx = INT_MAX, miny = INT_MAX, maxx = INT_MIN, maxy = INT_MIN;
for (int i = 0; i < current_placement.num_nodes(); ++i) {
current_placement.vertex(&c, &x, &y, &angle, &format);
face_set_ptr face = font_manager.get_face_set(format->face_name, format->fontset);
char_info ci = face->character_dimensions(c);
if (x < minx) minx = x;
if (x+ci.width > maxx) maxx = x+ci.width;
if (y+ci.height()+ci.ymin > maxy) maxy = y+ci.height()+ci.ymin;
if (y+ci.ymin < miny) miny = y+ci.ymin;
// std::cout << (char) c << " height:" << ci.height() << " ymin:" << ci.ymin << " y:" << y << " miny:"<< miny << " maxy:"<< maxy <<"\n";
minx = std::min(minx, x);
maxx = std::max(maxx, x+ci.width);
maxy = std::max(maxy, y+ci.ymax);
miny = std::min(miny, y+ci.ymin);
}
add_box(box2d<double>(current_placement.starting_x+minx,
current_placement.starting_y-miny,
@ -243,6 +242,7 @@ void metawriter_json_stream::add_text(placement const& p,
}
current_placement.vertex(&c, &x, &y, &angle, &format);
if (c == ' ') continue;
face_set_ptr face = font_manager.get_face_set(format->face_name, format->fontset);
char_info ci = face->character_dimensions(c);
double x0, y0, x1, y1, x2, y2, x3, y3;

View file

@ -72,9 +72,9 @@ metawriter_inmem::add_box(box2d<double> const& box, Feature const& feature,
instances_.push_back(inst);
}
void
metawriter_inmem::add_text(placement const& p,
face_set_ptr /*face*/,
void
metawriter_inmem::add_text(text_placement_info const& p,
face_manager_freetype & /*face*/,
Feature const& feature,
CoordTransform const& /*t*/,
metawriter_properties const& properties) {