Opened 2 years ago

Last modified 2 years ago

#18078 new bug

B_MITER_JOIN implementation differs from common miter semantics

Reported by: thebuck Owned by: axeld
Priority: low Milestone: Unscheduled
Component: Servers/app_server Version: R1/beta4
Keywords: Cc:
Blocked By: Blocking:
Platform: All

Description

Flow of information when viewing SVG in WebPositive

stroke-linejoin: miter in SVG file

↓ some Webkit code, presumably

LineJoin::Miter

void GraphicsContextHaiku::setLineJoin(LineJoin lineJoin) in haikuwebkit/Source/WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp

B_MITER_JOIN

inline agg::line_join_e agg_line_join_mode_for(join_mode mode) in haiku/src/servers/app/drawing/Painter/Painter.cpp

agg::miter_join

Semantic difference

agg::miter_join cuts off the corner exactly where the miter limit is located, resulting in a semi-bevelled look.

But agg::miter_join_revert is what provides the correct behaviour:
Switching to bevel when miter limit is exceeded.

Conflicting semantics

SVG, PDF, ... the modern world.

Not observed in BePDF: does it have its own stroking implementation?

Proposed fix:

If BeOS B_MITER_JOIN means agg::miter_join_revert, or the difference would not be noticeable in any other application, just map it that way.

Otherwise, introduce a new B_BINARY_MITER_JOIN/B_MITER_BEVEL_JOIN/B_MITER_REVERT_JOIN style...

Attachments (2)

miter-test.svg (422 bytes ) - added by thebuck 2 years ago.
View in WebPositive. The wedge shapes all have to look identical. Right one is correct. (The older version did additionally cut off at the bottom due to image height and so was a not-so-good demo)
miter-test.png (9.9 KB ) - added by thebuck 2 years ago.
WebPositive render

Download all attachments as: .zip

Change History (5)

comment:1 by X512, 2 years ago

Can you give a raster screenshot that show difference?

by thebuck, 2 years ago

Attachment: miter-test.svg added

View in WebPositive. The wedge shapes all have to look identical. Right one is correct. (The older version did additionally cut off at the bottom due to image height and so was a not-so-good demo)

by thebuck, 2 years ago

Attachment: miter-test.png added

WebPositive render

comment:2 by thebuck, 2 years ago

From left to right:

  • miter join style set, but no miterlimit set, so default of 4.
  • no join style set, so default miter, set a miterlimit of 2.
  • bevel join set

comment:3 by thebuck, 2 years ago

There is demonstrated no case of not exceeding the miterlimit. That would result in a sharp corner.

Last edited 2 years ago by thebuck (previous) (diff)
Note: See TracTickets for help on using tickets.