Skip to content

Commit 2186405

Browse files
authored
Adding the SkColor4f (with SkColorSpace) overloads (#74)
* Add SkColor4f for SkPixmap * Add the SkShader variants
1 parent acad480 commit 2186405

File tree

9 files changed

+151
-131
lines changed

9 files changed

+151
-131
lines changed

include/c/sk_colorspace.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
SK_C_PLUS_PLUS_BEGIN_GUARD
1616

17+
// sk_colorspace_t
18+
1719
SK_C_API void sk_colorspace_unref(sk_colorspace_t* cColorSpace);
1820
SK_C_API sk_colorspace_t* sk_colorspace_new_srgb(void);
1921
SK_C_API sk_colorspace_t* sk_colorspace_new_srgb_linear(void);
@@ -38,6 +40,12 @@ SK_C_API bool sk_colorspaceprimaries_to_xyzd50(const sk_colorspaceprimaries_t* p
3840
SK_C_API void sk_colorspace_transfer_fn_invert(const sk_colorspace_transfer_fn_t* transfer, sk_colorspace_transfer_fn_t* inverted);
3941
SK_C_API float sk_colorspace_transfer_fn_transform(const sk_colorspace_transfer_fn_t* transfer, float x);
4042

43+
// sk_color4f_t
44+
45+
SK_C_API sk_color_t sk_color4f_to_color(const sk_color4f_t* color4f);
46+
SK_C_API void sk_color4f_from_color(sk_color_t color, sk_color4f_t* color4f);
47+
SK_C_API void sk_color4f_pin(const sk_color4f_t* color4f, sk_color4f_t* pinned);
48+
4149
SK_C_PLUS_PLUS_END_GUARD
4250

4351
#endif

include/c/sk_pixmap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ SK_C_API bool sk_pixmap_read_pixels(const sk_pixmap_t* cpixmap, const sk_imagein
2929
SK_C_API bool sk_pixmap_scale_pixels(const sk_pixmap_t* cpixmap, const sk_pixmap_t* dst, sk_filter_quality_t quality);
3030
SK_C_API bool sk_pixmap_extract_subset(const sk_pixmap_t* cpixmap, sk_pixmap_t* result, const sk_irect_t* subset);
3131
SK_C_API bool sk_pixmap_erase_color(const sk_pixmap_t* cpixmap, sk_color_t color, const sk_irect_t* subset);
32+
SK_C_API bool sk_pixmap_erase_color4f(const sk_pixmap_t* cpixmap, const sk_color4f_t* color, const sk_irect_t* subset);
3233

3334
SK_C_API sk_color_t sk_color_unpremultiply(const sk_pmcolor_t pmcolor);
3435
SK_C_API sk_pmcolor_t sk_color_premultiply(const sk_color_t color);

include/c/sk_shader.h

Lines changed: 30 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -14,76 +14,38 @@
1414

1515
SK_C_PLUS_PLUS_BEGIN_GUARD
1616

17-
SK_C_API void sk_shader_ref(sk_shader_t*);
18-
SK_C_API void sk_shader_unref(sk_shader_t*);
19-
SK_C_API sk_shader_t* sk_shader_new_linear_gradient(const sk_point_t points[2],
20-
const sk_color_t colors[],
21-
const float colorPos[],
22-
int colorCount,
23-
sk_shader_tilemode_t tileMode,
24-
const sk_matrix_t* localMatrix);
25-
SK_C_API sk_shader_t* sk_shader_new_radial_gradient(const sk_point_t* center,
26-
float radius,
27-
const sk_color_t colors[],
28-
const float colorPos[],
29-
int colorCount,
30-
sk_shader_tilemode_t tileMode,
31-
const sk_matrix_t* localMatrix);
32-
SK_C_API sk_shader_t* sk_shader_new_sweep_gradient(const sk_point_t* center,
33-
const sk_color_t colors[],
34-
const float colorPos[],
35-
int colorCount,
36-
sk_shader_tilemode_t tileMode,
37-
float startAngle,
38-
float endAngle,
39-
const sk_matrix_t* localMatrix);
40-
SK_C_API sk_shader_t* sk_shader_new_two_point_conical_gradient(
41-
const sk_point_t* start,
42-
float startRadius,
43-
const sk_point_t* end,
44-
float endRadius,
45-
const sk_color_t colors[],
46-
const float colorPos[],
47-
int colorCount,
48-
sk_shader_tilemode_t tileMode,
49-
const sk_matrix_t* localMatrix);
17+
// SkShader
18+
19+
SK_C_API void sk_shader_ref(sk_shader_t* shader);
20+
SK_C_API void sk_shader_unref(sk_shader_t* shader);
21+
SK_C_API sk_shader_t* sk_shader_with_local_matrix(const sk_shader_t* shader, const sk_matrix_t* localMatrix);
22+
SK_C_API sk_shader_t* sk_shader_with_color_filter(const sk_shader_t* shader, const sk_colorfilter_t* filter);
23+
24+
// SkShaders
25+
5026
SK_C_API sk_shader_t* sk_shader_new_empty(void);
5127
SK_C_API sk_shader_t* sk_shader_new_color(sk_color_t color);
52-
SK_C_API sk_shader_t* sk_shader_new_bitmap(const sk_bitmap_t* src,
53-
sk_shader_tilemode_t tmx,
54-
sk_shader_tilemode_t tmy,
55-
const sk_matrix_t* localMatrix);
56-
SK_C_API sk_shader_t* sk_shader_new_picture(sk_picture_t* src,
57-
sk_shader_tilemode_t tmx,
58-
sk_shader_tilemode_t tmy,
59-
const sk_matrix_t* localMatrix,
60-
const sk_rect_t* tile);
61-
SK_C_API sk_shader_t* sk_shader_new_local_matrix(sk_shader_t* proxy, const sk_matrix_t* localMatrix);
62-
SK_C_API sk_shader_t* sk_shader_new_color_filter(sk_shader_t* proxy, sk_colorfilter_t* filter);
63-
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_fractal_noise(
64-
float baseFrequencyX,
65-
float baseFrequencyY,
66-
int numOctaves,
67-
float seed,
68-
const sk_isize_t* tileSize);
69-
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_turbulence(
70-
float baseFrequencyX,
71-
float baseFrequencyY,
72-
int numOctaves,
73-
float seed,
74-
const sk_isize_t* tileSize);
75-
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_improved_noise(
76-
float baseFrequencyX,
77-
float baseFrequencyY,
78-
int numOctaves,
79-
float z);
80-
SK_C_API sk_shader_t* sk_shader_new_compose(
81-
sk_shader_t* shaderA,
82-
sk_shader_t* shaderB);
83-
SK_C_API sk_shader_t* sk_shader_new_compose_with_mode(
84-
sk_shader_t* shaderA,
85-
sk_shader_t* shaderB,
86-
sk_blendmode_t mode);
28+
SK_C_API sk_shader_t* sk_shader_new_color4f(const sk_color4f_t* color, const sk_colorspace_t* colorspace);
29+
SK_C_API sk_shader_t* sk_shader_new_compose(const sk_shader_t* shaderA, const sk_shader_t* shaderB, sk_blendmode_t mode);
30+
SK_C_API sk_shader_t* sk_shader_new_bitmap(const sk_bitmap_t* src, sk_shader_tilemode_t tmx, sk_shader_tilemode_t tmy, const sk_matrix_t* localMatrix);
31+
SK_C_API sk_shader_t* sk_shader_new_picture(sk_picture_t* src, sk_shader_tilemode_t tmx, sk_shader_tilemode_t tmy, const sk_matrix_t* localMatrix, const sk_rect_t* tile);
32+
33+
// SkGradientShader
34+
35+
SK_C_API sk_shader_t* sk_shader_new_linear_gradient(const sk_point_t points[2], const sk_color_t colors[], const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, const sk_matrix_t* localMatrix);
36+
SK_C_API sk_shader_t* sk_shader_new_linear_gradient_color4f(const sk_point_t points[2], const sk_color4f_t* colors, const sk_colorspace_t* colorspace, const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, const sk_matrix_t* localMatrix);
37+
SK_C_API sk_shader_t* sk_shader_new_radial_gradient(const sk_point_t* center, float radius, const sk_color_t colors[], const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, const sk_matrix_t* localMatrix);
38+
SK_C_API sk_shader_t* sk_shader_new_radial_gradient_color4f(const sk_point_t* center, float radius, const sk_color4f_t* colors, const sk_colorspace_t* colorspace, const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, const sk_matrix_t* localMatrix);
39+
SK_C_API sk_shader_t* sk_shader_new_sweep_gradient(const sk_point_t* center, const sk_color_t colors[], const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, float startAngle, float endAngle, const sk_matrix_t* localMatrix);
40+
SK_C_API sk_shader_t* sk_shader_new_sweep_gradient_color4f(const sk_point_t* center, const sk_color4f_t* colors, const sk_colorspace_t* colorspace, const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, float startAngle, float endAngle, const sk_matrix_t* localMatrix);
41+
SK_C_API sk_shader_t* sk_shader_new_two_point_conical_gradient(const sk_point_t* start, float startRadius, const sk_point_t* end, float endRadius, const sk_color_t colors[], const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, const sk_matrix_t* localMatrix);
42+
SK_C_API sk_shader_t* sk_shader_new_two_point_conical_gradient_color4f(const sk_point_t* start, float startRadius, const sk_point_t* end, float endRadius, const sk_color4f_t* colors, const sk_colorspace_t* colorspace, const float colorPos[], int colorCount, sk_shader_tilemode_t tileMode, const sk_matrix_t* localMatrix);
43+
44+
// SkPerlinNoiseShader
45+
46+
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_fractal_noise(float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed, const sk_isize_t* tileSize);
47+
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_turbulence(float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed, const sk_isize_t* tileSize);
48+
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_improved_noise(float baseFrequencyX, float baseFrequencyY, int numOctaves, float z);
8749

8850
SK_C_PLUS_PLUS_END_GUARD
8951

include/c/sk_types.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ typedef uint32_t sk_pmcolor_t;
5555
#define sk_color_get_g(c) (((c) >> 8) & 0xFF)
5656
#define sk_color_get_b(c) (((c) >> 0) & 0xFF)
5757

58+
typedef struct sk_color4f_t {
59+
float fR;
60+
float fG;
61+
float fB;
62+
float fA;
63+
} sk_color4f_t;
64+
5865
typedef enum {
5966
UNKNOWN_SK_COLORTYPE = 0,
6067
ALPHA_8_SK_COLORTYPE,

src/c/sk_colorspace.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
#include "sk_types_priv.h"
1515

16+
// sk_colorspace_t
17+
1618
void sk_colorspace_unref(sk_colorspace_t* cColorSpace) {
1719
SkSafeUnref(AsColorSpace(cColorSpace));
1820
}
@@ -105,3 +107,18 @@ float sk_colorspace_transfer_fn_transform(const sk_colorspace_transfer_fn_t* tra
105107
SkColorSpaceTransferFn fn = *AsColorSpaceTransferFn(transfer);
106108
return fn(x);
107109
}
110+
111+
112+
// sk_color4f_t
113+
114+
sk_color_t sk_color4f_to_color(const sk_color4f_t* color4f) {
115+
return AsColor4f(color4f)->toSkColor();
116+
}
117+
118+
void sk_color4f_from_color(sk_color_t color, sk_color4f_t* color4f) {
119+
*color4f = ToColor4f(SkColor4f::FromColor(color));
120+
}
121+
122+
void sk_color4f_pin(const sk_color4f_t* color4f, sk_color4f_t* pinned) {
123+
*pinned = ToColor4f(AsColor4f(color4f)->pin());
124+
}

src/c/sk_pixmap.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,14 @@ bool sk_pixmap_extract_subset(const sk_pixmap_t* cpixmap, sk_pixmap_t* result, c
6464
return AsPixmap(cpixmap)->extractSubset(AsPixmap(result), *AsIRect(subset));
6565
}
6666

67-
bool sk_pixmap_erase_color (const sk_pixmap_t* cpixmap, sk_color_t color, const sk_irect_t* subset) {
67+
bool sk_pixmap_erase_color(const sk_pixmap_t* cpixmap, sk_color_t color, const sk_irect_t* subset) {
6868
return AsPixmap(cpixmap)->erase((SkColor)color, *AsIRect(subset));
6969
}
7070

71+
bool sk_pixmap_erase_color4f(const sk_pixmap_t* cpixmap, const sk_color4f_t* color, const sk_irect_t* subset) {
72+
return AsPixmap(cpixmap)->erase(*AsColor4f(color), AsIRect(subset));
73+
}
74+
7175
sk_color_t sk_color_unpremultiply(const sk_pmcolor_t pmcolor) {
7276
return SkUnPreMultiply::PMColorToColor(pmcolor);
7377
}

0 commit comments

Comments
 (0)