/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can * be found in the LICENSE file. * */ // // // #pragma once // // // #include // // // #if 1 typedef float skc_transform_float_t; #define SKC_TRANSFORM_FLOAT_SUFFIX f #else typedef double skc_transform_float_t; #define SKC_TRANSFORM_FLOAT_SUFFIX #endif // // // struct skc_transform_stack; // // // struct skc_transform_stack * skc_transform_stack_create(const uint32_t size); void skc_transform_stack_release(struct skc_transform_stack * const ts); // // // uint32_t skc_transform_stack_save(struct skc_transform_stack * const ts); void skc_transform_stack_restore(struct skc_transform_stack * const ts, uint32_t const restore); // // // skc_transform_float_t * skc_transform_stack_top_transform(struct skc_transform_stack * const ts); skc_transform_weakref_t * skc_transform_stack_top_weakref(struct skc_transform_stack * const ts); // // // void skc_transform_stack_drop(struct skc_transform_stack * const ts); void skc_transform_stack_dup(struct skc_transform_stack * const ts); // // // void skc_transform_stack_transform_affine(struct skc_transform_stack * const ts, skc_transform_float_t const x_pre, skc_transform_float_t const y_pre, skc_transform_float_t * const x_post, skc_transform_float_t * const y_post); // // // void skc_transform_stack_push_matrix(struct skc_transform_stack * const ts, skc_transform_float_t const sx, skc_transform_float_t const shx, skc_transform_float_t const tx, skc_transform_float_t const shy, skc_transform_float_t const sy, skc_transform_float_t const ty, skc_transform_float_t const w0, skc_transform_float_t const w1, skc_transform_float_t const w2); void skc_transform_stack_push_identity(struct skc_transform_stack * const ts); void skc_transform_stack_push_affine(struct skc_transform_stack * const ts, skc_transform_float_t const sx, skc_transform_float_t const shx, skc_transform_float_t const tx, skc_transform_float_t const shy, skc_transform_float_t const sy, skc_transform_float_t const ty); void skc_transform_stack_push_translate(struct skc_transform_stack * const ts, skc_transform_float_t const tx, skc_transform_float_t const ty); void skc_transform_stack_push_scale(struct skc_transform_stack * const ts, skc_transform_float_t const sx, skc_transform_float_t const sy); void skc_transform_stack_push_shear(struct skc_transform_stack * const ts, skc_transform_float_t const shx, skc_transform_float_t const shy); void skc_transform_stack_push_skew_x(struct skc_transform_stack * const ts, skc_transform_float_t const theta); void skc_transform_stack_push_skew_y(struct skc_transform_stack * const ts, skc_transform_float_t const theta); void skc_transform_stack_push_rotate(struct skc_transform_stack * const ts, skc_transform_float_t const theta); void skc_transform_stack_push_rotate_xy2(struct skc_transform_stack * const ts, skc_transform_float_t const theta, skc_transform_float_t const cx, skc_transform_float_t const cy, skc_transform_float_t const tx, skc_transform_float_t const ty); void skc_transform_stack_push_rotate_xy(struct skc_transform_stack * const ts, skc_transform_float_t const theta, skc_transform_float_t const cx, skc_transform_float_t const cy); void skc_transform_stack_push_rotate_scale_xy(struct skc_transform_stack * const ts, skc_transform_float_t const theta, skc_transform_float_t const sx, skc_transform_float_t const sy, skc_transform_float_t const cx, skc_transform_float_t const cy); // // Quadrilateral coordinates are skc_transform_float_t2 structs: // // float2[4] = { xy0, xy1, xy2, xy3 } // // -or- // // float[8] = { x0, y0, x1, y1, x2, y2, x3, y3 }; // bool skc_transform_stack_push_quad_to_unit(struct skc_transform_stack * const ts, float const quad_src[8]); bool skc_transform_stack_push_unit_to_quad(struct skc_transform_stack * const ts, float const quad_dst[8]); bool skc_transform_stack_push_rect_to_quad(struct skc_transform_stack * const ts, float const x0, float const y0, float const x1, float const y1, float const quad_dst[8]); bool skc_transform_stack_push_quad_to_quad(struct skc_transform_stack * const ts, float const quad_src[8], float const quad_dst[8]); // // // void skc_transform_stack_concat(struct skc_transform_stack * const ts); // // //