5#ifndef QTRIANGULATINGSTROKER_P_H
6#define QTRIANGULATINGSTROKER_P_H
19#include <QtCore/qmath.h>
20#include <QtGui/private/qtguiglobal_p.h>
21#include <private/qdatabuffer_p.h>
22#include <qvarlengtharray.h>
23#include <private/qvectorpath_p.h>
24#include <private/qbezier_p.h>
25#include <private/qnumeric_p.h>
26#include <private/qmath_p.h>
33 QTriangulatingStroker() : m_vertices(0), m_cx(0), m_cy(0), m_nvx(0), m_nvy(0), m_width(1), m_miter_limit(2),
34 m_roundness(0), m_sin_theta(0), m_cos_theta(0), m_inv_scale(1), m_curvyness_mul(1), m_curvyness_add(0),
35 m_join_style(Qt::BevelJoin), m_cap_style(Qt::SquareCap) {}
37 void process(
const QVectorPath &path,
const QPen &pen,
const QRectF &clip, QPainter::RenderHints hints);
39 inline int vertexCount()
const {
return m_vertices.size(); }
40 inline const float *vertices()
const {
return m_vertices.data(); }
42 inline void setInvScale(qreal invScale) { m_inv_scale = invScale; }
45 inline void emitLineSegment(
float x,
float y,
float nx,
float ny);
46 void moveTo(
const qreal *pts);
47 inline void lineTo(
const qreal *pts);
48 void cubicTo(
const qreal *pts);
49 void join(
const qreal *pts);
50 inline void normalVector(
float x1,
float y1,
float x2,
float y2,
float *nx,
float *ny);
51 void endCap(
const qreal *pts);
52 void arcPoints(
float cx,
float cy,
float fromX,
float fromY,
float toX,
float toY, QVarLengthArray<
float> &points);
53 void endCapOrJoinClosed(
const qreal *start,
const qreal *cur,
bool implicitClose,
bool endsAtStart);
56 QDataBuffer<
float> m_vertices;
67 float m_curvyness_mul;
68 float m_curvyness_add;
70 Qt::PenJoinStyle m_join_style;
71 Qt::PenCapStyle m_cap_style;
77 QDashedStrokeProcessor();
79 void process(
const QVectorPath &path,
const QPen &pen,
const QRectF &clip, QPainter::RenderHints hints);
81 inline void addElement(QPainterPath::ElementType type, qreal x, qreal y) {
87 inline int elementCount()
const {
return m_types.size(); }
88 inline qreal *points()
const {
return m_points.data(); }
89 inline QPainterPath::ElementType *elementTypes()
const {
return m_types.data(); }
91 inline void setInvScale(qreal invScale) { m_inv_scale = invScale; }
94 QDataBuffer<qreal> m_points;
95 QDataBuffer<QPainterPath::ElementType> m_types;
96 QDashStroker m_dash_stroker;
100inline void QTriangulatingStroker::normalVector(
float x1,
float y1,
float x2,
float y2,
101 float *nx,
float *ny)
103 const float dx = x2 - x1;
104 const float dy = y2 - y1;
105 const float pw = m_width / qHypot(dx, dy);
111inline void QTriangulatingStroker::emitLineSegment(
float x,
float y,
float vx,
float vy)
113 m_vertices.add(x + vx);
114 m_vertices.add(y + vy);
115 m_vertices.add(x - vx);
116 m_vertices.add(y - vy);
119void QTriangulatingStroker::lineTo(
const qreal *pts)
121 emitLineSegment(pts[0], pts[1], m_nvx, m_nvy);
Combined button and popup list for selecting options.
static void qdashprocessor_moveTo(qreal x, qreal y, void *data)
static void qdashprocessor_cubicTo(qreal, qreal, qreal, qreal, qreal, qreal, void *)
static void skipDuplicatePoints(const qreal **pts, const qreal *endPts)
static void qdashprocessor_lineTo(qreal x, qreal y, void *data)