No real changes, just clean up sources by removing trailing spaces from all the non-generated files. This should hopefully avoid future commits mixing significant changes with insignificant whitespace ones.
386 lines
8.6 KiB
C++
386 lines
8.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/qt/pen.cpp
|
|
// Author: Peter Most, Javier Torres
|
|
// Copyright: (c) Peter Most, Javier Torres
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// For compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#include "wx/pen.h"
|
|
#include "wx/colour.h"
|
|
#include "wx/qt/private/utils.h"
|
|
#include <QtGui/QPen>
|
|
|
|
wxIMPLEMENT_DYNAMIC_CLASS(wxPen,wxGDIObject);
|
|
|
|
static Qt::PenStyle ConvertPenStyle(wxPenStyle style)
|
|
{
|
|
switch(style)
|
|
{
|
|
case wxPENSTYLE_SOLID:
|
|
return Qt::SolidLine;
|
|
|
|
case wxPENSTYLE_TRANSPARENT:
|
|
return Qt::NoPen;
|
|
|
|
case wxPENSTYLE_DOT:
|
|
return Qt::DotLine;
|
|
|
|
case wxPENSTYLE_LONG_DASH:
|
|
case wxPENSTYLE_SHORT_DASH:
|
|
return Qt::DashLine;
|
|
|
|
case wxPENSTYLE_DOT_DASH:
|
|
return Qt::DotLine;
|
|
|
|
case wxPENSTYLE_USER_DASH:
|
|
return Qt::CustomDashLine;
|
|
|
|
case wxPENSTYLE_STIPPLE:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_STIPPLE" );
|
|
break;
|
|
|
|
case wxPENSTYLE_BDIAGONAL_HATCH:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_BDIAGONAL_HATCH" );
|
|
break;
|
|
|
|
case wxPENSTYLE_CROSSDIAG_HATCH:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_CROSSDIAG_HATCH" );
|
|
break;
|
|
|
|
case wxPENSTYLE_FDIAGONAL_HATCH:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_FDIAGONAL_HATCH" );
|
|
break;
|
|
|
|
case wxPENSTYLE_CROSS_HATCH:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_CROSS_HATCH" );
|
|
break;
|
|
|
|
case wxPENSTYLE_HORIZONTAL_HATCH:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_HORIZONTAL_HATCH" );
|
|
break;
|
|
|
|
case wxPENSTYLE_VERTICAL_HATCH:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_VERTICAL_HATCH" );
|
|
break;
|
|
|
|
case wxPENSTYLE_STIPPLE_MASK:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_STIPPLE_MASK" );
|
|
break;
|
|
|
|
case wxPENSTYLE_STIPPLE_MASK_OPAQUE:
|
|
wxMISSING_IMPLEMENTATION( "wxPENSTYLE_STIPPLE_MASK_OPAQUE" );
|
|
break;
|
|
|
|
case wxPENSTYLE_INVALID:
|
|
wxFAIL_MSG( "Invalid pen style value" );
|
|
break;
|
|
}
|
|
return Qt::SolidLine;
|
|
}
|
|
|
|
static wxPenStyle ConvertPenStyle(Qt::PenStyle style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case Qt::SolidLine:
|
|
return wxPENSTYLE_SOLID;
|
|
|
|
case Qt::NoPen:
|
|
return wxPENSTYLE_TRANSPARENT;
|
|
|
|
case Qt::DotLine:
|
|
return wxPENSTYLE_DOT;
|
|
|
|
case Qt::DashLine:
|
|
return wxPENSTYLE_SHORT_DASH;
|
|
|
|
case Qt::DashDotLine:
|
|
return wxPENSTYLE_DOT_DASH;
|
|
|
|
case Qt::DashDotDotLine:
|
|
wxMISSING_IMPLEMENTATION( "Qt::DashDotDotLine" );
|
|
return wxPENSTYLE_DOT_DASH;
|
|
|
|
case Qt::CustomDashLine:
|
|
return wxPENSTYLE_USER_DASH;
|
|
|
|
case Qt::MPenStyle:
|
|
wxMISSING_IMPLEMENTATION( "Qt::MPenStyle" );
|
|
break;
|
|
}
|
|
return wxPENSTYLE_SOLID;
|
|
}
|
|
|
|
static Qt::PenCapStyle ConvertPenCapStyle(wxPenCap style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case wxCAP_BUTT:
|
|
return Qt::FlatCap;
|
|
|
|
case wxCAP_PROJECTING:
|
|
return Qt::SquareCap;
|
|
|
|
case wxCAP_ROUND:
|
|
return Qt::RoundCap;
|
|
|
|
case wxCAP_INVALID:
|
|
wxFAIL_MSG( "Invalid pen cap value" );
|
|
break;
|
|
}
|
|
return Qt::SquareCap;
|
|
}
|
|
|
|
static wxPenCap ConvertPenCapStyle(Qt::PenCapStyle style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case Qt::FlatCap:
|
|
return wxCAP_BUTT;
|
|
|
|
case Qt::SquareCap:
|
|
return wxCAP_PROJECTING;
|
|
|
|
case Qt::RoundCap:
|
|
return wxCAP_ROUND;
|
|
|
|
case Qt::MPenCapStyle:
|
|
wxMISSING_IMPLEMENTATION( "Qt::MPenCapStyle" );
|
|
break;
|
|
}
|
|
return wxCAP_PROJECTING;
|
|
}
|
|
|
|
static Qt::PenJoinStyle ConvertPenJoinStyle(wxPenJoin style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case wxJOIN_BEVEL:
|
|
return Qt::BevelJoin;
|
|
|
|
case wxJOIN_MITER:
|
|
return Qt::MiterJoin;
|
|
|
|
case wxJOIN_ROUND:
|
|
return Qt::RoundJoin;
|
|
|
|
case wxJOIN_INVALID:
|
|
wxFAIL_MSG( "Invalid pen join value" );
|
|
break;
|
|
}
|
|
return Qt::BevelJoin;
|
|
}
|
|
|
|
static wxPenJoin ConvertPenJoinStyle(Qt::PenJoinStyle style)
|
|
{
|
|
switch (style)
|
|
{
|
|
case Qt::BevelJoin:
|
|
return wxJOIN_BEVEL;
|
|
|
|
case Qt::MiterJoin:
|
|
return wxJOIN_MITER;
|
|
|
|
case Qt::RoundJoin:
|
|
return wxJOIN_ROUND;
|
|
|
|
case Qt::SvgMiterJoin:
|
|
wxMISSING_IMPLEMENTATION( "Qt::SvgMiterJoin" );
|
|
return wxJOIN_MITER;
|
|
|
|
case Qt::MPenJoinStyle:
|
|
wxMISSING_IMPLEMENTATION( "Qt::MPenJoinStyle" );
|
|
break;
|
|
}
|
|
return wxJOIN_BEVEL;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// wxPen
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class wxPenRefData: public wxGDIRefData
|
|
{
|
|
public:
|
|
void defaultPen()
|
|
{
|
|
m_qtPen.setCapStyle(Qt::RoundCap);
|
|
m_qtPen.setJoinStyle(Qt::RoundJoin);
|
|
m_dashes = NULL;
|
|
m_dashesSize = 0;
|
|
}
|
|
|
|
wxPenRefData()
|
|
{
|
|
defaultPen();
|
|
}
|
|
|
|
wxPenRefData( const wxPenRefData& data )
|
|
: wxGDIRefData()
|
|
{
|
|
m_qtPen = data.m_qtPen;
|
|
defaultPen();
|
|
}
|
|
|
|
bool operator == (const wxPenRefData& data) const
|
|
{
|
|
return m_qtPen == data.m_qtPen;
|
|
}
|
|
|
|
QPen m_qtPen;
|
|
const wxDash *m_dashes;
|
|
int m_dashesSize;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#define M_PENDATA ((wxPenRefData *)m_refData)->m_qtPen
|
|
|
|
wxPen::wxPen()
|
|
{
|
|
m_refData = new wxPenRefData();
|
|
}
|
|
|
|
wxPen::wxPen( const wxColour &colour, int width, wxPenStyle style)
|
|
{
|
|
m_refData = new wxPenRefData();
|
|
M_PENDATA.setWidth(width);
|
|
M_PENDATA.setStyle(ConvertPenStyle(style));
|
|
M_PENDATA.setColor(colour.GetQColor());
|
|
}
|
|
|
|
wxPen::wxPen(const wxColour& col, int width, int style)
|
|
{
|
|
m_refData = new wxPenRefData();
|
|
M_PENDATA.setWidth(width);
|
|
M_PENDATA.setStyle(ConvertPenStyle((wxPenStyle)style));
|
|
M_PENDATA.setColor(col.GetQColor());
|
|
}
|
|
|
|
|
|
bool wxPen::operator==(const wxPen& pen) const
|
|
{
|
|
if (m_refData == pen.m_refData) return true;
|
|
|
|
if (!m_refData || !pen.m_refData) return false;
|
|
|
|
return ( *(wxPenRefData*)m_refData == *(wxPenRefData*)pen.m_refData );
|
|
}
|
|
|
|
bool wxPen::operator!=(const wxPen& pen) const
|
|
{
|
|
return !(*this == pen);
|
|
}
|
|
|
|
void wxPen::SetColour(const wxColour& col)
|
|
{
|
|
AllocExclusive();
|
|
M_PENDATA.setColor(col.GetQColor());
|
|
}
|
|
|
|
void wxPen::SetColour(unsigned char r, unsigned char g, unsigned char b)
|
|
{
|
|
AllocExclusive();
|
|
M_PENDATA.setColor(QColor(r, g, b));
|
|
}
|
|
|
|
void wxPen::SetWidth(int width)
|
|
{
|
|
AllocExclusive();
|
|
M_PENDATA.setWidth(width);
|
|
}
|
|
|
|
void wxPen::SetStyle(wxPenStyle style)
|
|
{
|
|
AllocExclusive();
|
|
M_PENDATA.setStyle(ConvertPenStyle(style));
|
|
}
|
|
|
|
void wxPen::SetStipple(const wxBitmap& WXUNUSED(stipple))
|
|
{
|
|
wxFAIL_MSG( "stippled pens not supported" );
|
|
}
|
|
|
|
void wxPen::SetDashes(int nb_dashes, const wxDash *dash)
|
|
{
|
|
AllocExclusive();
|
|
((wxPenRefData *)m_refData)->m_dashes = dash;
|
|
((wxPenRefData *)m_refData)->m_dashesSize = nb_dashes;
|
|
|
|
QVector<qreal> dashes;
|
|
if (dash)
|
|
{
|
|
for (int i = 0; i < nb_dashes; i++)
|
|
dashes << dash[i];
|
|
}
|
|
|
|
M_PENDATA.setDashPattern(dashes);
|
|
}
|
|
|
|
void wxPen::SetJoin(wxPenJoin join)
|
|
{
|
|
AllocExclusive();
|
|
M_PENDATA.setJoinStyle(ConvertPenJoinStyle(join));
|
|
}
|
|
|
|
void wxPen::SetCap(wxPenCap cap)
|
|
{
|
|
AllocExclusive();
|
|
M_PENDATA.setCapStyle(ConvertPenCapStyle(cap));
|
|
}
|
|
|
|
wxColour wxPen::GetColour() const
|
|
{
|
|
wxColour c(M_PENDATA.color());
|
|
return c;
|
|
}
|
|
|
|
wxBitmap *wxPen::GetStipple() const
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
wxPenStyle wxPen::GetStyle() const
|
|
{
|
|
return ConvertPenStyle(M_PENDATA.style());
|
|
}
|
|
|
|
wxPenJoin wxPen::GetJoin() const
|
|
{
|
|
return ConvertPenJoinStyle(M_PENDATA.joinStyle());
|
|
}
|
|
|
|
wxPenCap wxPen::GetCap() const
|
|
{
|
|
return ConvertPenCapStyle(M_PENDATA.capStyle());
|
|
}
|
|
|
|
int wxPen::GetWidth() const
|
|
{
|
|
return M_PENDATA.width();
|
|
}
|
|
|
|
int wxPen::GetDashes(wxDash **ptr) const
|
|
{
|
|
*ptr = (wxDash *)((wxPenRefData *)m_refData)->m_dashes;
|
|
return ((wxPenRefData *)m_refData)->m_dashesSize;
|
|
}
|
|
|
|
QPen wxPen::GetHandle() const
|
|
{
|
|
return M_PENDATA;
|
|
}
|
|
|
|
wxGDIRefData *wxPen::CreateGDIRefData() const
|
|
{
|
|
return new wxPenRefData;
|
|
}
|
|
|
|
wxGDIRefData *wxPen::CloneGDIRefData(const wxGDIRefData *data) const
|
|
{
|
|
return new wxPenRefData(*(wxPenRefData *)data);
|
|
}
|