Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding the SkColor4f (with SkColorSpace) overloads #74

Merged
merged 3 commits into from
Jan 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions include/c/sk_colorspace.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

SK_C_PLUS_PLUS_BEGIN_GUARD

// sk_colorspace_t

SK_C_API void sk_colorspace_unref(sk_colorspace_t* cColorSpace);
SK_C_API sk_colorspace_t* sk_colorspace_new_srgb(void);
SK_C_API sk_colorspace_t* sk_colorspace_new_srgb_linear(void);
Expand All @@ -38,6 +40,12 @@ SK_C_API bool sk_colorspaceprimaries_to_xyzd50(const sk_colorspaceprimaries_t* p
SK_C_API void sk_colorspace_transfer_fn_invert(const sk_colorspace_transfer_fn_t* transfer, sk_colorspace_transfer_fn_t* inverted);
SK_C_API float sk_colorspace_transfer_fn_transform(const sk_colorspace_transfer_fn_t* transfer, float x);

// sk_color4f_t

SK_C_API sk_color_t sk_color4f_to_color(const sk_color4f_t* color4f);
SK_C_API void sk_color4f_from_color(sk_color_t color, sk_color4f_t* color4f);
SK_C_API void sk_color4f_pin(const sk_color4f_t* color4f, sk_color4f_t* pinned);

SK_C_PLUS_PLUS_END_GUARD

#endif
1 change: 1 addition & 0 deletions include/c/sk_pixmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ SK_C_API bool sk_pixmap_read_pixels(const sk_pixmap_t* cpixmap, const sk_imagein
SK_C_API bool sk_pixmap_scale_pixels(const sk_pixmap_t* cpixmap, const sk_pixmap_t* dst, sk_filter_quality_t quality);
SK_C_API bool sk_pixmap_extract_subset(const sk_pixmap_t* cpixmap, sk_pixmap_t* result, const sk_irect_t* subset);
SK_C_API bool sk_pixmap_erase_color(const sk_pixmap_t* cpixmap, sk_color_t color, const sk_irect_t* subset);
SK_C_API bool sk_pixmap_erase_color4f(const sk_pixmap_t* cpixmap, const sk_color4f_t* color, const sk_irect_t* subset);

SK_C_API sk_color_t sk_color_unpremultiply(const sk_pmcolor_t pmcolor);
SK_C_API sk_pmcolor_t sk_color_premultiply(const sk_color_t color);
Expand Down
98 changes: 30 additions & 68 deletions include/c/sk_shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,76 +14,38 @@

SK_C_PLUS_PLUS_BEGIN_GUARD

SK_C_API void sk_shader_ref(sk_shader_t*);
SK_C_API void sk_shader_unref(sk_shader_t*);
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);
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);
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);
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);
// SkShader

SK_C_API void sk_shader_ref(sk_shader_t* shader);
SK_C_API void sk_shader_unref(sk_shader_t* shader);
SK_C_API sk_shader_t* sk_shader_with_local_matrix(const sk_shader_t* shader, const sk_matrix_t* localMatrix);
SK_C_API sk_shader_t* sk_shader_with_color_filter(const sk_shader_t* shader, const sk_colorfilter_t* filter);

// SkShaders

SK_C_API sk_shader_t* sk_shader_new_empty(void);
SK_C_API sk_shader_t* sk_shader_new_color(sk_color_t color);
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);
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);
SK_C_API sk_shader_t* sk_shader_new_local_matrix(sk_shader_t* proxy, const sk_matrix_t* localMatrix);
SK_C_API sk_shader_t* sk_shader_new_color_filter(sk_shader_t* proxy, sk_colorfilter_t* filter);
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);
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);
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_improved_noise(
float baseFrequencyX,
float baseFrequencyY,
int numOctaves,
float z);
SK_C_API sk_shader_t* sk_shader_new_compose(
sk_shader_t* shaderA,
sk_shader_t* shaderB);
SK_C_API sk_shader_t* sk_shader_new_compose_with_mode(
sk_shader_t* shaderA,
sk_shader_t* shaderB,
sk_blendmode_t mode);
SK_C_API sk_shader_t* sk_shader_new_color4f(const sk_color4f_t* color, const sk_colorspace_t* colorspace);
SK_C_API sk_shader_t* sk_shader_new_compose(const sk_shader_t* shaderA, const sk_shader_t* shaderB, sk_blendmode_t mode);
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);
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);

// SkGradientShader

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);
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);
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);
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);
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);
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);
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);
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);

// SkPerlinNoiseShader

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);
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);
SK_C_API sk_shader_t* sk_shader_new_perlin_noise_improved_noise(float baseFrequencyX, float baseFrequencyY, int numOctaves, float z);

SK_C_PLUS_PLUS_END_GUARD

Expand Down
7 changes: 7 additions & 0 deletions include/c/sk_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@ typedef uint32_t sk_pmcolor_t;
#define sk_color_get_g(c) (((c) >> 8) & 0xFF)
#define sk_color_get_b(c) (((c) >> 0) & 0xFF)

typedef struct sk_color4f_t {
float fR;
float fG;
float fB;
float fA;
} sk_color4f_t;

typedef enum {
UNKNOWN_SK_COLORTYPE = 0,
ALPHA_8_SK_COLORTYPE,
Expand Down
17 changes: 17 additions & 0 deletions src/c/sk_colorspace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

#include "sk_types_priv.h"

// sk_colorspace_t

void sk_colorspace_unref(sk_colorspace_t* cColorSpace) {
SkSafeUnref(AsColorSpace(cColorSpace));
}
Expand Down Expand Up @@ -105,3 +107,18 @@ float sk_colorspace_transfer_fn_transform(const sk_colorspace_transfer_fn_t* tra
SkColorSpaceTransferFn fn = *AsColorSpaceTransferFn(transfer);
return fn(x);
}


// sk_color4f_t

sk_color_t sk_color4f_to_color(const sk_color4f_t* color4f) {
return AsColor4f(color4f)->toSkColor();
}

void sk_color4f_from_color(sk_color_t color, sk_color4f_t* color4f) {
*color4f = ToColor4f(SkColor4f::FromColor(color));
}

void sk_color4f_pin(const sk_color4f_t* color4f, sk_color4f_t* pinned) {
*pinned = ToColor4f(AsColor4f(color4f)->pin());
}
6 changes: 5 additions & 1 deletion src/c/sk_pixmap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,14 @@ bool sk_pixmap_extract_subset(const sk_pixmap_t* cpixmap, sk_pixmap_t* result, c
return AsPixmap(cpixmap)->extractSubset(AsPixmap(result), *AsIRect(subset));
}

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

bool sk_pixmap_erase_color4f(const sk_pixmap_t* cpixmap, const sk_color4f_t* color, const sk_irect_t* subset) {
return AsPixmap(cpixmap)->erase(*AsColor4f(color), AsIRect(subset));
}

sk_color_t sk_color_unpremultiply(const sk_pmcolor_t pmcolor) {
return SkUnPreMultiply::PMColorToColor(pmcolor);
}
Expand Down
Loading