1 ////////////////////////////////////////////////////////////////////////////// 2 // Name: SVGTextElement.cpp 3 // Purpose: svg text element 4 // Author: Alex Thuering 5 // Created: 2005/05/10 6 // RCS-ID: $Id: SVGTextElement.cpp,v 1.6 2016/07/28 09:05:28 ntalex Exp $ 7 // Copyright: (c) 2005 Alex Thuering 8 // Licence: wxWindows licence 9 ////////////////////////////////////////////////////////////////////////////// 10 11 #include "SVGTextElement.h" 12 #include "SVGCanvas.h" 13 #include <math.h> 14 GetBBox(wxSVG_COORDINATES coordinates)15wxSVGRect wxSVGTextElement::GetBBox(wxSVG_COORDINATES coordinates) { 16 wxSVGMatrix matrix = wxSVGLocatable::GetCTM(this); 17 WX_SVG_CREATE_M_CANVAS_ITEM 18 wxSVGRect bbox; 19 if (coordinates == wxSVG_COORDINATES_USER) { 20 bbox = m_canvasItem->GetBBox(); 21 } else { 22 wxSVGMatrix m = GetMatrix(coordinates); 23 bbox = m_canvasItem->GetBBox(&m); 24 } 25 WX_SVG_CLEAR_M_CANVAS_ITEM 26 return bbox.MatrixTransform(matrix); 27 //return bbox; 28 } 29 GetResultBBox(wxSVG_COORDINATES coordinates)30wxSVGRect wxSVGTextElement::GetResultBBox(wxSVG_COORDINATES coordinates) { 31 wxCSSStyleDeclaration style = GetResultStyle(*this); 32 if (style.GetStroke().GetPaintType() == wxSVG_PAINTTYPE_NONE) 33 return GetBBox(coordinates); 34 WX_SVG_CREATE_M_CANVAS_ITEM 35 wxSVGRect bbox; 36 if (coordinates == wxSVG_COORDINATES_USER) { 37 bbox = m_canvasItem->GetResultBBox(style); 38 } else { 39 wxSVGMatrix m = GetMatrix(coordinates); 40 bbox = m_canvasItem->GetResultBBox(style, &m); 41 } 42 WX_SVG_CLEAR_M_CANVAS_ITEM 43 return bbox; 44 } 45 SetCanvasItem(wxSVGCanvasItem * canvasItem)46void wxSVGTextElement::SetCanvasItem(wxSVGCanvasItem* canvasItem) { 47 if (m_canvasItem) 48 delete m_canvasItem; 49 m_canvasItem = canvasItem; 50 } 51 GetNumberOfChars()52long wxSVGTextElement::GetNumberOfChars() { 53 WX_SVG_CREATE_M_CANVAS_ITEM 54 long number = ((wxSVGCanvasText*) m_canvasItem)->GetNumberOfChars(); 55 WX_SVG_CLEAR_M_CANVAS_ITEM 56 return number; 57 } 58 GetComputedTextLength()59double wxSVGTextElement::GetComputedTextLength() { 60 wxSVGMatrix matrix = wxSVGLocatable::GetCTM(this); 61 WX_SVG_CREATE_M_CANVAS_ITEM 62 double length = ((wxSVGCanvasText*) m_canvasItem)->GetComputedTextLength(); 63 WX_SVG_CLEAR_M_CANVAS_ITEM 64 return length * sqrt(matrix.GetA() * matrix.GetA() + matrix.GetB() * matrix.GetB()); 65 } 66 GetSubStringLength(unsigned long charnum,unsigned long nchars)67double wxSVGTextElement::GetSubStringLength(unsigned long charnum, unsigned long nchars) { 68 wxSVGMatrix matrix = wxSVGLocatable::GetCTM(this); 69 WX_SVG_CREATE_M_CANVAS_ITEM 70 double length = ((wxSVGCanvasText*) m_canvasItem)->GetSubStringLength(charnum, nchars); 71 WX_SVG_CLEAR_M_CANVAS_ITEM 72 return length * sqrt(matrix.GetA() * matrix.GetA() + matrix.GetB() * matrix.GetB()); 73 } 74 GetStartPositionOfChar(unsigned long charnum)75wxSVGPoint wxSVGTextElement::GetStartPositionOfChar(unsigned long charnum) { 76 wxSVGPoint real_position; 77 wxSVGMatrix matrix = wxSVGLocatable::GetCTM(this); 78 WX_SVG_CREATE_M_CANVAS_ITEM 79 wxSVGPoint position = ((wxSVGCanvasText*) m_canvasItem)->GetStartPositionOfChar(charnum); 80 WX_SVG_CLEAR_M_CANVAS_ITEM 81 real_position.SetX(matrix.GetA() * position.GetX() + matrix.GetB() * position.GetY() + matrix.GetE()); 82 real_position.SetY(matrix.GetB() * position.GetX() + matrix.GetD() * position.GetY() + matrix.GetF()); 83 return real_position; 84 } 85 GetEndPositionOfChar(unsigned long charnum)86wxSVGPoint wxSVGTextElement::GetEndPositionOfChar(unsigned long charnum) { 87 wxSVGPoint real_position; 88 wxSVGMatrix matrix = wxSVGLocatable::GetCTM(this); 89 WX_SVG_CREATE_M_CANVAS_ITEM 90 wxSVGPoint position = ((wxSVGCanvasText*) m_canvasItem)->GetEndPositionOfChar(charnum); 91 WX_SVG_CLEAR_M_CANVAS_ITEM 92 real_position.SetX(matrix.GetA() * position.GetX() + matrix.GetB() * position.GetY() + matrix.GetE()); 93 real_position.SetY(matrix.GetB() * position.GetX() + matrix.GetD() * position.GetY() + matrix.GetF()); 94 return real_position; 95 } 96 GetExtentOfChar(unsigned long charnum)97wxSVGRect wxSVGTextElement::GetExtentOfChar(unsigned long charnum) { 98 wxSVGMatrix matrix = wxSVGLocatable::GetCTM(this); 99 WX_SVG_CREATE_M_CANVAS_ITEM 100 wxSVGRect extent = ((wxSVGCanvasText*) m_canvasItem)->GetExtentOfChar(charnum); 101 WX_SVG_CLEAR_M_CANVAS_ITEM 102 return extent.MatrixTransform(matrix); 103 } 104 GetRotationOfChar(unsigned long charnum)105double wxSVGTextElement::GetRotationOfChar(unsigned long charnum) { 106 WX_SVG_CREATE_M_CANVAS_ITEM 107 double rotation = ((wxSVGCanvasText*) m_canvasItem)->GetRotationOfChar(charnum); 108 WX_SVG_CLEAR_M_CANVAS_ITEM 109 return rotation; 110 } 111 GetCharNumAtPosition(const wxSVGPoint & point)112long wxSVGTextElement::GetCharNumAtPosition(const wxSVGPoint& point) { 113 WX_SVG_CREATE_M_CANVAS_ITEM 114 long charnum = ((wxSVGCanvasText*) m_canvasItem)->GetCharNumAtPosition(point); 115 WX_SVG_CLEAR_M_CANVAS_ITEM 116 return charnum; 117 } 118