apply fixes from David Eastcott originally applied to 0.7 branch
This commit is contained in:
parent
5edbad94d5
commit
5e2e6a76ad
3 changed files with 19 additions and 9 deletions
|
@ -23,6 +23,8 @@
|
||||||
#ifndef MAPNIK_WALL_CLOCK_TIMER_INCLUDED
|
#ifndef MAPNIK_WALL_CLOCK_TIMER_INCLUDED
|
||||||
#define MAPNIK_WALL_CLOCK_TIMER_INCLUDED
|
#define MAPNIK_WALL_CLOCK_TIMER_INCLUDED
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
namespace mapnik {
|
namespace mapnik {
|
||||||
|
|
||||||
// This is a class with a similar signature to boost::timer, but which measures
|
// This is a class with a similar signature to boost::timer, but which measures
|
||||||
|
|
|
@ -119,7 +119,7 @@ ogr_datasource::ogr_datasource(parameters const& params)
|
||||||
extent_.init (envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
|
extent_.init (envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
|
||||||
|
|
||||||
// scan for index file
|
// scan for index file
|
||||||
unsigned breakpoint = dataset_name_.find_last_of (".");
|
size_t breakpoint = dataset_name_.find_last_of (".");
|
||||||
if (breakpoint == std::string::npos) breakpoint = dataset_name_.length();
|
if (breakpoint == std::string::npos) breakpoint = dataset_name_.length();
|
||||||
index_name_ = dataset_name_.substr(0, breakpoint) + ".index";
|
index_name_ = dataset_name_.substr(0, breakpoint) + ".index";
|
||||||
std::ifstream index_file (index_name_.c_str(), std::ios::in | std::ios::binary);
|
std::ifstream index_file (index_name_.c_str(), std::ios::in | std::ios::binary);
|
||||||
|
|
|
@ -92,7 +92,7 @@ namespace mapnik
|
||||||
dimensions(),
|
dimensions(),
|
||||||
text_size(sym.get_text_size())
|
text_size(sym.get_text_size())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
placement::~placement() {}
|
placement::~placement() {}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -353,6 +353,8 @@ namespace mapnik
|
||||||
x = (string_width / 2.0) - line_width;
|
x = (string_width / 2.0) - line_width;
|
||||||
|
|
||||||
// save each character rendering position and build envelope as go thru loop
|
// save each character rendering position and build envelope as go thru loop
|
||||||
|
std::queue< Envelope<double> > c_envelopes;
|
||||||
|
|
||||||
for (unsigned i = 0; i < p.info.num_characters(); i++)
|
for (unsigned i = 0; i < p.info.num_characters(); i++)
|
||||||
{
|
{
|
||||||
character_info ci;
|
character_info ci;
|
||||||
|
@ -397,20 +399,26 @@ namespace mapnik
|
||||||
current_placement->starting_y - y - max_character_height);
|
current_placement->starting_y - y - max_character_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dimensions_.intersects(e) ||
|
// if there is an overlap with existing envelopes, then exit - no placement
|
||||||
(!p.allow_overlap && !detector_.has_point_placement(e,p.minimum_distance)))
|
if (!dimensions_.intersects(e) || (!p.allow_overlap && !detector_.has_point_placement(e,p.minimum_distance)))
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (p.avoid_edges && !dimensions_.contains(e)) return;
|
if (p.avoid_edges && !dimensions_.contains(e))
|
||||||
|
return;
|
||||||
|
|
||||||
p.envelopes.push(e);
|
c_envelopes.push(e); // add character's envelope to temp storage
|
||||||
}
|
}
|
||||||
x += cwidth; // move position to next character
|
x += cwidth; // move position to next character
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// since there was no early exit, add the character envelopes to the placements' envelopes
|
||||||
|
while( !c_envelopes.empty() )
|
||||||
|
{
|
||||||
|
p.envelopes.push( c_envelopes.front() );
|
||||||
|
c_envelopes.pop();
|
||||||
|
}
|
||||||
|
|
||||||
p.placements.push_back(current_placement.release());
|
p.placements.push_back(current_placement.release());
|
||||||
//update_detector(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue