Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: src/core/SkGeometry.h

Issue 455043002: use conics (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: address comments Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkEdgeBuilder.cpp ('k') | src/core/SkGeometry.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef SkGeometry_DEFINED 10 #ifndef SkGeometry_DEFINED
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 array of points with quadratic segments. Return is the number of points 221 array of points with quadratic segments. Return is the number of points
222 written to, which will be { 0, 3, 5, 7, ... kSkBuildQuadArcStorage } 222 written to, which will be { 0, 3, 5, 7, ... kSkBuildQuadArcStorage }
223 223
224 matrix, if not null, is appled to the points before they are returned. 224 matrix, if not null, is appled to the points before they are returned.
225 */ 225 */
226 int SkBuildQuadArc(const SkVector& unitStart, const SkVector& unitStop, 226 int SkBuildQuadArc(const SkVector& unitStart, const SkVector& unitStop,
227 SkRotationDirection, const SkMatrix*, SkPoint quadPoints[]); 227 SkRotationDirection, const SkMatrix*, SkPoint quadPoints[]);
228 228
229 // experimental 229 // experimental
230 struct SkConic { 230 struct SkConic {
231 SkConic() {}
232 SkConic(const SkPoint& p0, const SkPoint& p1, const SkPoint& p2, SkScalar w) {
233 fPts[0] = p0;
234 fPts[1] = p1;
235 fPts[2] = p2;
236 fW = w;
237 }
238 SkConic(const SkPoint pts[3], SkScalar w) {
239 memcpy(fPts, pts, sizeof(fPts));
240 fW = w;
241 }
242
231 SkPoint fPts[3]; 243 SkPoint fPts[3];
232 SkScalar fW; 244 SkScalar fW;
233 245
234 void set(const SkPoint pts[3], SkScalar w) { 246 void set(const SkPoint pts[3], SkScalar w) {
235 memcpy(fPts, pts, 3 * sizeof(SkPoint)); 247 memcpy(fPts, pts, 3 * sizeof(SkPoint));
236 fW = w; 248 fW = w;
237 } 249 }
238 250
239 /** 251 /**
240 * Given a t-value [0...1] return its position and/or tangent. 252 * Given a t-value [0...1] return its position and/or tangent.
(...skipping 30 matching lines...) Expand all
271 void computeFastBounds(SkRect* bounds) const; 283 void computeFastBounds(SkRect* bounds) const;
272 284
273 /** Find the parameter value where the conic takes on its maximum curvature. 285 /** Find the parameter value where the conic takes on its maximum curvature.
274 * 286 *
275 * @param t output scalar for max curvature. Will be unchanged if 287 * @param t output scalar for max curvature. Will be unchanged if
276 * max curvature outside 0..1 range. 288 * max curvature outside 0..1 range.
277 * 289 *
278 * @return true if max curvature found inside 0..1 range, false otherwise 290 * @return true if max curvature found inside 0..1 range, false otherwise
279 */ 291 */
280 bool findMaxCurvature(SkScalar* t) const; 292 bool findMaxCurvature(SkScalar* t) const;
293
294 static SkScalar TransformW(const SkPoint[3], SkScalar w, const SkMatrix&);
281 }; 295 };
282 296
283 #include "SkTemplates.h" 297 #include "SkTemplates.h"
284 298
285 /** 299 /**
286 * Help class to allocate storage for approximating a conic with N quads. 300 * Help class to allocate storage for approximating a conic with N quads.
287 */ 301 */
288 class SkAutoConicToQuads { 302 class SkAutoConicToQuads {
289 public: 303 public:
290 SkAutoConicToQuads() : fQuadCount(0) {} 304 SkAutoConicToQuads() : fQuadCount(0) {}
(...skipping 30 matching lines...) Expand all
321 private: 335 private:
322 enum { 336 enum {
323 kQuadCount = 8, // should handle most conics 337 kQuadCount = 8, // should handle most conics
324 kPointCount = 1 + 2 * kQuadCount, 338 kPointCount = 1 + 2 * kQuadCount,
325 }; 339 };
326 SkAutoSTMalloc<kPointCount, SkPoint> fStorage; 340 SkAutoSTMalloc<kPointCount, SkPoint> fStorage;
327 int fQuadCount; // #quads for current usage 341 int fQuadCount; // #quads for current usage
328 }; 342 };
329 343
330 #endif 344 #endif
OLDNEW
« no previous file with comments | « src/core/SkEdgeBuilder.cpp ('k') | src/core/SkGeometry.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698