{
if (!mLayerData->asset()) return;
- VBrush brush(mLayerData->asset()->bitmap());
+ mTexture.mBitmap = mLayerData->asset()->bitmap();
+ VBrush brush(&mTexture);
mRenderNode.setBrush(brush);
}
path.transform(combinedMatrix());
mRenderNode.mFlag |= VDrawable::DirtyState::Path;
mRenderNode.mPath = path;
- mRenderNode.mBrush.setMatrix(combinedMatrix());
+ mTexture.mMatrix = combinedMatrix();
}
if (flag() & DirtyFlagBit::Alpha) {
void renderList(std::vector<VDrawable *> &list) final;
private:
LOTDrawable mRenderNode;
+ VTexture mTexture;
};
class LOTMaskItem
lotDrawable->sync();
lotDrawable->mCNode->mImageInfo.data =
- lotDrawable->mBrush.mTexture.data();
+ lotDrawable->mBrush.mTexture->mBitmap.data();
lotDrawable->mCNode->mImageInfo.width =
- int(lotDrawable->mBrush.mTexture.width());
+ int(lotDrawable->mBrush.mTexture->mBitmap.width());
lotDrawable->mCNode->mImageInfo.height =
- int(lotDrawable->mBrush.mTexture.height());
+ int(lotDrawable->mBrush.mTexture->mBitmap.height());
lotDrawable->mCNode->mImageInfo.mMatrix.m11 = combinedMatrix().m_11();
lotDrawable->mCNode->mImageInfo.mMatrix.m12 = combinedMatrix().m_12();
}
}
-VBrush::VBrush(const VBitmap &texture)
+VBrush::VBrush(const VTexture *texture):mType(VBrush::Type::Texture), mTexture(texture)
{
- if (!texture.valid()) return;
-
- mType = VBrush::Type::Texture;
- mTexture = texture;
-}
-
-void VBrush::setMatrix(const VMatrix &m)
-{
- mMatrix = m;
}
V_END_NAMESPACE
VMatrix mMatrix;
};
+struct VTexture {
+ VBitmap mBitmap;
+ VMatrix mMatrix;
+};
+
class VBrush {
public:
enum class Type { NoBrush, Solid, LinearGradient, RadialGradient, Texture };
- VBrush() = default;
+ VBrush():mType(Type::NoBrush),mColor(){};
explicit VBrush(const VColor &color);
explicit VBrush(const VGradient *gradient);
explicit VBrush(uchar r, uchar g, uchar b, uchar a);
- explicit VBrush(const VBitmap &texture);
+ explicit VBrush(const VTexture *texture);
inline VBrush::Type type() const { return mType; }
- void setMatrix(const VMatrix &m);
public:
VBrush::Type mType{Type::NoBrush};
- VColor mColor;
- const VGradient *mGradient{nullptr};
- VBitmap mTexture;
- VMatrix mMatrix;
+ union {
+ VColor mColor{};
+ const VGradient *mGradient;
+ const VTexture *mTexture;
+ };
};
V_END_NAMESPACE
case VBrush::Type::Texture: {
mType = VSpanData::Type::Texture;
initTexture(
- &brush.mTexture, 255, VBitmapData::Plain,
- brush.mTexture.rect());
- setupMatrix(brush.mMatrix);
+ &brush.mTexture->mBitmap, 255, VBitmapData::Plain,
+ brush.mTexture->mBitmap.rect());
+ setupMatrix(brush.mTexture->mMatrix);
break;
}
default: