197 lines
3.9 KiB
C++
197 lines
3.9 KiB
C++
/*****************************************************************************
|
|
*
|
|
* This file is part of Mapnik (c++ mapping toolkit)
|
|
*
|
|
* Copyright (C) 2011 Artem Pavlenko
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#include <mapnik/stroke.hpp>
|
|
|
|
namespace mapnik
|
|
{
|
|
|
|
static const char * line_cap_strings[] = {
|
|
"butt",
|
|
"square",
|
|
"round",
|
|
""
|
|
};
|
|
|
|
|
|
IMPLEMENT_ENUM( line_cap_e, line_cap_strings )
|
|
|
|
|
|
static const char * line_join_strings[] = {
|
|
"miter",
|
|
"miter_revert",
|
|
"round",
|
|
"bevel",
|
|
""
|
|
};
|
|
|
|
IMPLEMENT_ENUM( line_join_e, line_join_strings )
|
|
|
|
stroke::stroke()
|
|
: c_(0,0,0),
|
|
width_(1.0),
|
|
opacity_(1.0),
|
|
line_cap_(BUTT_CAP),
|
|
line_join_(MITER_JOIN),
|
|
gamma_(1.0),
|
|
gamma_method_(GAMMA_POWER),
|
|
dash_(),
|
|
dash_offset_(0) {}
|
|
|
|
stroke::stroke(color const& c, double width)
|
|
: c_(c),
|
|
width_(width),
|
|
opacity_(1.0),
|
|
line_cap_(BUTT_CAP),
|
|
line_join_(MITER_JOIN),
|
|
gamma_(1.0),
|
|
gamma_method_(GAMMA_POWER),
|
|
dash_(),
|
|
dash_offset_(0.0) {}
|
|
|
|
stroke::stroke(stroke const& other)
|
|
: c_(other.c_),
|
|
width_(other.width_),
|
|
opacity_(other.opacity_),
|
|
line_cap_(other.line_cap_),
|
|
line_join_(other.line_join_),
|
|
gamma_(other.gamma_),
|
|
gamma_method_(other.gamma_method_),
|
|
dash_(other.dash_),
|
|
dash_offset_(other.dash_offset_) {}
|
|
|
|
stroke & stroke::operator=(const stroke& rhs)
|
|
{
|
|
stroke tmp(rhs);
|
|
swap(tmp);
|
|
return *this;
|
|
}
|
|
|
|
void stroke::set_color(const color& c)
|
|
{
|
|
c_=c;
|
|
}
|
|
|
|
color const& stroke::get_color() const
|
|
{
|
|
return c_;
|
|
}
|
|
|
|
double stroke::get_width() const
|
|
{
|
|
return width_;
|
|
}
|
|
void stroke::set_width(double w)
|
|
{
|
|
width_=w;
|
|
}
|
|
|
|
void stroke::set_opacity(double opacity)
|
|
{
|
|
if (opacity > 1.0) opacity_=1.0;
|
|
else if (opacity < 0.0) opacity_=0.0;
|
|
else opacity_=opacity;
|
|
}
|
|
|
|
double stroke::get_opacity() const
|
|
{
|
|
return opacity_;
|
|
}
|
|
|
|
void stroke::set_line_cap(line_cap_e line_cap)
|
|
{
|
|
line_cap_=line_cap;
|
|
}
|
|
|
|
line_cap_e stroke::get_line_cap() const
|
|
{
|
|
return line_cap_;
|
|
}
|
|
|
|
void stroke::set_line_join(line_join_e line_join)
|
|
{
|
|
line_join_=line_join;
|
|
}
|
|
|
|
line_join_e stroke::get_line_join() const
|
|
{
|
|
return line_join_;
|
|
}
|
|
|
|
void stroke::set_gamma(double gamma)
|
|
{
|
|
gamma_ = gamma;
|
|
}
|
|
|
|
double stroke::get_gamma() const
|
|
{
|
|
return gamma_;
|
|
}
|
|
|
|
void stroke::set_gamma_method(gamma_method_e gamma_method)
|
|
{
|
|
gamma_method_ = gamma_method;
|
|
}
|
|
|
|
gamma_method_e stroke::get_gamma_method() const
|
|
{
|
|
return gamma_method_;
|
|
}
|
|
|
|
void stroke::add_dash(double dash, double gap)
|
|
{
|
|
dash_.push_back(std::make_pair(dash,gap));
|
|
}
|
|
|
|
bool stroke::has_dash() const
|
|
{
|
|
return ! dash_.empty();
|
|
}
|
|
|
|
void stroke::set_dash_offset(double offset)
|
|
{
|
|
dash_offset_ = offset;
|
|
}
|
|
|
|
double stroke::dash_offset() const
|
|
{
|
|
return dash_offset_;
|
|
}
|
|
|
|
dash_array const& stroke::get_dash_array() const
|
|
{
|
|
return dash_;
|
|
}
|
|
|
|
void stroke::swap(const stroke& other) throw()
|
|
{
|
|
c_ = other.c_;
|
|
width_ = other.width_;
|
|
opacity_ = other.opacity_;
|
|
line_cap_ = other.line_cap_;
|
|
line_join_ = other.line_join_;
|
|
gamma_ = other.gamma_;
|
|
gamma_method_ = other.gamma_method_;
|
|
dash_ = other.dash_;
|
|
dash_offset_ = other.dash_offset_;
|
|
}
|
|
}
|