17777dab0Sopenharmony_ci/*
27777dab0Sopenharmony_ci * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
37777dab0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47777dab0Sopenharmony_ci * you may not use this file except in compliance with the License.
57777dab0Sopenharmony_ci * You may obtain a copy of the License at
67777dab0Sopenharmony_ci *
77777dab0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87777dab0Sopenharmony_ci *
97777dab0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107777dab0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117777dab0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127777dab0Sopenharmony_ci * See the License for the specific language governing permissions and
137777dab0Sopenharmony_ci * limitations under the License.
147777dab0Sopenharmony_ci */
157777dab0Sopenharmony_ci
167777dab0Sopenharmony_ci#ifndef C_INCLUDE_DRAWING_MATRIX_H
177777dab0Sopenharmony_ci#define C_INCLUDE_DRAWING_MATRIX_H
187777dab0Sopenharmony_ci
197777dab0Sopenharmony_ci/**
207777dab0Sopenharmony_ci * @addtogroup Drawing
217777dab0Sopenharmony_ci * @{
227777dab0Sopenharmony_ci *
237777dab0Sopenharmony_ci * @brief Provides functions such as 2D graphics rendering, text drawing, and image display.
247777dab0Sopenharmony_ci *
257777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
267777dab0Sopenharmony_ci *
277777dab0Sopenharmony_ci * @since 11
287777dab0Sopenharmony_ci * @version 1.0
297777dab0Sopenharmony_ci */
307777dab0Sopenharmony_ci
317777dab0Sopenharmony_ci/**
327777dab0Sopenharmony_ci * @file drawing_matrix.h
337777dab0Sopenharmony_ci *
347777dab0Sopenharmony_ci * @brief Declares functions related to the <b>matrix</b> object in the drawing module.
357777dab0Sopenharmony_ci *
367777dab0Sopenharmony_ci * @kit ArkGraphics2D
377777dab0Sopenharmony_ci * @library libnative_drawing.so
387777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
397777dab0Sopenharmony_ci * @since 11
407777dab0Sopenharmony_ci * @version 1.0
417777dab0Sopenharmony_ci */
427777dab0Sopenharmony_ci
437777dab0Sopenharmony_ci#include "drawing_error_code.h"
447777dab0Sopenharmony_ci#include "drawing_types.h"
457777dab0Sopenharmony_ci
467777dab0Sopenharmony_ci#ifdef __cplusplus
477777dab0Sopenharmony_ciextern "C" {
487777dab0Sopenharmony_ci#endif
497777dab0Sopenharmony_ci
507777dab0Sopenharmony_ci/**
517777dab0Sopenharmony_ci * @brief Creates an <b>OH_Drawing_Matrix</b> object.
527777dab0Sopenharmony_ci *
537777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
547777dab0Sopenharmony_ci * @return Returns the pointer to the <b>OH_Drawing_Matrix</b> object created.
557777dab0Sopenharmony_ci * @since 11
567777dab0Sopenharmony_ci * @version 1.0
577777dab0Sopenharmony_ci */
587777dab0Sopenharmony_ciOH_Drawing_Matrix* OH_Drawing_MatrixCreate(void);
597777dab0Sopenharmony_ci
607777dab0Sopenharmony_ci/**
617777dab0Sopenharmony_ci * @brief Creates an <b>OH_Drawing_Matrix</b> object with rotation. Sets matrix to
627777dab0Sopenharmony_ci * rotate by degrees about a pivot point at (px, py).
637777dab0Sopenharmony_ci *
647777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
657777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
667777dab0Sopenharmony_ci * @param deg  angle of axes relative to upright axes
677777dab0Sopenharmony_ci * @param x  pivot on x-axis.
687777dab0Sopenharmony_ci * @param y  pivot on y-axis.
697777dab0Sopenharmony_ci * @since 12
707777dab0Sopenharmony_ci * @version 1.0
717777dab0Sopenharmony_ci */
727777dab0Sopenharmony_ciOH_Drawing_Matrix* OH_Drawing_MatrixCreateRotation(float deg, float x, float y);
737777dab0Sopenharmony_ci
747777dab0Sopenharmony_ci/**
757777dab0Sopenharmony_ci * @brief Creates an <b>OH_Drawing_Matrix</b> object with scale. Sets matrix to scale
767777dab0Sopenharmony_ci * by sx and sy, about a pivot point at (px, py).
777777dab0Sopenharmony_ci *
787777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
797777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
807777dab0Sopenharmony_ci * @param sx  horizontal scale factor.
817777dab0Sopenharmony_ci * @param sy  vertical scale factor.
827777dab0Sopenharmony_ci * @param px  pivot on x-axis.
837777dab0Sopenharmony_ci * @param py  pivot on y-axis.
847777dab0Sopenharmony_ci * @return Returns the pointer to the <b>OH_Drawing_Matrix</b> object created.
857777dab0Sopenharmony_ci * @since 12
867777dab0Sopenharmony_ci * @version 1.0
877777dab0Sopenharmony_ci */
887777dab0Sopenharmony_ciOH_Drawing_Matrix* OH_Drawing_MatrixCreateScale(float sx, float sy, float px, float py);
897777dab0Sopenharmony_ci
907777dab0Sopenharmony_ci/**
917777dab0Sopenharmony_ci * @brief Creates an <b>OH_Drawing_Matrix</b> object with translation.
927777dab0Sopenharmony_ci *
937777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
947777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
957777dab0Sopenharmony_ci * @param dx  horizontal translation.
967777dab0Sopenharmony_ci * @param dy  vertical translation.
977777dab0Sopenharmony_ci * @return Returns the pointer to the <b>OH_Drawing_Matrix</b> object created.
987777dab0Sopenharmony_ci * @since 12
997777dab0Sopenharmony_ci * @version 1.0
1007777dab0Sopenharmony_ci */
1017777dab0Sopenharmony_ciOH_Drawing_Matrix* OH_Drawing_MatrixCreateTranslation(float dx, float dy);
1027777dab0Sopenharmony_ci
1037777dab0Sopenharmony_ci/**
1047777dab0Sopenharmony_ci * @brief Sets the params for a matrix.
1057777dab0Sopenharmony_ci *
1067777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
1077777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
1087777dab0Sopenharmony_ci * @param scaleX  horizontal scale factor to store
1097777dab0Sopenharmony_ci * @param skewX   horizontal skew factor to store
1107777dab0Sopenharmony_ci * @param transX  horizontal translation to store
1117777dab0Sopenharmony_ci * @param skewY   vertical skew factor to store
1127777dab0Sopenharmony_ci * @param scaleY  vertical scale factor to store
1137777dab0Sopenharmony_ci * @param transY  vertical translation to store
1147777dab0Sopenharmony_ci * @param persp0  input x-axis values perspective factor to store
1157777dab0Sopenharmony_ci * @param persp1  input y-axis values perspective factor to store
1167777dab0Sopenharmony_ci * @param persp2  perspective scale factor to store
1177777dab0Sopenharmony_ci * @since 11
1187777dab0Sopenharmony_ci * @version 1.0
1197777dab0Sopenharmony_ci */
1207777dab0Sopenharmony_civoid OH_Drawing_MatrixSetMatrix(OH_Drawing_Matrix*, float scaleX, float skewX, float transX,
1217777dab0Sopenharmony_ci    float skewY, float scaleY, float transY, float persp0, float persp1, float persp2);
1227777dab0Sopenharmony_ci
1237777dab0Sopenharmony_ci/**
1247777dab0Sopenharmony_ci * @brief Enumerates of scale to fit flags, how matrix is constructed to map one rect to another.
1257777dab0Sopenharmony_ci *
1267777dab0Sopenharmony_ci * @since 12
1277777dab0Sopenharmony_ci * @version 1.0
1287777dab0Sopenharmony_ci */
1297777dab0Sopenharmony_citypedef enum {
1307777dab0Sopenharmony_ci    /**
1317777dab0Sopenharmony_ci     * Scales in x and y to fill destination rect.
1327777dab0Sopenharmony_ci     */
1337777dab0Sopenharmony_ci    SCALE_TO_FIT_FILL,
1347777dab0Sopenharmony_ci    /**
1357777dab0Sopenharmony_ci     * Scales and aligns to left and top.
1367777dab0Sopenharmony_ci     */
1377777dab0Sopenharmony_ci    SCALE_TO_FIT_START,
1387777dab0Sopenharmony_ci    /**
1397777dab0Sopenharmony_ci     * Scales and aligns to center.
1407777dab0Sopenharmony_ci     */
1417777dab0Sopenharmony_ci    SCALE_TO_FIT_CENTER,
1427777dab0Sopenharmony_ci    /**
1437777dab0Sopenharmony_ci     * Scales and aligns to right and bottom.
1447777dab0Sopenharmony_ci     */
1457777dab0Sopenharmony_ci    SCALE_TO_FIT_END,
1467777dab0Sopenharmony_ci} OH_Drawing_ScaleToFit;
1477777dab0Sopenharmony_ci
1487777dab0Sopenharmony_ci/**
1497777dab0Sopenharmony_ci * @brief Sets matrix to scale and translate src rect to dst rect.
1507777dab0Sopenharmony_ci *
1517777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
1527777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
1537777dab0Sopenharmony_ci * @param src Indicates the pointer to an <b>OH_Drawing_Rect</b> object rect to map from.
1547777dab0Sopenharmony_ci * @param dst Indicates the pointer to an <b>OH_Drawing_Rect</b> object rect to map to.
1557777dab0Sopenharmony_ci * @param stf Scales to fit enum method.
1567777dab0Sopenharmony_ci * @return Returns true if dst is empty, and sets matrix to:
1577777dab0Sopenharmony_ci *         | 0 0 0 |
1587777dab0Sopenharmony_ci *         | 0 0 0 |
1597777dab0Sopenharmony_ci *         | 0 0 1 |
1607777dab0Sopenharmony_ci *
1617777dab0Sopenharmony_ci * @since 12
1627777dab0Sopenharmony_ci * @version 1.0
1637777dab0Sopenharmony_ci */
1647777dab0Sopenharmony_cibool OH_Drawing_MatrixSetRectToRect(OH_Drawing_Matrix*, const OH_Drawing_Rect* src,
1657777dab0Sopenharmony_ci    const OH_Drawing_Rect* dst, OH_Drawing_ScaleToFit stf);
1667777dab0Sopenharmony_ci
1677777dab0Sopenharmony_ci/**
1687777dab0Sopenharmony_ci * @brief Sets matrix to matrix multiplied by matrix constructed from rotating by degrees
1697777dab0Sopenharmony_ci * about pivot point(px, py), positive degrees rotates clockwise.
1707777dab0Sopenharmony_ci *        Given:
1717777dab0Sopenharmony_ci *
1727777dab0Sopenharmony_ci *                     | A B C |                        | c -s dx |
1737777dab0Sopenharmony_ci *            Matrix = | D E F |,  R(degrees, px, py) = | s  c dy |
1747777dab0Sopenharmony_ci *                     | G H I |                        | 0  0  1 |
1757777dab0Sopenharmony_ci *
1767777dab0Sopenharmony_ci *        where:
1777777dab0Sopenharmony_ci *
1787777dab0Sopenharmony_ci *            c  = cos(degrees)
1797777dab0Sopenharmony_ci *            s  = sin(degrees)
1807777dab0Sopenharmony_ci *            dx =  s * py + (1 - c) * px
1817777dab0Sopenharmony_ci *            dy = -s * px + (1 - c) * py
1827777dab0Sopenharmony_ci *
1837777dab0Sopenharmony_ci *        sets Matrix to:
1847777dab0Sopenharmony_ci *
1857777dab0Sopenharmony_ci *                                          | A B C | | c -s dx |   | Ac+Bs -As+Bc A*dx+B*dy+C |
1867777dab0Sopenharmony_ci *            Matrix * R(degrees, px, py) = | D E F | | s  c dy | = | Dc+Es -Ds+Ec D*dx+E*dy+F |
1877777dab0Sopenharmony_ci *                                          | G H I | | 0  0  1 |   | Gc+Hs -Gs+Hc G*dx+H*dy+I |
1887777dab0Sopenharmony_ci *
1897777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
1907777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
1917777dab0Sopenharmony_ci * @param degree Indicates the angle of axes relative to upright axes.
1927777dab0Sopenharmony_ci * @param px Indicates the pivot on x-axis.
1937777dab0Sopenharmony_ci * @param py Indicates the pivot on y-axis.
1947777dab0Sopenharmony_ci * @since 12
1957777dab0Sopenharmony_ci * @version 1.0
1967777dab0Sopenharmony_ci */
1977777dab0Sopenharmony_civoid OH_Drawing_MatrixPreRotate(OH_Drawing_Matrix*, float degree, float px, float py);
1987777dab0Sopenharmony_ci
1997777dab0Sopenharmony_ci/**
2007777dab0Sopenharmony_ci * @brief Sets matrix to forward scale by sx and sy, about a pivot point at (px, py).
2017777dab0Sopenharmony_ci *        Given:
2027777dab0Sopenharmony_ci *
2037777dab0Sopenharmony_ci *                    | A B C |                       | sx  0 dx |
2047777dab0Sopenharmony_ci *            Matrix =| D E F |,  S(sx, sy, px, py) = |  0 sy dy |
2057777dab0Sopenharmony_ci *                    | G H I |                       |  0  0  1 |
2067777dab0Sopenharmony_ci *
2077777dab0Sopenharmony_ci *        where:
2087777dab0Sopenharmony_ci *
2097777dab0Sopenharmony_ci *            dx = px - sx * px
2107777dab0Sopenharmony_ci *            dy = py - sy * py
2117777dab0Sopenharmony_ci *
2127777dab0Sopenharmony_ci *        sets Matrix to:
2137777dab0Sopenharmony_ci *
2147777dab0Sopenharmony_ci *                                         | A B C | | sx  0 dx |   | A*sx B*sy A*dx+B*dy+C |
2157777dab0Sopenharmony_ci *            Matrix * S(sx, sy, px, py) = | D E F | |  0 sy dy | = | D*sx E*sy D*dx+E*dy+F |
2167777dab0Sopenharmony_ci *                                         | G H I | |  0  0  1 |   | G*sx H*sy G*dx+H*dy+I |
2177777dab0Sopenharmony_ci *
2187777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
2197777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
2207777dab0Sopenharmony_ci * @param sx Horizontal scale factor.
2217777dab0Sopenharmony_ci * @param sy Vertical scale factor.
2227777dab0Sopenharmony_ci * @param px Pivot on x-axis.
2237777dab0Sopenharmony_ci * @param py Pivot on y-axis.
2247777dab0Sopenharmony_ci * @since 12
2257777dab0Sopenharmony_ci * @version 1.0
2267777dab0Sopenharmony_ci */
2277777dab0Sopenharmony_civoid OH_Drawing_MatrixPreScale(OH_Drawing_Matrix*, float sx, float sy, float px, float py);
2287777dab0Sopenharmony_ci
2297777dab0Sopenharmony_ci/**
2307777dab0Sopenharmony_ci * @brief Sets forward matrix to translate by dx and dy.
2317777dab0Sopenharmony_ci *        Given:
2327777dab0Sopenharmony_ci *                     | A B C |               | 1 0 dx |
2337777dab0Sopenharmony_ci *            Matrix = | D E F |,  T(dx, dy) = | 0 1 dy |
2347777dab0Sopenharmony_ci *                     | G H I |               | 0 0  1 |
2357777dab0Sopenharmony_ci *        sets Matrix to:
2367777dab0Sopenharmony_ci *                                 | A B C | | 1 0 dx |   | A B A*dx+B*dy+C |
2377777dab0Sopenharmony_ci *            Matrix * T(dx, dy) = | D E F | | 0 1 dy | = | D E D*dx+E*dy+F |
2387777dab0Sopenharmony_ci *                                 | G H I | | 0 0  1 |   | G H G*dx+H*dy+I |
2397777dab0Sopenharmony_ci *
2407777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
2417777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
2427777dab0Sopenharmony_ci * @param dx Indicates the horizontal translation.
2437777dab0Sopenharmony_ci * @param dy Indicates the vertical translation.
2447777dab0Sopenharmony_ci * @since 12
2457777dab0Sopenharmony_ci * @version 1.0
2467777dab0Sopenharmony_ci */
2477777dab0Sopenharmony_civoid OH_Drawing_MatrixPreTranslate(OH_Drawing_Matrix*, float dx, float dy);
2487777dab0Sopenharmony_ci
2497777dab0Sopenharmony_ci/**
2507777dab0Sopenharmony_ci * @brief Sets matrix to matrix constructed from rotating by degrees about pivot point(px, py),
2517777dab0Sopenharmony_ci * multiplied by matrix, positive degrees rotates clockwise.
2527777dab0Sopenharmony_ci *        Given:
2537777dab0Sopenharmony_ci *
2547777dab0Sopenharmony_ci *                     | J K L |                        | c -s dx |
2557777dab0Sopenharmony_ci *            Matrix = | M N O |,  R(degrees, px, py) = | s  c dy |
2567777dab0Sopenharmony_ci *                     | P Q R |                        | 0  0  1 |
2577777dab0Sopenharmony_ci *
2587777dab0Sopenharmony_ci *        where:
2597777dab0Sopenharmony_ci *
2607777dab0Sopenharmony_ci *            c  = cos(degrees)
2617777dab0Sopenharmony_ci *            s  = sin(degrees)
2627777dab0Sopenharmony_ci *            dx =  s * py + (1 - c) * px
2637777dab0Sopenharmony_ci *            dy = -s * px + (1 - c) * py
2647777dab0Sopenharmony_ci *
2657777dab0Sopenharmony_ci *        sets Matrix to:
2667777dab0Sopenharmony_ci *
2677777dab0Sopenharmony_ci *                                          |c -s dx| |J K L|   |cJ-sM+dx*P cK-sN+dx*Q cL-sO+dx+R|
2687777dab0Sopenharmony_ci *            R(degrees, px, py) * Matrix = |s  c dy| |M N O| = |sJ+cM+dy*P sK+cN+dy*Q sL+cO+dy*R|
2697777dab0Sopenharmony_ci *                                          |0  0  1| |P Q R|   |         P          Q          R|
2707777dab0Sopenharmony_ci *
2717777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
2727777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
2737777dab0Sopenharmony_ci * @param degree Indicates the angle of axes relative to upright axes.
2747777dab0Sopenharmony_ci * @param px Indicates the pivot on x-axis.
2757777dab0Sopenharmony_ci * @param py Indicates the pivot on y-axis.
2767777dab0Sopenharmony_ci * @since 12
2777777dab0Sopenharmony_ci * @version 1.0
2787777dab0Sopenharmony_ci */
2797777dab0Sopenharmony_civoid OH_Drawing_MatrixPostRotate(OH_Drawing_Matrix*, float degree, float px, float py);
2807777dab0Sopenharmony_ci
2817777dab0Sopenharmony_ci/**
2827777dab0Sopenharmony_ci * @brief Sets matrix to backward scale by sx and sy, about a pivot point at (px, py).
2837777dab0Sopenharmony_ci *        Given:
2847777dab0Sopenharmony_ci *                     | J K L |                       | sx  0 dx |
2857777dab0Sopenharmony_ci *            Matrix = | M N O |,  S(sx, sy, px, py) = |  0 sy dy |
2867777dab0Sopenharmony_ci *                     | P Q R |                       |  0  0  1 |
2877777dab0Sopenharmony_ci *        where:
2887777dab0Sopenharmony_ci *            dx = px - sx * px
2897777dab0Sopenharmony_ci *            dy = py - sy * py
2907777dab0Sopenharmony_ci *        sets Matrix to:
2917777dab0Sopenharmony_ci *                                         | sx  0 dx | | J K L |   | sx*J+dx*P sx*K+dx*Q sx*L+dx+R |
2927777dab0Sopenharmony_ci *            S(sx, sy, px, py) * Matrix = |  0 sy dy | | M N O | = | sy*M+dy*P sy*N+dy*Q sy*O+dy*R |
2937777dab0Sopenharmony_ci *                                         |  0  0  1 | | P Q R |   |         P         Q         R |
2947777dab0Sopenharmony_ci *
2957777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
2967777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
2977777dab0Sopenharmony_ci * @param sx Horizontal scale factor.
2987777dab0Sopenharmony_ci * @param sy Vertical scale factor.
2997777dab0Sopenharmony_ci * @param px Pivot on x-axis.
3007777dab0Sopenharmony_ci * @param py Pivot on y-axis.
3017777dab0Sopenharmony_ci * @since 12
3027777dab0Sopenharmony_ci * @version 1.0
3037777dab0Sopenharmony_ci */
3047777dab0Sopenharmony_civoid OH_Drawing_MatrixPostScale(OH_Drawing_Matrix*, float sx, float sy, float px, float py);
3057777dab0Sopenharmony_ci
3067777dab0Sopenharmony_ci/**
3077777dab0Sopenharmony_ci * @brief Sets backward matrix to translate by (dx, dy).
3087777dab0Sopenharmony_ci *        Given:
3097777dab0Sopenharmony_ci *
3107777dab0Sopenharmony_ci *                     | J K L |               | 1 0 dx |
3117777dab0Sopenharmony_ci *            Matrix = | M N O |,  T(dx, dy) = | 0 1 dy |
3127777dab0Sopenharmony_ci *                     | P Q R |               | 0 0  1 |
3137777dab0Sopenharmony_ci *
3147777dab0Sopenharmony_ci *        sets Matrix to:
3157777dab0Sopenharmony_ci *
3167777dab0Sopenharmony_ci *                                 | 1 0 dx | | J K L |   | J+dx*P K+dx*Q L+dx*R |
3177777dab0Sopenharmony_ci *            T(dx, dy) * Matrix = | 0 1 dy | | M N O | = | M+dy*P N+dy*Q O+dy*R |
3187777dab0Sopenharmony_ci *                                 | 0 0  1 | | P Q R |   |      P      Q      R |
3197777dab0Sopenharmony_ci *
3207777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
3217777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3227777dab0Sopenharmony_ci * @param dx Indicates the horizontal translation.
3237777dab0Sopenharmony_ci * @param dy Indicates the vertical translation.
3247777dab0Sopenharmony_ci * @since 12
3257777dab0Sopenharmony_ci * @version 1.0
3267777dab0Sopenharmony_ci */
3277777dab0Sopenharmony_civoid OH_Drawing_MatrixPostTranslate(OH_Drawing_Matrix*, float dx, float dy);
3287777dab0Sopenharmony_ci
3297777dab0Sopenharmony_ci/**
3307777dab0Sopenharmony_ci * @brief Reset matrix to identity, which has no effect on mapped point, sets matrix to:
3317777dab0Sopenharmony_ci *        | 1 0 0 |
3327777dab0Sopenharmony_ci *        | 0 1 0 |
3337777dab0Sopenharmony_ci *        | 0 0 1 |
3347777dab0Sopenharmony_ci *
3357777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
3367777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3377777dab0Sopenharmony_ci * @since 12
3387777dab0Sopenharmony_ci * @version 1.0
3397777dab0Sopenharmony_ci */
3407777dab0Sopenharmony_civoid OH_Drawing_MatrixReset(OH_Drawing_Matrix*);
3417777dab0Sopenharmony_ci
3427777dab0Sopenharmony_ci/**
3437777dab0Sopenharmony_ci * @brief Sets matrix total to matrix a multiplied by matrix b.
3447777dab0Sopenharmony_ci *       Given:
3457777dab0Sopenharmony_ci *                    | A B C |          | J K L |
3467777dab0Sopenharmony_ci *                a = | D E F |,     b = | M N O |
3477777dab0Sopenharmony_ci *                    | G H I |          | P Q R |
3487777dab0Sopenharmony_ci *       sets Matrix total to:
3497777dab0Sopenharmony_ci *                            | A B C |   | J K L |   | AJ+BM+CP AK+BN+CQ AL+BO+CR |
3507777dab0Sopenharmony_ci *           total = a * b =  | D E F | * | M N O | = | DJ+EM+FP DK+EN+FQ DL+EO+FR |
3517777dab0Sopenharmony_ci *                            | G H I |   | P Q R |   | GJ+HM+IP GK+HN+IQ GL+HO+IR |
3527777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
3537777dab0Sopenharmony_ci * @param total Indicates the pointer to an <b>OH_Drawing_Matrix</b> object that a * b.
3547777dab0Sopenharmony_ci * @param a Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3557777dab0Sopenharmony_ci * @param b Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3567777dab0Sopenharmony_ci * @since 12
3577777dab0Sopenharmony_ci * @version 1.0
3587777dab0Sopenharmony_ci */
3597777dab0Sopenharmony_civoid OH_Drawing_MatrixConcat(OH_Drawing_Matrix* total, const OH_Drawing_Matrix* a,
3607777dab0Sopenharmony_ci    const OH_Drawing_Matrix* b);
3617777dab0Sopenharmony_ci
3627777dab0Sopenharmony_ci/**
3637777dab0Sopenharmony_ci * @brief Gets nine matrix values contained by matrix into array.
3647777dab0Sopenharmony_ci *
3657777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
3667777dab0Sopenharmony_ci * @param matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3677777dab0Sopenharmony_ci * @param value Storages for nine matrix values.
3687777dab0Sopenharmony_ci * @return Returns the error code.
3697777dab0Sopenharmony_ci *         Returns {@link OH_DRAWING_SUCCESS} if the operation is successful.
3707777dab0Sopenharmony_ci *         Returns {@link OH_DRAWING_ERROR_INVALID_PARAMETER} if matrix or value is nullptr.
3717777dab0Sopenharmony_ci * @since 12
3727777dab0Sopenharmony_ci * @version 1.0
3737777dab0Sopenharmony_ci */
3747777dab0Sopenharmony_ciOH_Drawing_ErrorCode OH_Drawing_MatrixGetAll(OH_Drawing_Matrix* matrix, float value[9]);
3757777dab0Sopenharmony_ci
3767777dab0Sopenharmony_ci/**
3777777dab0Sopenharmony_ci * @brief Get one matrix value. Index is between the range of 0-8.
3787777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
3797777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3807777dab0Sopenharmony_ci * @param index one of 0-8.
3817777dab0Sopenharmony_ci * @return Returns value corresponding to index.Returns 0 if out of range.
3827777dab0Sopenharmony_ci * @since 12
3837777dab0Sopenharmony_ci * @version 1.0
3847777dab0Sopenharmony_ci */
3857777dab0Sopenharmony_cifloat OH_Drawing_MatrixGetValue(OH_Drawing_Matrix*, int index);
3867777dab0Sopenharmony_ci
3877777dab0Sopenharmony_ci/**
3887777dab0Sopenharmony_ci * @brief Sets matrix to rotate by degrees about a pivot point at (px, py). The pivot point is unchanged
3897777dab0Sopenharmony_ci * when mapped with matrix. Positive degrees rotates clockwise.
3907777dab0Sopenharmony_ci *
3917777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
3927777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
3937777dab0Sopenharmony_ci * @param degree Indicates the angle of axes relative to upright axes.
3947777dab0Sopenharmony_ci * @param px Indicates the pivot on x-axis.
3957777dab0Sopenharmony_ci * @param py Indicates the pivot on y-axis.
3967777dab0Sopenharmony_ci * @since 12
3977777dab0Sopenharmony_ci * @version 1.0
3987777dab0Sopenharmony_ci */
3997777dab0Sopenharmony_civoid OH_Drawing_MatrixRotate(OH_Drawing_Matrix*, float degree, float px, float py);
4007777dab0Sopenharmony_ci
4017777dab0Sopenharmony_ci/**
4027777dab0Sopenharmony_ci * @brief Sets matrix to translate by (dx, dy)
4037777dab0Sopenharmony_ci *
4047777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4057777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4067777dab0Sopenharmony_ci * @param dx Indicates the horizontal translation.
4077777dab0Sopenharmony_ci * @param dy Indicates the vertical translation.
4087777dab0Sopenharmony_ci * @since 12
4097777dab0Sopenharmony_ci * @version 1.0
4107777dab0Sopenharmony_ci */
4117777dab0Sopenharmony_civoid OH_Drawing_MatrixTranslate(OH_Drawing_Matrix*, float dx, float dy);
4127777dab0Sopenharmony_ci
4137777dab0Sopenharmony_ci/**
4147777dab0Sopenharmony_ci * @brief Sets matrix to scale by sx and sy, about a pivot point at (px, py).
4157777dab0Sopenharmony_ci *
4167777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4177777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4187777dab0Sopenharmony_ci * @param sx Indicates the horizontal scale factor.
4197777dab0Sopenharmony_ci * @param sy Indicates the vertical scale factor.
4207777dab0Sopenharmony_ci * @param px Indicates the pivot on x-axis.
4217777dab0Sopenharmony_ci * @param py Indicates the pivot on y-axis.
4227777dab0Sopenharmony_ci * @since 12
4237777dab0Sopenharmony_ci * @version 1.0
4247777dab0Sopenharmony_ci */
4257777dab0Sopenharmony_civoid OH_Drawing_MatrixScale(OH_Drawing_Matrix*, float sx, float sy, float px, float py);
4267777dab0Sopenharmony_ci
4277777dab0Sopenharmony_ci/**
4287777dab0Sopenharmony_ci * @brief Sets inverse to reciprocal matrix, returning true if matrix can be inverted.
4297777dab0Sopenharmony_ci *
4307777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4317777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4327777dab0Sopenharmony_ci * @param inverse Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4337777dab0Sopenharmony_ci * @return Returns true if the matrix is not nullptr and can be inverted;
4347777dab0Sopenharmony_ci *         returns false if the matrix is nullptr or cannot be inverted.
4357777dab0Sopenharmony_ci * @since 12
4367777dab0Sopenharmony_ci * @version 1.0
4377777dab0Sopenharmony_ci */
4387777dab0Sopenharmony_cibool OH_Drawing_MatrixInvert(OH_Drawing_Matrix*, OH_Drawing_Matrix* inverse);
4397777dab0Sopenharmony_ci
4407777dab0Sopenharmony_ci/**
4417777dab0Sopenharmony_ci * @brief Sets the params of matrix to map src to dst.
4427777dab0Sopenharmony_ci * Count must greater than or equal to zero, and less than or equal to four.
4437777dab0Sopenharmony_ci *
4447777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4457777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4467777dab0Sopenharmony_ci * @param src Points to map from.
4477777dab0Sopenharmony_ci * @param dst Points to map to.
4487777dab0Sopenharmony_ci * @param count Number of point in src and dst.
4497777dab0Sopenharmony_ci * @return Returns true if matrix is constructed successfully.
4507777dab0Sopenharmony_ci * @since 12
4517777dab0Sopenharmony_ci * @version 1.0
4527777dab0Sopenharmony_ci */
4537777dab0Sopenharmony_cibool OH_Drawing_MatrixSetPolyToPoly(OH_Drawing_Matrix*, const OH_Drawing_Point2D* src,
4547777dab0Sopenharmony_ci    const OH_Drawing_Point2D* dst, uint32_t count);
4557777dab0Sopenharmony_ci
4567777dab0Sopenharmony_ci/**
4577777dab0Sopenharmony_ci * @brief Maps the src point array to the dst point array by matrix transformation.
4587777dab0Sopenharmony_ci *
4597777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4607777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4617777dab0Sopenharmony_ci * @param src Points to map from.
4627777dab0Sopenharmony_ci * @param dst Points to map to.
4637777dab0Sopenharmony_ci * @param count Number of point in src and dst.
4647777dab0Sopenharmony_ci * @since 12
4657777dab0Sopenharmony_ci * @version 1.0
4667777dab0Sopenharmony_ci */
4677777dab0Sopenharmony_civoid OH_Drawing_MatrixMapPoints(const OH_Drawing_Matrix*, const OH_Drawing_Point2D* src,
4687777dab0Sopenharmony_ci    OH_Drawing_Point2D* dst, int count);
4697777dab0Sopenharmony_ci
4707777dab0Sopenharmony_ci/**
4717777dab0Sopenharmony_ci * @brief Sets dst to bounds of src corners mapped by matrix transformation.
4727777dab0Sopenharmony_ci *
4737777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4747777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4757777dab0Sopenharmony_ci * @param src Rect to map from.
4767777dab0Sopenharmony_ci * @param dst Rect to map to.
4777777dab0Sopenharmony_ci * @return Returns true if the mapped src is equal to the dst; returns false is not equal.
4787777dab0Sopenharmony_ci * @since 12
4797777dab0Sopenharmony_ci * @version 1.0
4807777dab0Sopenharmony_ci */
4817777dab0Sopenharmony_cibool OH_Drawing_MatrixMapRect(const OH_Drawing_Matrix*, const OH_Drawing_Rect* src, OH_Drawing_Rect* dst);
4827777dab0Sopenharmony_ci
4837777dab0Sopenharmony_ci/**
4847777dab0Sopenharmony_ci * @brief Returns true if the first matrix equals the second matrix.
4857777dab0Sopenharmony_ci *
4867777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
4877777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4887777dab0Sopenharmony_ci * @param other Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
4897777dab0Sopenharmony_ci * @return Returns true if the two matrices are equal; returns false if not equal.
4907777dab0Sopenharmony_ci * @since 12
4917777dab0Sopenharmony_ci * @version 1.0
4927777dab0Sopenharmony_ci */
4937777dab0Sopenharmony_cibool OH_Drawing_MatrixIsEqual(OH_Drawing_Matrix*, OH_Drawing_Matrix* other);
4947777dab0Sopenharmony_ci
4957777dab0Sopenharmony_ci/**
4967777dab0Sopenharmony_ci * @brief Returns true if matrix is identity.
4977777dab0Sopenharmony_ci * Identity matrix is :  | 1 0 0 |
4987777dab0Sopenharmony_ci *                       | 0 1 0 |
4997777dab0Sopenharmony_ci *                       | 0 0 1 |
5007777dab0Sopenharmony_ci *
5017777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
5027777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
5037777dab0Sopenharmony_ci * @return Returns true if matrix is identity; returns false if not identity.
5047777dab0Sopenharmony_ci * @since 12
5057777dab0Sopenharmony_ci * @version 1.0
5067777dab0Sopenharmony_ci */
5077777dab0Sopenharmony_cibool OH_Drawing_MatrixIsIdentity(OH_Drawing_Matrix*);
5087777dab0Sopenharmony_ci
5097777dab0Sopenharmony_ci/**
5107777dab0Sopenharmony_ci * @brief Destroys an <b>OH_Drawing_Matrix</b> object and reclaims the memory occupied by the object.
5117777dab0Sopenharmony_ci *
5127777dab0Sopenharmony_ci * @syscap SystemCapability.Graphic.Graphic2D.NativeDrawing
5137777dab0Sopenharmony_ci * @param OH_Drawing_Matrix Indicates the pointer to an <b>OH_Drawing_Matrix</b> object.
5147777dab0Sopenharmony_ci * @since 11
5157777dab0Sopenharmony_ci * @version 1.0
5167777dab0Sopenharmony_ci */
5177777dab0Sopenharmony_civoid OH_Drawing_MatrixDestroy(OH_Drawing_Matrix*);
5187777dab0Sopenharmony_ci
5197777dab0Sopenharmony_ci#ifdef __cplusplus
5207777dab0Sopenharmony_ci}
5217777dab0Sopenharmony_ci#endif
5227777dab0Sopenharmony_ci/** @} */
5237777dab0Sopenharmony_ci#endif
524