1bafb9395Sopenharmony_ci/* 2bafb9395Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3bafb9395Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4bafb9395Sopenharmony_ci * you may not use this file except in compliance with the License. 5bafb9395Sopenharmony_ci * You may obtain a copy of the License at 6bafb9395Sopenharmony_ci * 7bafb9395Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8bafb9395Sopenharmony_ci * 9bafb9395Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10bafb9395Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11bafb9395Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12bafb9395Sopenharmony_ci * See the License for the specific language governing permissions and 13bafb9395Sopenharmony_ci * limitations under the License. 14bafb9395Sopenharmony_ci */ 15bafb9395Sopenharmony_ci 16bafb9395Sopenharmony_ci#include "gfx_utils/diagram/common/paint.h" 17bafb9395Sopenharmony_cinamespace OHOS { 18bafb9395Sopenharmony_civoid Paint::InitDash(const Paint& paint) 19bafb9395Sopenharmony_ci{ 20bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_DASH_GENERATE_FLAG) && GRAPHIC_ENABLE_DASH_GENERATE_FLAG 21bafb9395Sopenharmony_ci if (isDashMode_ && ndashes_ > 0) { 22bafb9395Sopenharmony_ci dashArray_ = new float[ndashes_]; 23bafb9395Sopenharmony_ci if (dashArray_) { 24bafb9395Sopenharmony_ci if (memset_s(dashArray_, ndashes_ * sizeof(float), 0, ndashes_ * sizeof(float)) != EOF) { 25bafb9395Sopenharmony_ci } 26bafb9395Sopenharmony_ci for (uint32_t i = 0; i < ndashes_; i++) { 27bafb9395Sopenharmony_ci dashArray_[i] = paint.dashArray_[i]; 28bafb9395Sopenharmony_ci } 29bafb9395Sopenharmony_ci } else { 30bafb9395Sopenharmony_ci ndashes_ = 0; 31bafb9395Sopenharmony_ci dashOffset_ = 0; 32bafb9395Sopenharmony_ci isDashMode_ = false; 33bafb9395Sopenharmony_ci } 34bafb9395Sopenharmony_ci } else { 35bafb9395Sopenharmony_ci dashArray_ = nullptr; 36bafb9395Sopenharmony_ci } 37bafb9395Sopenharmony_ci#endif 38bafb9395Sopenharmony_ci} 39bafb9395Sopenharmony_ci 40bafb9395Sopenharmony_ci/* 41bafb9395Sopenharmony_ci * Initialize data members. 42bafb9395Sopenharmony_ci * style_: paint style. 43bafb9395Sopenharmony_ci * fillColor_: Sets the fill color of the pen. 44bafb9395Sopenharmony_ci * strokeColor_: Sets the line color of the pen. 45bafb9395Sopenharmony_ci * opacity_: Set transparency. 46bafb9395Sopenharmony_ci * strokeWidth_: Set lineweight. 47bafb9395Sopenharmony_ci * lineCap_: Set pen cap. 48bafb9395Sopenharmony_ci * lineJoin_: Sets the style at the path connection of the pen. 49bafb9395Sopenharmony_ci * miterLimit_: Sets the spacing limit for sharp corners at path connections. 50bafb9395Sopenharmony_ci * dashOffset: dash Point offset. 51bafb9395Sopenharmony_ci * isDrawDash: Whether to draw dotted line. 52bafb9395Sopenharmony_ci * dashArray: dash Point group. 53bafb9395Sopenharmony_ci * ndashes: Number of dotted lines. 54bafb9395Sopenharmony_ci * globalAlpha: Set element Global alpha. 55bafb9395Sopenharmony_ci * shadowBlurRadius: Sets the shadow blur radius. 56bafb9395Sopenharmony_ci * shadowOffsetX: Sets the abscissa offset of the shadow. 57bafb9395Sopenharmony_ci * shadowOffsetY: Sets the shadow ordinate offset. 58bafb9395Sopenharmony_ci * shadowColor: Set shadow color. 59bafb9395Sopenharmony_ci */ 60bafb9395Sopenharmony_civoid Paint::Init(const Paint& paint) 61bafb9395Sopenharmony_ci{ 62bafb9395Sopenharmony_ci style_ = paint.style_; 63bafb9395Sopenharmony_ci fillColor_ = paint.fillColor_; 64bafb9395Sopenharmony_ci strokeColor_ = paint.strokeColor_; 65bafb9395Sopenharmony_ci strokeWidth_ = paint.strokeWidth_; 66bafb9395Sopenharmony_ci opacity_ = paint.opacity_; 67bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG 68bafb9395Sopenharmony_ci lineCap_ = paint.lineCap_; 69bafb9395Sopenharmony_ci#endif 70bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG 71bafb9395Sopenharmony_ci lineJoin_ = paint.lineJoin_; 72bafb9395Sopenharmony_ci#endif 73bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_DASH_GENERATE_FLAG) && GRAPHIC_ENABLE_DASH_GENERATE_FLAG 74bafb9395Sopenharmony_ci isDashMode_ = paint.isDashMode_; 75bafb9395Sopenharmony_ci dashOffset_ = paint.dashOffset_; 76bafb9395Sopenharmony_ci dashArray_ = paint.dashArray_; 77bafb9395Sopenharmony_ci ndashes_ = paint.ndashes_; 78bafb9395Sopenharmony_ci#endif 79bafb9395Sopenharmony_ci changeFlag_ = paint.changeFlag_; 80bafb9395Sopenharmony_ci scaleRadioX_ = paint.scaleRadioX_; 81bafb9395Sopenharmony_ci scaleRadioY_ = paint.scaleRadioY_; 82bafb9395Sopenharmony_ci translationX_ = paint.translationX_; 83bafb9395Sopenharmony_ci translationY_ = paint.translationY_; 84bafb9395Sopenharmony_ci InitDash(paint); 85bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG 86bafb9395Sopenharmony_ci miterLimit_ = paint.miterLimit_; 87bafb9395Sopenharmony_ci#endif 88bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG 89bafb9395Sopenharmony_ci linearGradientPoint_ = paint.linearGradientPoint_; 90bafb9395Sopenharmony_ci radialGradientPoint_ = paint.radialGradientPoint_; 91bafb9395Sopenharmony_ci stopAndColors_ = paint.stopAndColors_; 92bafb9395Sopenharmony_ci gradientflag_ = paint.gradientflag_; 93bafb9395Sopenharmony_ci#endif 94bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG 95bafb9395Sopenharmony_ci patternRepeat_ = paint.patternRepeat_; 96bafb9395Sopenharmony_ci#endif 97bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG) && GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG 98bafb9395Sopenharmony_ci shadowBlurRadius_ = paint.shadowBlurRadius_; 99bafb9395Sopenharmony_ci shadowOffsetX_ = paint.shadowOffsetX_; 100bafb9395Sopenharmony_ci shadowOffsetY_ = paint.shadowOffsetY_; 101bafb9395Sopenharmony_ci shadowColor_ = paint.shadowColor_; 102bafb9395Sopenharmony_ci haveShadow_ = paint.haveShadow_; 103bafb9395Sopenharmony_ci#endif 104bafb9395Sopenharmony_ci globalAlpha_ = paint.globalAlpha_; 105bafb9395Sopenharmony_ci globalCompositeOperation_ = paint.globalCompositeOperation_; 106bafb9395Sopenharmony_ci rotateAngle_ = paint.rotateAngle_; 107bafb9395Sopenharmony_ci transfrom_ = paint.transfrom_; 108bafb9395Sopenharmony_ci haveComposite_ = paint.haveComposite_; 109bafb9395Sopenharmony_ci} 110bafb9395Sopenharmony_ci 111bafb9395Sopenharmony_civoid Paint::SetStrokeStyle(ColorType color) 112bafb9395Sopenharmony_ci{ 113bafb9395Sopenharmony_ci SetStyle(Paint::STROKE_STYLE); 114bafb9395Sopenharmony_ci SetStrokeColor(color); 115bafb9395Sopenharmony_ci} 116bafb9395Sopenharmony_ci 117bafb9395Sopenharmony_civoid Paint::SetFillStyle(ColorType color) 118bafb9395Sopenharmony_ci{ 119bafb9395Sopenharmony_ci SetStyle(Paint::FILL_STYLE); 120bafb9395Sopenharmony_ci SetFillColor(color); 121bafb9395Sopenharmony_ci} 122bafb9395Sopenharmony_ci 123bafb9395Sopenharmony_civoid Paint::SetStrokeColor(ColorType color) 124bafb9395Sopenharmony_ci{ 125bafb9395Sopenharmony_ci strokeColor_ = color; 126bafb9395Sopenharmony_ci changeFlag_ = true; 127bafb9395Sopenharmony_ci} 128bafb9395Sopenharmony_ci 129bafb9395Sopenharmony_civoid Paint::SetFillColor(ColorType color) 130bafb9395Sopenharmony_ci{ 131bafb9395Sopenharmony_ci fillColor_ = color; 132bafb9395Sopenharmony_ci changeFlag_ = true; 133bafb9395Sopenharmony_ci} 134bafb9395Sopenharmony_ci 135bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG 136bafb9395Sopenharmony_civoid Paint::SetLineCap(LineCap lineCap) 137bafb9395Sopenharmony_ci{ 138bafb9395Sopenharmony_ci lineCap_ = lineCap; 139bafb9395Sopenharmony_ci changeFlag_ = true; 140bafb9395Sopenharmony_ci} 141bafb9395Sopenharmony_ci#endif 142bafb9395Sopenharmony_ci 143bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG 144bafb9395Sopenharmony_civoid Paint::SetLineJoin(LineJoin lineJoin) 145bafb9395Sopenharmony_ci{ 146bafb9395Sopenharmony_ci lineJoin_ = lineJoin; 147bafb9395Sopenharmony_ci changeFlag_ = true; 148bafb9395Sopenharmony_ci} 149bafb9395Sopenharmony_ci#endif 150bafb9395Sopenharmony_ci 151bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG 152bafb9395Sopenharmony_civoid Paint::SetMiterLimit(float miterLimit) 153bafb9395Sopenharmony_ci{ 154bafb9395Sopenharmony_ci miterLimit_ = miterLimit; 155bafb9395Sopenharmony_ci changeFlag_ = true; 156bafb9395Sopenharmony_ci} 157bafb9395Sopenharmony_ci#endif 158bafb9395Sopenharmony_ci 159bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_DASH_GENERATE_FLAG) && GRAPHIC_ENABLE_DASH_GENERATE_FLAG 160bafb9395Sopenharmony_civoid Paint::SetLineDash(float* lineDashs, const uint32_t ndash) 161bafb9395Sopenharmony_ci{ 162bafb9395Sopenharmony_ci ClearLineDash(); 163bafb9395Sopenharmony_ci if (lineDashs == nullptr || ndash == 0) { 164bafb9395Sopenharmony_ci return; 165bafb9395Sopenharmony_ci } 166bafb9395Sopenharmony_ci ndashes_ = ndash; 167bafb9395Sopenharmony_ci isDashMode_ = true; 168bafb9395Sopenharmony_ci dashArray_ = new float[ndashes_]; 169bafb9395Sopenharmony_ci if (dashArray_) { 170bafb9395Sopenharmony_ci if (memset_s(dashArray_, ndashes_ * sizeof(float), 0, ndashes_ * sizeof(float)) != EOF) { 171bafb9395Sopenharmony_ci } 172bafb9395Sopenharmony_ci for (uint32_t iIndex = 0; iIndex < ndashes_; iIndex++) { 173bafb9395Sopenharmony_ci dashArray_[iIndex] = lineDashs[iIndex]; 174bafb9395Sopenharmony_ci } 175bafb9395Sopenharmony_ci } else { 176bafb9395Sopenharmony_ci ndashes_ = 0; 177bafb9395Sopenharmony_ci dashOffset_ = 0; 178bafb9395Sopenharmony_ci isDashMode_ = false; 179bafb9395Sopenharmony_ci } 180bafb9395Sopenharmony_ci changeFlag_ = true; 181bafb9395Sopenharmony_ci} 182bafb9395Sopenharmony_ci 183bafb9395Sopenharmony_civoid Paint::SetLineDashOffset(float offset) 184bafb9395Sopenharmony_ci{ 185bafb9395Sopenharmony_ci dashOffset_ = offset; 186bafb9395Sopenharmony_ci changeFlag_ = true; 187bafb9395Sopenharmony_ci isDashMode_ = true; 188bafb9395Sopenharmony_ci} 189bafb9395Sopenharmony_ci 190bafb9395Sopenharmony_civoid Paint::ClearLineDash(void) 191bafb9395Sopenharmony_ci{ 192bafb9395Sopenharmony_ci dashOffset_ = 0; 193bafb9395Sopenharmony_ci ndashes_ = 0; 194bafb9395Sopenharmony_ci isDashMode_ = false; 195bafb9395Sopenharmony_ci if (dashArray_ != nullptr) { 196bafb9395Sopenharmony_ci delete[] dashArray_; 197bafb9395Sopenharmony_ci dashArray_ = nullptr; 198bafb9395Sopenharmony_ci } 199bafb9395Sopenharmony_ci} 200bafb9395Sopenharmony_ci#endif 201bafb9395Sopenharmony_ci 202bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG 203bafb9395Sopenharmony_civoid Paint::createLinearGradient(float startx, float starty, float endx, float endy) 204bafb9395Sopenharmony_ci{ 205bafb9395Sopenharmony_ci gradientflag_ = Linear; 206bafb9395Sopenharmony_ci linearGradientPoint_.x0 = startx; 207bafb9395Sopenharmony_ci linearGradientPoint_.y0 = starty; 208bafb9395Sopenharmony_ci linearGradientPoint_.x1 = endx; 209bafb9395Sopenharmony_ci linearGradientPoint_.y1 = endy; 210bafb9395Sopenharmony_ci changeFlag_ = true; 211bafb9395Sopenharmony_ci} 212bafb9395Sopenharmony_ci 213bafb9395Sopenharmony_civoid Paint::addColorStop(float stop, ColorType color) 214bafb9395Sopenharmony_ci{ 215bafb9395Sopenharmony_ci StopAndColor stopAndColor; 216bafb9395Sopenharmony_ci stopAndColor.stop = stop; 217bafb9395Sopenharmony_ci stopAndColor.color = color; 218bafb9395Sopenharmony_ci stopAndColors_.PushBack(stopAndColor); 219bafb9395Sopenharmony_ci} 220bafb9395Sopenharmony_ci 221bafb9395Sopenharmony_civoid Paint::createRadialGradient(float start_x, float start_y, float start_r, float end_x, float end_y, float end_r) 222bafb9395Sopenharmony_ci{ 223bafb9395Sopenharmony_ci gradientflag_ = Radial; 224bafb9395Sopenharmony_ci radialGradientPoint_.x0 = start_x; 225bafb9395Sopenharmony_ci radialGradientPoint_.y0 = start_y; 226bafb9395Sopenharmony_ci radialGradientPoint_.r0 = start_r; 227bafb9395Sopenharmony_ci radialGradientPoint_.x1 = end_x; 228bafb9395Sopenharmony_ci radialGradientPoint_.y1 = end_y; 229bafb9395Sopenharmony_ci radialGradientPoint_.r1 = end_r; 230bafb9395Sopenharmony_ci changeFlag_ = true; 231bafb9395Sopenharmony_ci} 232bafb9395Sopenharmony_ci#endif 233bafb9395Sopenharmony_ci 234bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG 235bafb9395Sopenharmony_civoid Paint::CreatePattern(const char* img, PatternRepeatMode patternRepeat) 236bafb9395Sopenharmony_ci{ 237bafb9395Sopenharmony_ci image_ = img; 238bafb9395Sopenharmony_ci patternRepeat_ = patternRepeat; 239bafb9395Sopenharmony_ci changeFlag_ = true; 240bafb9395Sopenharmony_ci} 241bafb9395Sopenharmony_ci#endif 242bafb9395Sopenharmony_ci 243bafb9395Sopenharmony_ci#if defined(GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG) && GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG 244bafb9395Sopenharmony_civoid Paint::SetShadowBlur(uint16_t radius) 245bafb9395Sopenharmony_ci{ 246bafb9395Sopenharmony_ci shadowBlurRadius_ = radius; 247bafb9395Sopenharmony_ci changeFlag_ = true; 248bafb9395Sopenharmony_ci} 249bafb9395Sopenharmony_ci 250bafb9395Sopenharmony_civoid Paint::SetShadowOffsetX(float offset) 251bafb9395Sopenharmony_ci{ 252bafb9395Sopenharmony_ci shadowOffsetX_ = offset; 253bafb9395Sopenharmony_ci changeFlag_ = true; 254bafb9395Sopenharmony_ci} 255bafb9395Sopenharmony_ci 256bafb9395Sopenharmony_civoid Paint::SetShadowOffsetY(float offset) 257bafb9395Sopenharmony_ci{ 258bafb9395Sopenharmony_ci shadowOffsetY_ = offset; 259bafb9395Sopenharmony_ci changeFlag_ = true; 260bafb9395Sopenharmony_ci} 261bafb9395Sopenharmony_ci 262bafb9395Sopenharmony_civoid Paint::SetShadowColor(ColorType color) 263bafb9395Sopenharmony_ci{ 264bafb9395Sopenharmony_ci shadowColor_ = color; 265bafb9395Sopenharmony_ci changeFlag_ = true; 266bafb9395Sopenharmony_ci haveShadow_ = true; 267bafb9395Sopenharmony_ci} 268bafb9395Sopenharmony_ci#endif 269bafb9395Sopenharmony_ci 270bafb9395Sopenharmony_civoid Paint::SetGlobalAlpha(float alphaPercentage) 271bafb9395Sopenharmony_ci{ 272bafb9395Sopenharmony_ci if (alphaPercentage > 1) { 273bafb9395Sopenharmony_ci globalAlpha_ = 1.0; 274bafb9395Sopenharmony_ci return; 275bafb9395Sopenharmony_ci } 276bafb9395Sopenharmony_ci if (alphaPercentage < 0) { 277bafb9395Sopenharmony_ci globalAlpha_ = 0.0; 278bafb9395Sopenharmony_ci return; 279bafb9395Sopenharmony_ci } 280bafb9395Sopenharmony_ci globalAlpha_ = alphaPercentage; 281bafb9395Sopenharmony_ci changeFlag_ = true; 282bafb9395Sopenharmony_ci} 283bafb9395Sopenharmony_ci 284bafb9395Sopenharmony_civoid Paint::SetGlobalCompositeOperation(GlobalCompositeOperation globalCompositeOperation) 285bafb9395Sopenharmony_ci{ 286bafb9395Sopenharmony_ci globalCompositeOperation_ = globalCompositeOperation; 287bafb9395Sopenharmony_ci changeFlag_ = true; 288bafb9395Sopenharmony_ci if (globalCompositeOperation != SOURCE_OVER) { 289bafb9395Sopenharmony_ci haveComposite_ = true; 290bafb9395Sopenharmony_ci } 291bafb9395Sopenharmony_ci} 292bafb9395Sopenharmony_ci 293bafb9395Sopenharmony_civoid Paint::Scale(float scaleX, float scaleY) 294bafb9395Sopenharmony_ci{ 295bafb9395Sopenharmony_ci this->scaleRadioX_ *= scaleX; 296bafb9395Sopenharmony_ci this->scaleRadioY_ *= scaleX; 297bafb9395Sopenharmony_ci if (rotateAngle_ > 0.0f || rotateAngle_ < 0) { 298bafb9395Sopenharmony_ci transfrom_.Rotate(-rotateAngle_ * PI / BOXER); 299bafb9395Sopenharmony_ci transfrom_.Scale(scaleX, scaleY); 300bafb9395Sopenharmony_ci transfrom_.Rotate(rotateAngle_ * PI / BOXER); 301bafb9395Sopenharmony_ci } else { 302bafb9395Sopenharmony_ci transfrom_.Scale(scaleX, scaleY); 303bafb9395Sopenharmony_ci } 304bafb9395Sopenharmony_ci changeFlag_ = true; 305bafb9395Sopenharmony_ci} 306bafb9395Sopenharmony_ci 307bafb9395Sopenharmony_civoid Paint::Rotate(float angle) 308bafb9395Sopenharmony_ci{ 309bafb9395Sopenharmony_ci changeFlag_ = true; 310bafb9395Sopenharmony_ci transfrom_.Rotate(angle * PI / BOXER); 311bafb9395Sopenharmony_ci rotateAngle_ += angle; 312bafb9395Sopenharmony_ci} 313bafb9395Sopenharmony_ci 314bafb9395Sopenharmony_civoid Paint::Rotate(float angle, int16_t x, int16_t y) 315bafb9395Sopenharmony_ci{ 316bafb9395Sopenharmony_ci transfrom_.Translate(-x, -y); 317bafb9395Sopenharmony_ci transfrom_.Rotate(angle * PI / BOXER); 318bafb9395Sopenharmony_ci rotateAngle_ += angle; 319bafb9395Sopenharmony_ci transfrom_.Translate(x, y); 320bafb9395Sopenharmony_ci changeFlag_ = true; 321bafb9395Sopenharmony_ci} 322bafb9395Sopenharmony_ci 323bafb9395Sopenharmony_civoid Paint::Translate(int16_t x, int16_t y) 324bafb9395Sopenharmony_ci{ 325bafb9395Sopenharmony_ci changeFlag_ = true; 326bafb9395Sopenharmony_ci transfrom_.Translate(x, y); 327bafb9395Sopenharmony_ci this->translationX_ += x; 328bafb9395Sopenharmony_ci this->translationY_ += y; 329bafb9395Sopenharmony_ci} 330bafb9395Sopenharmony_ci 331bafb9395Sopenharmony_civoid Paint::SetTransform(float scaleX, float shearX, float shearY, 332bafb9395Sopenharmony_ci float scaleY, int16_t transLateX, int16_t transLateY) 333bafb9395Sopenharmony_ci{ 334bafb9395Sopenharmony_ci transfrom_.Reset(); 335bafb9395Sopenharmony_ci rotateAngle_ = 0; 336bafb9395Sopenharmony_ci Transform(scaleX, shearX, shearY, scaleY, transLateX, transLateY); 337bafb9395Sopenharmony_ci changeFlag_ = true; 338bafb9395Sopenharmony_ci} 339bafb9395Sopenharmony_ci 340bafb9395Sopenharmony_civoid Paint::Transform(float scaleX, float shearX, float shearY, float scaleY, int16_t transLateX, int16_t transLateY) 341bafb9395Sopenharmony_ci{ 342bafb9395Sopenharmony_ci changeFlag_ = true; 343bafb9395Sopenharmony_ci this->translationX_ += transLateX; 344bafb9395Sopenharmony_ci this->translationY_ += transLateY; 345bafb9395Sopenharmony_ci transLateX += transfrom_.GetData()[2]; 346bafb9395Sopenharmony_ci transLateY += transfrom_.GetData()[5]; 347bafb9395Sopenharmony_ci transfrom_.Translate(-transfrom_.GetData()[2], -transfrom_.GetData()[5]); 348bafb9395Sopenharmony_ci Scale(scaleX, scaleY); 349bafb9395Sopenharmony_ci transfrom_.Translate(transLateX, transLateY); 350bafb9395Sopenharmony_ci transfrom_.SetData(1, transfrom_.GetData()[1] + shearX); 351bafb9395Sopenharmony_ci transfrom_.SetData(3, transfrom_.GetData()[3] + shearY); 352bafb9395Sopenharmony_ci} 353bafb9395Sopenharmony_ci} // namespace OHOS