1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGPaint.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "include/private/SkTPin.h" 11cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGRenderEffect.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_cinamespace sksg { 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ci// Paint nodes don't generate damage on their own, but via their aggregation ancestor Draw nodes. 16cb93a386Sopenharmony_ciPaintNode::PaintNode() : INHERITED(kBubbleDamage_Trait) {} 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciSkPaint PaintNode::makePaint() const { 19cb93a386Sopenharmony_ci SkASSERT(!this->hasInval()); 20cb93a386Sopenharmony_ci 21cb93a386Sopenharmony_ci SkPaint paint; 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ci paint.setAntiAlias(fAntiAlias); 24cb93a386Sopenharmony_ci paint.setBlendMode(fBlendMode); 25cb93a386Sopenharmony_ci paint.setStyle(fStyle); 26cb93a386Sopenharmony_ci paint.setStrokeWidth(fStrokeWidth); 27cb93a386Sopenharmony_ci paint.setStrokeMiter(fStrokeMiter); 28cb93a386Sopenharmony_ci paint.setStrokeJoin(fStrokeJoin); 29cb93a386Sopenharmony_ci paint.setStrokeCap(fStrokeCap); 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ci this->onApplyToPaint(&paint); 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci // Compose opacity on top of the subclass value. 34cb93a386Sopenharmony_ci paint.setAlpha(SkScalarRoundToInt(paint.getAlpha() * SkTPin<SkScalar>(fOpacity, 0, 1))); 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci return paint; 37cb93a386Sopenharmony_ci} 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_cisk_sp<Color> Color::Make(SkColor c) { 40cb93a386Sopenharmony_ci return sk_sp<Color>(new Color(c)); 41cb93a386Sopenharmony_ci} 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ciColor::Color(SkColor c) : fColor(c) {} 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ciSkRect Color::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { 46cb93a386Sopenharmony_ci SkASSERT(this->hasInval()); 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci return SkRect::MakeEmpty(); 49cb93a386Sopenharmony_ci} 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_civoid Color::onApplyToPaint(SkPaint* paint) const { 52cb93a386Sopenharmony_ci paint->setColor(fColor); 53cb93a386Sopenharmony_ci} 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_cisk_sp<ShaderPaint> ShaderPaint::Make(sk_sp<Shader> sh) { 56cb93a386Sopenharmony_ci return sh ? sk_sp<ShaderPaint>(new ShaderPaint(std::move(sh))) 57cb93a386Sopenharmony_ci : nullptr; 58cb93a386Sopenharmony_ci} 59cb93a386Sopenharmony_ci 60cb93a386Sopenharmony_ciShaderPaint::ShaderPaint(sk_sp<Shader> sh) 61cb93a386Sopenharmony_ci : fShader(std::move(sh)) { 62cb93a386Sopenharmony_ci this->observeInval(fShader); 63cb93a386Sopenharmony_ci} 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_ciShaderPaint::~ShaderPaint() { 66cb93a386Sopenharmony_ci this->unobserveInval(fShader); 67cb93a386Sopenharmony_ci} 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_ciSkRect ShaderPaint::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { 70cb93a386Sopenharmony_ci SkASSERT(this->hasInval()); 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_ci return fShader->revalidate(ic, ctm); 73cb93a386Sopenharmony_ci} 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_civoid ShaderPaint::onApplyToPaint(SkPaint* paint) const { 76cb93a386Sopenharmony_ci paint->setShader(fShader->getShader()); 77cb93a386Sopenharmony_ci} 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ci} // namespace sksg 80