Introduce wxGraphicsPenInfo class

This commit is contained in:
Adrien Tétar
2017-05-02 13:43:31 +02:00
committed by Vadim Zeitlin
parent bc562289c6
commit 2305604565
8 changed files with 314 additions and 54 deletions

View File

@@ -285,9 +285,11 @@ class WXDLLIMPEXP_CORE wxCairoPenData : public wxCairoPenBrushBaseData
{
public:
wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen );
wxCairoPenData( wxGraphicsRenderer* renderer, const wxGraphicsPenInfo &info );
~wxCairoPenData();
void Init();
void InitFromPenInfo( const wxGraphicsPenInfo& info );
virtual void Apply( wxGraphicsContext* context ) wxOVERRIDE;
virtual wxDouble GetWidth() { return m_width; }
@@ -735,13 +737,36 @@ void wxCairoPenData::Init()
wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen )
: wxCairoPenBrushBaseData(renderer, pen.GetColour(), pen.IsTransparent())
{
wxDash *dashes;
int nb_dashes = pen.GetDashes(&dashes);
InitFromPenInfo(wxGraphicsPenInfo()
.Colour(pen.GetColour())
.Width(pen.GetWidth())
.Style(pen.GetStyle())
.Stipple(*pen.GetStipple())
.Dashes(nb_dashes, dashes)
.Join(pen.GetJoin())
.Cap(pen.GetCap())
);
}
wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxGraphicsPenInfo &info )
: wxCairoPenBrushBaseData(renderer, info.GetColour(), info.IsTransparent())
{
InitFromPenInfo(info);
}
void wxCairoPenData::InitFromPenInfo( const wxGraphicsPenInfo &info )
{
Init();
m_width = pen.GetWidth();
m_width = info.GetWidthF();
if (m_width < 0)
m_width = info.GetWidth();
if (m_width <= 0.0)
m_width = 0.1;
switch ( pen.GetCap() )
switch ( info.GetCap() )
{
case wxCAP_ROUND :
m_cap = CAIRO_LINE_CAP_ROUND;
@@ -760,7 +785,7 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen )
break;
}
switch ( pen.GetJoin() )
switch ( info.GetJoin() )
{
case wxJOIN_BEVEL :
m_join = CAIRO_LINE_JOIN_BEVEL;
@@ -797,7 +822,7 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen )
9.0 , 6.0 , 3.0 , 3.0
};
switch ( pen.GetStyle() )
switch ( info.GetStyle() )
{
case wxPENSTYLE_SOLID :
break;
@@ -827,7 +852,7 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen )
case wxPENSTYLE_USER_DASH :
{
wxDash *wxdashes ;
m_count = pen.GetDashes( &wxdashes ) ;
m_count = info.GetDashes( &wxdashes ) ;
if ((wxdashes != NULL) && (m_count > 0))
{
m_userLengths = new double[m_count] ;
@@ -848,14 +873,14 @@ wxCairoPenData::wxCairoPenData( wxGraphicsRenderer* renderer, const wxPen &pen )
case wxPENSTYLE_STIPPLE :
case wxPENSTYLE_STIPPLE_MASK :
case wxPENSTYLE_STIPPLE_MASK_OPAQUE :
InitStipple(pen.GetStipple());
InitStipple(((wxGraphicsPenInfo&) info).GetStipple());
break;
default :
if ( pen.GetStyle() >= wxPENSTYLE_FIRST_HATCH
&& pen.GetStyle() <= wxPENSTYLE_LAST_HATCH )
if ( info.GetStyle() >= wxPENSTYLE_FIRST_HATCH
&& info.GetStyle() <= wxPENSTYLE_LAST_HATCH )
{
InitHatch(static_cast<wxHatchStyle>(pen.GetStyle()));
InitHatch(static_cast<wxHatchStyle>(info.GetStyle()));
}
break;
}
@@ -2901,6 +2926,7 @@ public :
virtual wxGraphicsPen CreatePen(const wxPen& pen) wxOVERRIDE ;
virtual wxGraphicsPen CreatePen(const wxGraphicsPenInfo& info) wxOVERRIDE ;
virtual wxGraphicsBrush CreateBrush(const wxBrush& brush ) wxOVERRIDE ;
@@ -3087,6 +3113,17 @@ wxGraphicsPen wxCairoRenderer::CreatePen(const wxPen& pen)
return p;
}
wxGraphicsPen wxCairoRenderer::CreatePen(const wxGraphicsPenInfo& info)
{
wxGraphicsPen p;
ENSURE_LOADED_OR_RETURN(p);
if (info.GetStyle() != wxPENSTYLE_TRANSPARENT)
{
p.SetRefData(new wxCairoPenData( this, info ));
}
return p;
}
wxGraphicsBrush wxCairoRenderer::CreateBrush(const wxBrush& brush )
{
wxGraphicsBrush p;