OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
| 8 #include "SkTypes.h" |
| 9 |
8 #ifndef UNICODE | 10 #ifndef UNICODE |
9 #define UNICODE | 11 #define UNICODE |
10 #endif | 12 #endif |
11 #ifndef _UNICODE | 13 #ifndef _UNICODE |
12 #define _UNICODE | 14 #define _UNICODE |
13 #endif | 15 #endif |
14 #include "SkTypes.h" | |
15 #include <ObjBase.h> | 16 #include <ObjBase.h> |
16 #include <XpsObjectModel.h> | 17 #include <XpsObjectModel.h> |
17 #include <T2EmbApi.h> | 18 #include <T2EmbApi.h> |
18 #include <FontSub.h> | 19 #include <FontSub.h> |
19 | 20 |
20 #include "SkColor.h" | 21 #include "SkColor.h" |
21 #include "SkConstexprMath.h" | 22 #include "SkConstexprMath.h" |
22 #include "SkData.h" | 23 #include "SkData.h" |
23 #include "SkDraw.h" | 24 #include "SkDraw.h" |
24 #include "SkDrawProcs.h" | 25 #include "SkDrawProcs.h" |
25 #include "SkEndian.h" | 26 #include "SkEndian.h" |
| 27 #include "SkGeometry.h" |
26 #include "SkGlyphCache.h" | 28 #include "SkGlyphCache.h" |
27 #include "SkHRESULT.h" | 29 #include "SkHRESULT.h" |
28 #include "SkImageEncoder.h" | 30 #include "SkImageEncoder.h" |
29 #include "SkIStream.h" | 31 #include "SkIStream.h" |
30 #include "SkMaskFilter.h" | 32 #include "SkMaskFilter.h" |
31 #include "SkPaint.h" | 33 #include "SkPaint.h" |
32 #include "SkPathOps.h" | 34 #include "SkPathOps.h" |
33 #include "SkPoint.h" | 35 #include "SkPoint.h" |
34 #include "SkRasterizer.h" | 36 #include "SkRasterizer.h" |
35 #include "SkSFNTHeader.h" | 37 #include "SkSFNTHeader.h" |
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1356 case SkPath::kCubic_Verb: | 1358 case SkPath::kCubic_Verb: |
1357 segmentTypes.push(XPS_SEGMENT_TYPE_BEZIER); | 1359 segmentTypes.push(XPS_SEGMENT_TYPE_BEZIER); |
1358 segmentStrokes.push(stroke); | 1360 segmentStrokes.push(stroke); |
1359 segmentData.push(SkScalarToFLOAT(points[1].fX)); | 1361 segmentData.push(SkScalarToFLOAT(points[1].fX)); |
1360 segmentData.push(SkScalarToFLOAT(points[1].fY)); | 1362 segmentData.push(SkScalarToFLOAT(points[1].fY)); |
1361 segmentData.push(SkScalarToFLOAT(points[2].fX)); | 1363 segmentData.push(SkScalarToFLOAT(points[2].fX)); |
1362 segmentData.push(SkScalarToFLOAT(points[2].fY)); | 1364 segmentData.push(SkScalarToFLOAT(points[2].fY)); |
1363 segmentData.push(SkScalarToFLOAT(points[3].fX)); | 1365 segmentData.push(SkScalarToFLOAT(points[3].fX)); |
1364 segmentData.push(SkScalarToFLOAT(points[3].fY)); | 1366 segmentData.push(SkScalarToFLOAT(points[3].fY)); |
1365 break; | 1367 break; |
| 1368 case SkPath::kConic_Verb: { |
| 1369 const SkScalar tol = SK_Scalar1 / 4; |
| 1370 SkAutoConicToQuads converter; |
| 1371 const SkPoint* quads = |
| 1372 converter.computeQuads(points, iter.conicWeight(), tol); |
| 1373 for (int i = 0; i < converter.countQuads(); ++i) { |
| 1374 segmentTypes.push(XPS_SEGMENT_TYPE_QUADRATIC_BEZIER); |
| 1375 segmentStrokes.push(stroke); |
| 1376 segmentData.push(SkScalarToFLOAT(quads[2 * i + 1].fX)); |
| 1377 segmentData.push(SkScalarToFLOAT(quads[2 * i + 1].fY)); |
| 1378 segmentData.push(SkScalarToFLOAT(quads[2 * i + 2].fX)); |
| 1379 segmentData.push(SkScalarToFLOAT(quads[2 * i + 2].fY)); |
| 1380 } |
| 1381 break; |
| 1382 } |
1366 case SkPath::kClose_Verb: | 1383 case SkPath::kClose_Verb: |
1367 // we ignore these, and just get the whole segment from | 1384 // we ignore these, and just get the whole segment from |
1368 // the corresponding line/quad/cubic verbs | 1385 // the corresponding line/quad/cubic verbs |
1369 break; | 1386 break; |
1370 default: | 1387 default: |
1371 SkDEBUGFAIL("unexpected verb"); | 1388 SkDEBUGFAIL("unexpected verb"); |
1372 break; | 1389 break; |
1373 } | 1390 } |
1374 } | 1391 } |
1375 if (xpsFigure.get()) { | 1392 if (xpsFigure.get()) { |
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2200 typeface, | 2217 typeface, |
2201 NULL, | 2218 NULL, |
2202 procs.xpsGlyphs.begin(), procs.xpsGlyphs.count(), | 2219 procs.xpsGlyphs.begin(), procs.xpsGlyphs.count(), |
2203 &origin, | 2220 &origin, |
2204 SkScalarToFLOAT(paint.getTextSize()), | 2221 SkScalarToFLOAT(paint.getTextSize()), |
2205 XPS_STYLE_SIMULATION_NONE, | 2222 XPS_STYLE_SIMULATION_NONE, |
2206 *d.fMatrix, | 2223 *d.fMatrix, |
2207 paint)); | 2224 paint)); |
2208 } | 2225 } |
2209 | 2226 |
2210 void SkXPSDevice::drawTextOnPath(const SkDraw& d, const void* text, size_t len, | |
2211 const SkPath& path, const SkMatrix* matrix, | |
2212 const SkPaint& paint) { | |
2213 //This will call back into the device to do the drawing. | |
2214 d.drawTextOnPath((const char*)text, len, path, matrix, paint); | |
2215 } | |
2216 | |
2217 void SkXPSDevice::drawDevice(const SkDraw& d, SkBaseDevice* dev, | 2227 void SkXPSDevice::drawDevice(const SkDraw& d, SkBaseDevice* dev, |
2218 int x, int y, | 2228 int x, int y, |
2219 const SkPaint&) { | 2229 const SkPaint&) { |
2220 SkXPSDevice* that = static_cast<SkXPSDevice*>(dev); | 2230 SkXPSDevice* that = static_cast<SkXPSDevice*>(dev); |
2221 | 2231 |
2222 SkTScopedComPtr<IXpsOMMatrixTransform> xpsTransform; | 2232 SkTScopedComPtr<IXpsOMMatrixTransform> xpsTransform; |
2223 XPS_MATRIX rawTransform = { | 2233 XPS_MATRIX rawTransform = { |
2224 1.0f, | 2234 1.0f, |
2225 0.0f, | 2235 0.0f, |
2226 0.0f, | 2236 0.0f, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2268 IID_PPV_ARGS(&this->fXpsFactory)), | 2278 IID_PPV_ARGS(&this->fXpsFactory)), |
2269 "Could not create factory for layer."); | 2279 "Could not create factory for layer."); |
2270 | 2280 |
2271 HRVM(this->fXpsFactory->CreateCanvas(&this->fCurrentXpsCanvas), | 2281 HRVM(this->fXpsFactory->CreateCanvas(&this->fCurrentXpsCanvas), |
2272 "Could not create canvas for layer."); | 2282 "Could not create canvas for layer."); |
2273 } | 2283 } |
2274 | 2284 |
2275 bool SkXPSDevice::allowImageFilter(const SkImageFilter*) { | 2285 bool SkXPSDevice::allowImageFilter(const SkImageFilter*) { |
2276 return false; | 2286 return false; |
2277 } | 2287 } |
OLD | NEW |