Improved SVG screenshot workaround
This commit is contained in:
parent
1212780441
commit
232a029785
4 changed files with 16 additions and 17 deletions
|
|
@ -193,15 +193,20 @@ void DrawingProgramLayerListItem::get_used_resources(std::unordered_set<Networki
|
|||
|
||||
void DrawingProgramLayerListItem::draw(SkCanvas* canvas, const DrawData& drawData) const {
|
||||
if(displayData->visible) {
|
||||
SkPaint layerPaint;
|
||||
layerPaint.setAlphaf(displayData->alpha);
|
||||
layerPaint.setBlendMode(serialized_blend_mode_to_sk_blend_mode(displayData->blendMode));
|
||||
canvas->saveLayer(nullptr, &layerPaint);
|
||||
if(!drawData.isSVGRender) {
|
||||
SkPaint layerPaint;
|
||||
layerPaint.setAlphaf(displayData->alpha);
|
||||
layerPaint.setBlendMode(serialized_blend_mode_to_sk_blend_mode(displayData->blendMode));
|
||||
canvas->saveLayer(nullptr, &layerPaint);
|
||||
}
|
||||
|
||||
if(folderData)
|
||||
folderData->draw(canvas, drawData);
|
||||
else
|
||||
layerData->draw(canvas, drawData);
|
||||
canvas->restore();
|
||||
|
||||
if(!drawData.isSVGRender)
|
||||
canvas->restore();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,14 +61,8 @@ CanvasComponentContainer::ObjInfoIterator DrawingProgramLayerManager::get_edited
|
|||
}
|
||||
|
||||
void DrawingProgramLayerManager::draw(SkCanvas* canvas, const DrawData& drawData) {
|
||||
if(layerTreeRoot) {
|
||||
if(drawData.onlyRenderLayerBeingEdited) {
|
||||
if(is_a_layer_being_edited())
|
||||
editingLayer.lock()->get_layer().draw(canvas, drawData);
|
||||
}
|
||||
else
|
||||
layerTreeRoot->draw(canvas, drawData);
|
||||
}
|
||||
if(layerTreeRoot)
|
||||
layerTreeRoot->draw(canvas, drawData);
|
||||
}
|
||||
|
||||
std::vector<CanvasComponentContainer::ObjInfo*> DrawingProgramLayerManager::get_flattened_component_list() const {
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ void ScreenshotTool::gui_toolbox() {
|
|||
if(controls.selectedType != SCREENSHOT_SVG)
|
||||
t.gui.checkbox_field("Display Grid", "Display Grid", &controls.displayGrid);
|
||||
else
|
||||
t.gui.text_label("Note: Screenshot will only capture\nlayer currently being edited");
|
||||
t.gui.text_label("Note: Screenshot will ignore blend\nmodes and layer alpha");
|
||||
if(controls.selectedType != 0)
|
||||
t.gui.checkbox_field("Transparent Background", "Transparent Background", &controls.transparentBackground);
|
||||
if(controls.imageSize.x() != oldImgSize.x()) {
|
||||
|
|
@ -275,10 +275,10 @@ void ScreenshotTool::take_screenshot_svg(SkCanvas* canvas, bool transparentBackg
|
|||
drawP.world.main.transparentBackground = transparentBackground;
|
||||
drawP.world.drawData.drawGrids = false;
|
||||
drawP.world.drawData.dontUseDrawProgCache = true;
|
||||
drawP.world.drawData.onlyRenderLayerBeingEdited = true;
|
||||
drawP.world.drawData.isSVGRender = true;
|
||||
|
||||
drawP.world.main.draw(canvas);
|
||||
drawP.world.drawData.onlyRenderLayerBeingEdited = false;
|
||||
drawP.world.drawData.isSVGRender = false;
|
||||
drawP.world.main.takingScreenshot = false;
|
||||
drawP.world.main.transparentBackground = false;
|
||||
drawP.world.drawData.drawGrids = oldDrawGrids;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue