B2DLineJoin::Middle, drawPolyLine etc

Armin Le Grand armin_le_grand at me.com
Tue Feb 2 15:04:48 UTC 2016

Hi Caolan,

checked once again: B2DLineJoin::Middle is sometimes mapped to 
B2DLineJoin::NONE, sometimes to B2DLineJoin::Miter, both are nearly 
equally often used. This should be unified, I would prefer mapping to 
B2DLineJoin::Miter due to being graphically 'closer' to 
B2DLineJoin::Middle than B2DLineJoin::NONE.

Also checked: Canvas in HTML5 also e.g. knows no 'none' state. With 
LineJoin probably all GraphicSystems are slightly different.

Am 02.02.2016 um 15:46 schrieb Armin Le Grand:
> Hi Caolan,
> no, not an error, another simple LineJoin method which just takes the 
> 'middle' of the points to be joined. LineJoins are for fat lines, so 
> you have an inner and outer edge of the current and next segment. To 
> join the points of the inner edges, these are added and divided by 
> two, same for outer.
> I do not remember where that came from, but it was used in some 
> graphic system and seemed a nice method for doing line joins. It 
> should in practise not be used much and did not make it into 
> current/modern systems, but is handled correctly e.g. in the primitive 
> decomposition of fat lines.
> There are always exceptions in different systems, e.g. for DirectDraw 
> on Win there is no B2DLineJoin::NONE, so this has to be painted by 
> painting the single line segments.
> For a primitive renderer this means if there is no support for that 
> style for the renderer you currently feed, use the decomposition :-)
> In practise I know of no current usages - even on the UI that flag is 
> missing. If it can be removed (UNO API, ODF, ...), remove it.
> HTH!
> Am 02.02.2016 um 12:27 schrieb Caolán McNamara:
>> What is B2DLineJoin::Middle supposed to be ?
>> I see that the vcl pdf, windows and quartz backends treat ::Middle the
>> same as ::Mitre (so I made the cairo one do the same)
>> On the the other hand I see cppcanvas...setupStrokeAttributes and
>> filter...ImplWriteLineInfo would default ::Middle to the same as ::NONE
>> while
>> cui...SvxLineTabPage::Reset and
>> svx...LinePropertyPanelBase::updateLineJoint treat LineJoin_MIDDLE the
>> same as ROUND but
>> filter...EscherPropertyContainer::CreateLineProperties and
>> oox...DrawingML::WriteOutline the same as BEVEL
>> Is ::Middle a "mistake" and we should just treat it as ::Mitre
>> everywhere ? Especially as that's what it turns into for the windows
>> vcl drawPolyLine. Or is there some subtlety here ?
>> C.

ALG (PGP Key: EE1C 4B3F E751 D8BC C485 DEC1 3C59 F953 D81C F4A2)

More information about the LibreOffice mailing list