"$_include/c/sk_pixmap.h",
"$_include/c/sk_pixelserializer.h",
"$_include/c/sk_region.h",
+ "$_include/c/sk_rrect.h",
"$_include/c/sk_shader.h",
"$_include/c/sk_stream.h",
"$_include/c/sk_string.h",
"$_src/c/sk_pixmap.cpp",
"$_src/c/sk_pixelserializer.cpp",
"$_src/c/sk_region.cpp",
+ "$_src/c/sk_rrect.cpp",
"$_src/c/sk_shader.cpp",
"$_src/c/sk_stream.cpp",
"$_src/c/sk_string.cpp",
SK_C_API void sk_canvas_clip_path(sk_canvas_t*, const sk_path_t*);
SK_C_API void sk_canvas_draw_paint(sk_canvas_t*, const sk_paint_t*);
SK_C_API void sk_canvas_draw_rect(sk_canvas_t*, const sk_rect_t*, const sk_paint_t*);
+SK_C_API void sk_canvas_draw_rrect(sk_canvas_t*, const sk_rrect_t*, const sk_paint_t*);
SK_C_API void sk_canvas_draw_region(sk_canvas_t*, const sk_region_t*, const sk_paint_t*);
SK_C_API void sk_canvas_draw_circle(sk_canvas_t*, float cx, float cy, float rad, const sk_paint_t*);
SK_C_API void sk_canvas_draw_oval(sk_canvas_t*, const sk_rect_t*, const sk_paint_t*);
SK_C_API void sk_canvas_draw_round_rect(sk_canvas_t*, const sk_rect_t*, float rx, float ry, const sk_paint_t*);
SK_C_API void sk_canvas_clip_rect_with_operation(sk_canvas_t* t, const sk_rect_t* crect, sk_clipop_t op, bool doAA);
SK_C_API void sk_canvas_clip_path_with_operation(sk_canvas_t* t, const sk_path_t* crect, sk_clipop_t op, bool doAA);
+SK_C_API void sk_canvas_clip_rrect_with_operation(sk_canvas_t* t, const sk_rrect_t* crect, sk_clipop_t op, bool doAA);
SK_C_API bool sk_canvas_get_local_clip_bounds(sk_canvas_t* t, sk_rect_t* cbounds);
SK_C_API bool sk_canvas_get_device_clip_bounds(sk_canvas_t* t, sk_irect_t* cbounds);
SK_C_API void sk_canvas_flush(sk_canvas_t* ccanvas);
SK_C_API void sk_path_arc_to_with_points(sk_path_t*, float x1, float y1, float x2, float y2, float radius);
SK_C_API void sk_path_close(sk_path_t*);
SK_C_API void sk_path_add_rect(sk_path_t*, const sk_rect_t*, sk_path_direction_t);
+SK_C_API void sk_path_add_rrect(sk_path_t*, const sk_rrect_t*, sk_path_direction_t);
+SK_C_API void sk_path_add_rrect_start(sk_path_t*, const sk_rrect_t*, sk_path_direction_t, uint32_t);
SK_C_API void sk_path_add_rounded_rect(sk_path_t*, const sk_rect_t*, float, float, sk_path_direction_t);
SK_C_API void sk_path_add_oval(sk_path_t*, const sk_rect_t*, sk_path_direction_t);
SK_C_API void sk_path_add_circle(sk_path_t*, float x, float y, float radius, sk_path_direction_t dir);
--- /dev/null
+/*
+ * Copyright 2014 Google Inc.
+ * Copyright 2016 Xamarin Inc.
+ * Copyright 2018 Microsoft Corporation. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef sk_rrect_DEFINED
+#define sk_rrect_DEFINED
+
+#include "sk_types.h"
+
+SK_C_PLUS_PLUS_BEGIN_GUARD
+
+SK_C_API sk_rrect_t* sk_rrect_new(void);
+SK_C_API sk_rrect_t* sk_rrect_new_copy(const sk_rrect_t* rrect);
+SK_C_API void sk_rrect_delete(const sk_rrect_t* rrect);
+SK_C_API sk_rrect_type_t sk_rrect_get_type(const sk_rrect_t* rrect);
+SK_C_API void sk_rrect_get_rect(const sk_rrect_t* rrect, sk_rect_t* rect);
+SK_C_API void sk_rrect_get_radii(const sk_rrect_t* rrect, sk_rrect_corner_t corner, sk_vector_t* radii);
+SK_C_API bool sk_rrect_all_corners_circular(const sk_rrect_t* rrect, float tolerance);
+SK_C_API float sk_rrect_get_width(const sk_rrect_t* rrect);
+SK_C_API float sk_rrect_get_height(const sk_rrect_t* rrect);
+SK_C_API void sk_rrect_set_empty(sk_rrect_t* rrect);
+SK_C_API void sk_rrect_set_rect(sk_rrect_t* rrect, const sk_rect_t* rect);
+SK_C_API void sk_rrect_set_oval(sk_rrect_t* rrect, const sk_rect_t* rect);
+SK_C_API void sk_rrect_set_rect_xy(sk_rrect_t* rrect, const sk_rect_t* rect, float xRad, float yRad);
+SK_C_API void sk_rrect_set_nine_patch(sk_rrect_t* rrect, const sk_rect_t* rect, float leftRad, float topRad, float rightRad, float bottomRad);
+SK_C_API void sk_rrect_set_rect_radii(sk_rrect_t* rrect, const sk_rect_t* rect, const sk_vector_t* radii);
+SK_C_API void sk_rrect_inset(sk_rrect_t* rrect, float dx, float dy);
+SK_C_API void sk_rrect_outset(sk_rrect_t* rrect, float dx, float dy);
+SK_C_API void sk_rrect_offset(sk_rrect_t* rrect, float dx, float dy);
+SK_C_API bool sk_rrect_contains(const sk_rrect_t* rrect, const sk_rect_t* rect);
+SK_C_API bool sk_rrect_is_valid(const sk_rrect_t* rrect);
+SK_C_API bool sk_rrect_transform(sk_rrect_t* rrect, const sk_matrix_t* matrix, sk_rrect_t* dest);
+
+SK_C_PLUS_PLUS_END_GUARD
+
+#endif
float fQuality;
sk_transfer_function_behavior_t fUnpremulBehavior;
} sk_webpencoder_options_t;
+typedef struct sk_rrect_t sk_rrect_t;
+
+typedef enum {
+ EMPTY_SK_RRECT_TYPE,
+ RECT_SK_RRECT_TYPE,
+ OVAL_SK_RRECT_TYPE,
+ SIMPLE_SK_RRECT_TYPE,
+ NINE_PATCH_SK_RRECT_TYPE,
+ COMPLEX_SK_RRECT_TYPE,
+} sk_rrect_type_t;
+
+typedef enum {
+ UPPER_LEFT_SK_RRECT_CORNER,
+ UPPER_RIGHT_SK_RRECT_CORNER,
+ LOWER_RIGHT_SK_RRECT_CORNER,
+ LOWER_LEFT_SK_RRECT_CORNER,
+} sk_rrect_corner_t;
SK_C_PLUS_PLUS_END_GUARD
AsCanvas(ccanvas)->clipPath(AsPath(*cpath), (SkClipOp)op, doAA);
}
+void sk_canvas_clip_rrect_with_operation(sk_canvas_t* ccanvas, const sk_rrect_t* crect, sk_clipop_t op, bool doAA) {
+ AsCanvas(ccanvas)->clipRRect(AsRRect(*crect), (SkClipOp)op, doAA);
+}
+
bool sk_canvas_get_local_clip_bounds(sk_canvas_t* ccanvas, sk_rect_t* cbounds) {
return AsCanvas(ccanvas)->getLocalClipBounds(AsRect(cbounds));
}
AsCanvas(ccanvas)->drawRect(AsRect(*crect), AsPaint(*cpaint));
}
+void sk_canvas_draw_rrect(sk_canvas_t* ccanvas, const sk_rrect_t* crect, const sk_paint_t* cpaint) {
+ AsCanvas(ccanvas)->drawRRect(AsRRect(*crect), AsPaint(*cpaint));
+}
+
void sk_canvas_draw_circle(sk_canvas_t* ccanvas, float cx, float cy, float rad,
const sk_paint_t* cpaint) {
AsCanvas(ccanvas)->drawCircle(cx, cy, rad, AsPaint(*cpaint));
static_assert ((int)SkWebpEncoder::Compression::kLossy == (int)LOSSY_SK_WEBPENCODER_COMPTRESSION, ASSERT_MSG(SkWebpEncoder::Compression, sk_webpencoder_compression_t));
static_assert ((int)SkWebpEncoder::Compression::kLossless == (int)LOSSLESS_SK_WEBPENCODER_COMPTRESSION, ASSERT_MSG(SkWebpEncoder::Compression, sk_webpencoder_compression_t));
+// sk_rrect_type_t
+static_assert ((int)SkRRect::Type::kEmpty_Type == (int)EMPTY_SK_RRECT_TYPE, ASSERT_MSG(SkRRect::Type, sk_rrect_type_t));
+static_assert ((int)SkRRect::Type::kRect_Type == (int)RECT_SK_RRECT_TYPE, ASSERT_MSG(SkRRect::Type, sk_rrect_type_t));
+static_assert ((int)SkRRect::Type::kOval_Type == (int)OVAL_SK_RRECT_TYPE, ASSERT_MSG(SkRRect::Type, sk_rrect_type_t));
+static_assert ((int)SkRRect::Type::kSimple_Type == (int)SIMPLE_SK_RRECT_TYPE, ASSERT_MSG(SkRRect::Type, sk_rrect_type_t));
+static_assert ((int)SkRRect::Type::kNinePatch_Type == (int)NINE_PATCH_SK_RRECT_TYPE, ASSERT_MSG(SkRRect::Type, sk_rrect_type_t));
+static_assert ((int)SkRRect::Type::kComplex_Type == (int)COMPLEX_SK_RRECT_TYPE, ASSERT_MSG(SkRRect::Type, sk_rrect_type_t));
+
+// sk_rrect_corner_t
+static_assert ((int)SkRRect::Corner::kUpperLeft_Corner == (int)UPPER_LEFT_SK_RRECT_CORNER, ASSERT_MSG(SkRRect::Corner, sk_rrect_corner_t));
+static_assert ((int)SkRRect::Corner::kUpperRight_Corner == (int)UPPER_RIGHT_SK_RRECT_CORNER, ASSERT_MSG(SkRRect::Corner, sk_rrect_corner_t));
+static_assert ((int)SkRRect::Corner::kLowerRight_Corner == (int)LOWER_RIGHT_SK_RRECT_CORNER, ASSERT_MSG(SkRRect::Corner, sk_rrect_corner_t));
+static_assert ((int)SkRRect::Corner::kLowerLeft_Corner == (int)LOWER_LEFT_SK_RRECT_CORNER, ASSERT_MSG(SkRRect::Corner, sk_rrect_corner_t));
+
#if SK_SUPPORT_GPU
// gr_surfaceorigin_t
AsPath(cpath)->addRect(AsRect(*crect), (SkPath::Direction)cdir);
}
+void sk_path_add_rrect(sk_path_t* cpath, const sk_rrect_t* crect, sk_path_direction_t cdir) {
+ AsPath(cpath)->addRRect(AsRRect(*crect), (SkPath::Direction)cdir);
+}
+
+void sk_path_add_rrect_start(sk_path_t* cpath, const sk_rrect_t* crect, sk_path_direction_t cdir, uint32_t start) {
+ AsPath(cpath)->addRRect(AsRRect(*crect), (SkPath::Direction)cdir, start);
+}
+
void sk_path_add_rounded_rect(sk_path_t* cpath, const sk_rect_t* crect, float rx, float ry, sk_path_direction_t cdir) {
AsPath(cpath)->addRoundRect(AsRect(*crect), rx, ry, (SkPath::Direction)cdir);
}
--- /dev/null
+/*
+ * Copyright 2014 Google Inc.
+ * Copyright 2016 Xamarin Inc.
+ * Copyright 2018 Microsoft Corporation. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkRRect.h"
+#include "sk_rrect.h"
+#include "sk_types_priv.h"
+
+
+sk_rrect_t* sk_rrect_new(void) {
+ return ToRRect(new SkRRect());
+}
+
+sk_rrect_t* sk_rrect_new_copy(const sk_rrect_t* rrect) {
+ return ToRRect(new SkRRect(AsRRect(*rrect)));
+}
+
+void sk_rrect_delete(const sk_rrect_t* rrect) {
+ delete AsRRect(rrect);
+}
+
+sk_rrect_type_t sk_rrect_get_type(const sk_rrect_t* rrect) {
+ return (sk_rrect_type_t)AsRRect(rrect)->getType();
+}
+
+void sk_rrect_get_rect(const sk_rrect_t* rrect, sk_rect_t* rect) {
+ if (rect) {
+ *rect = ToRect(AsRRect(rrect)->rect());
+ }
+}
+
+void sk_rrect_get_radii(const sk_rrect_t* rrect, sk_rrect_corner_t corner, sk_vector_t* radii) {
+ if (radii) {
+ *radii = ToPoint(AsRRect(rrect)->radii((SkRRect::Corner)corner));
+ }
+}
+
+bool sk_rrect_all_corners_circular(const sk_rrect_t* rrect, float tolerance) {
+ return AsRRect(rrect)->allCornersCircular(tolerance);
+}
+
+float sk_rrect_get_width(const sk_rrect_t* rrect) {
+ return AsRRect(rrect)->width();
+}
+
+float sk_rrect_get_height(const sk_rrect_t* rrect) {
+ return AsRRect(rrect)->height();
+}
+
+void sk_rrect_set_empty(sk_rrect_t* rrect) {
+ AsRRect(rrect)->setEmpty();
+}
+
+void sk_rrect_set_rect(sk_rrect_t* rrect, const sk_rect_t* rect) {
+ AsRRect(rrect)->setRect(AsRect(*rect));
+}
+
+void sk_rrect_set_oval(sk_rrect_t* rrect, const sk_rect_t* rect) {
+ AsRRect(rrect)->setOval(AsRect(*rect));
+}
+
+void sk_rrect_set_rect_xy(sk_rrect_t* rrect, const sk_rect_t* rect, float xRad, float yRad) {
+ AsRRect(rrect)->setRectXY(AsRect(*rect), xRad, yRad);
+}
+
+void sk_rrect_set_nine_patch(sk_rrect_t* rrect, const sk_rect_t* rect, float leftRad, float topRad, float rightRad, float bottomRad) {
+ AsRRect(rrect)->setNinePatch(AsRect(*rect), leftRad, topRad, rightRad, bottomRad);
+}
+
+void sk_rrect_set_rect_radii(sk_rrect_t* rrect, const sk_rect_t* rect, const sk_vector_t* radii) {
+ AsRRect(rrect)->setRectRadii(AsRect(*rect), AsPoint(radii));
+}
+
+void sk_rrect_inset(sk_rrect_t* rrect, float dx, float dy) {
+ AsRRect(rrect)->inset(dx, dy);
+}
+
+void sk_rrect_outset(sk_rrect_t* rrect, float dx, float dy) {
+ AsRRect(rrect)->outset(dx, dy);
+}
+
+void sk_rrect_offset(sk_rrect_t* rrect, float dx, float dy) {
+ AsRRect(rrect)->offset(dx, dy);
+}
+
+bool sk_rrect_contains(const sk_rrect_t* rrect, const sk_rect_t* rect) {
+ return AsRRect(rrect)->contains(AsRect(*rect));
+}
+
+bool sk_rrect_is_valid(const sk_rrect_t* rrect) {
+ return AsRRect(rrect)->isValid();
+}
+
+bool sk_rrect_transform(sk_rrect_t* rrect, const sk_matrix_t* matrix, sk_rrect_t* dest) {
+ SkMatrix skmatrix;
+ from_c(matrix, &skmatrix);
+ return AsRRect(rrect)->transform(skmatrix, AsRRect(dest));
+}
DEF_CLASS_MAP(SkPixelSerializer, sk_pixelserializer_t, PixelSerializer)
DEF_CLASS_MAP(SkPixmap, sk_pixmap_t, Pixmap)
DEF_CLASS_MAP(SkRegion, sk_region_t, Region)
+DEF_CLASS_MAP(SkRRect, sk_rrect_t, RRect)
DEF_CLASS_MAP(SkShader, sk_shader_t, Shader)
DEF_CLASS_MAP(SkStream, sk_stream_t, Stream)
DEF_CLASS_MAP(SkStreamAsset, sk_stream_asset_t, StreamAsset)
#include "sk_pixmap.h"
#include "sk_pixelserializer.h"
#include "sk_region.h"
+#include "sk_rrect.h"
#include "sk_shader.h"
#include "sk_stream.h"
#include "sk_string.h"
(void*)sk_pixmap_destructor,
(void*)sk_pixelserializer_unref,
(void*)sk_region_new,
+ (void*)sk_rrect_new,
(void*)sk_shader_ref,
(void*)sk_stream_asset_destroy,
(void*)sk_string_new_empty,