blob: 3439db689910195c9bcf44bc6bb83bfc2b44368b [file] [log] [blame]
/*
* Copyright 2025 Google LLC.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkPathRawShapes_DEFINED
#define SkPathRawShapes_DEFINED
#include "include/core/SkPathTypes.h"
#include "include/core/SkPoint.h"
#include "src/core/SkPathRaw.h"
class SkRRect;
struct SkRect;
/**
* These classes provide their own stack-based storage for path data, making them efficient
* alternatives to SkPath for known geometries, avoiding heap allocations.
*
* The defaults were chosen to match those in SkPathBuilder.h
*/
namespace SkPathRawShapes {
struct Rect : public SkPathRaw {
SkPoint fStorage[4]; // move + 3 lines (+ close)
explicit Rect(const SkRect&, SkPathDirection = SkPathDirection::kCW, unsigned index = 0);
};
struct Oval : public SkPathRaw {
SkPoint fStorage[9]; // move + 4 conics (+ close)
explicit Oval(const SkRect&, SkPathDirection = SkPathDirection::kCW, unsigned index = 1);
};
struct RRect : public SkPathRaw {
SkPoint fStorage[13]; // worse case: move + 4 conics + 4 lines (+ close)
RRect(const SkRRect&, SkPathDirection dir, unsigned index);
RRect(const SkRRect& rr, SkPathDirection dir)
: RRect(rr, dir, (dir == SkPathDirection::kCW ? 6 : 7)) {}
explicit RRect(const SkRRect& rr) : RRect(rr, SkPathDirection::kCW, 6) {}
};
struct Triangle : public SkPathRaw {
Triangle(SkSpan<const SkPoint> threePoints, const SkRect& bounds);
};
} // namespace SkPathRawShapes
#endif