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