View Issue Details

IDProjectCategoryView StatusLast Update
0017083ScribusCanvaspublic2023-12-24 10:00
Reporternitramr Assigned Tonitramr  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
PlatformDesktop PCOSUbuntuOS Version23.10 64-bit
Product Version1.5.8 
Fixed in Version1.6.0.svn 
Summary0017083: Changing the line blend mode has no effect on the canvas
DescriptionIt seems like virtual void ScPainter::setBlendModeStroke(int) always get 0 instead of the number of the selected blend mode.
The blend mode is set correctly in void PageItem::setLineBlendmode(int newBlendmode)
Steps To Reproduce1. Create a new document
2. draw a line item
3. go to transparency settings of item and change line blend mode to another mode
=> no changes on canvas
TagsNo tags attached.
PatchYes

Activities

nitramr

2023-12-20 13:14

developer   ~0050641

I found the issue.

Strokes of a page item are usually drawn in PageItem::DrawObj_Post(ScPainter *p)
Page items without a fill, like Line, PolyLine or Spiral are explicitly excluded from that post drawing, because those objects are already draw strokes in their local DrawObj_Post(ScPainter *p) function.

When I set p->setBlendModeStroke(lineBlendmode()); in PageItem_Line::DrawObj_Item it works, and the item blending is visible on canvas.

I try to provide a patch for that. Blend mode is at least supported in PDF export, but not on canvas.

nitramr

2023-12-20 13:43

developer   ~0050642

Patch attached.

Fixes blend mode for:
- Line Items
- Spiral Items
- Poly Line Items
lineblendmode_2023-12-20_01.patch (1,717 bytes)   
Index: scribus/pageitem.cpp
===================================================================
--- scribus/pageitem.cpp	(Revision 25886)
+++ scribus/pageitem.cpp	(Arbeitskopie)
@@ -10012,7 +10012,9 @@
 	if (m_Doc->layerOutline(m_layerID))
 		p->strokePath();
 	else
-	{
+	{		
+		p->setBlendModeStroke(lineBlendmode());
+		p->setBlendModeFill(lineBlendmode()); // needed for fill in arrow shapes
 		if (NamedLStyle.isEmpty())
 		{
 			ScPattern *strokePattern = m_Doc->checkedPattern(patternStrokeVal);
Index: scribus/pageitem_line.cpp
===================================================================
--- scribus/pageitem_line.cpp	(Revision 25886)
+++ scribus/pageitem_line.cpp	(Arbeitskopie)
@@ -61,6 +61,7 @@
 		p->drawLine(FPoint(0, 0), FPoint(m_width, 0));
 	else
 	{
+		p->setBlendModeStroke(lineBlendmode());
 		if (NamedLStyle.isEmpty())
 		{
 			ScPattern *strokePattern = m_Doc->checkedPattern(patternStrokeVal);
Index: scribus/pageitem_polyline.cpp
===================================================================
--- scribus/pageitem_polyline.cpp	(Revision 25886)
+++ scribus/pageitem_polyline.cpp	(Arbeitskopie)
@@ -58,6 +58,7 @@
 
 	if (!m_Doc->layerOutline(m_layerID))
 	{
+		p->setBlendModeStroke(lineBlendmode());
 		if ((fillColor() != CommonStrings::None) || (GrType != 0))
 		{
 			FPointArray cli;
Index: scribus/pageitem_spiral.cpp
===================================================================
--- scribus/pageitem_spiral.cpp	(Revision 25886)
+++ scribus/pageitem_spiral.cpp	(Arbeitskopie)
@@ -82,6 +82,7 @@
 
 	if (!m_Doc->layerOutline(m_layerID))
 	{
+		p->setBlendModeStroke(lineBlendmode());
 		if ((fillColor() != CommonStrings::None) || (GrType != 0))
 		{
 			FPointArray cli;

jghali

2023-12-20 23:18

administrator   ~0050666

Thanks. For some reason, the p->setBlendModeStroke(lineBlendmode()) calls in PageItem::DrawObj_Post() are guarded with a corresponding p->setBlendModeStroke(0) call. So I added these guards to your patch. I completed your patch by a similar one for the Windows printing side as Windows printing was suffering from a similar issue.

Issue History

Date Modified Username Field Change
2023-12-19 23:33 nitramr New Issue
2023-12-19 23:44 nitramr Description Updated
2023-12-20 13:14 nitramr Note Added: 0050641
2023-12-20 13:43 nitramr Note Added: 0050642
2023-12-20 13:43 nitramr File Added: lineblendmode_2023-12-20_01.patch
2023-12-20 13:43 nitramr Summary Changing the line blend mode has no effect on the canvas => [Patch] Changing the line blend mode has no effect on the canvas
2023-12-20 13:43 nitramr Patch No => Yes
2023-12-20 23:10 jghali Summary [Patch] Changing the line blend mode has no effect on the canvas => Changing the line blend mode has no effect on the canvas
2023-12-20 23:18 jghali Assigned To => nitramr
2023-12-20 23:18 jghali Status new => resolved
2023-12-20 23:18 jghali Resolution open => fixed
2023-12-20 23:18 jghali Fixed in Version => 1.6.0.svn
2023-12-20 23:18 jghali Note Added: 0050666
2023-12-24 10:00 cbradney Status resolved => closed