MCPcopy Create free account
hub / github.com/ErrorAtLine0/infinipaint / draw

Method draw

src/CanvasComponents/ImageCanvasComponent.cpp:109–145  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

107}
108
109void ImageCanvasComponent::draw(SkCanvas* canvas, const DrawData& drawData, const std::shared_ptr<void>& predrawData) const {
110 ResourceDisplay* display = drawData.rMan->get_display_data(d.imageID);
111 if(d.editing) {
112 canvas->saveLayerAlphaf(nullptr, 1.0f);
113 display->draw(canvas, drawData, rect_from_points(d.p1, d.p2));
114 canvas->saveLayerAlphaf(nullptr, 1.0f);
115 SkPaint rectPaint;
116 rectPaint.setColor4f(SkColor4f{0.0f, 0.0f, 0.0f, 0.5f});
117 rectPaint.setAntiAlias(drawData.skiaAA);
118 canvas->drawRect(rect_from_points(d.p1, d.p2), rectPaint);
119 SkPaint openingRectPaint;
120 openingRectPaint.setColor4f(SkColor4f{0.0f, 0.0f, 0.0f, 0.0f});
121 openingRectPaint.setBlendMode(SkBlendMode::kSrc);
122 openingRectPaint.setAntiAlias(drawData.skiaAA);
123 canvas->drawRect(get_cropped_rectangle(d.p1, d.p2, d.cropP1, d.cropP2), openingRectPaint);
124 canvas->restore();
125 canvas->restore();
126 }
127 else {
128 bool isCropped = d.cropP1 != Vector2f{0.0f, 0.0f} || d.cropP2 != Vector2f{1.0f, 1.0f};
129 if(isCropped) {
130 canvas->save();
131 canvas->clipRect(get_cropped_rectangle(d.p1, d.p2, d.cropP1, d.cropP2), drawData.skiaAA);
132 }
133
134 if(display)
135 display->draw(canvas, drawData, rect_from_points(d.p1, d.p2));
136 else {
137 SkPaint p(SkColor4f{0.5f, 0.5f, 0.5f, 0.5f});
138 p.setAntiAlias(drawData.skiaAA);
139 canvas->drawRect(rect_from_points(d.p1, d.p2), p);
140 }
141
142 if(isCropped)
143 canvas->restore();
144 }
145}
146
147void ImageCanvasComponent::update(DrawingProgram& drawP) {
148 ResourceDisplay* display = drawP.world.drawData.rMan->get_display_data(d.imageID);

Callers

nothing calls this directly

Calls 5

rect_from_pointsFunction · 0.85
get_cropped_rectangleFunction · 0.85
get_display_dataMethod · 0.80
restoreMethod · 0.80
saveMethod · 0.45

Tested by

no test coverage detected