[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fix dashed line errors (issue 320320043 by address@hidden)
From: |
Urs Liska |
Subject: |
Re: Fix dashed line errors (issue 320320043 by address@hidden) |
Date: |
Tue, 7 Mar 2017 09:23:06 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.6.0 |
I currently can't compile so I can't test the patch, and I can only
assess (1) from reading the code.
But it's good to fix this. It's a glitch but nevertheless "feels"
awkward when tweaking a score.
Urs
Am 07.03.2017 um 05:46 schrieb address@hidden:
> Reviewers: ,
>
> Message:
> Please review. Thanks!
>
> Description:
> Fix dashed line errors
>
> There are two errors in lily/line-interface.cc which cause
> dashed lines to be drawn inaccurately.
>
> (1) Line-thickness is improperly subtracted from the "off"
> value in Line_interface::make_dashed_line. This was done,
> presumably, to account for the line cap of each dash. In fact,
> PostScript discounts the line cap when constructing the pattern.
>
> (2) Dashed lines are constructed so that they begin and end
> with a dash. Thus, a dashed line is built of dash + whitespace
> units and a last lone dash. Period is not adjusted in
> Line_interface::line for this last dash, which can lead to a
> noticeable difference in its length compared to other dashes.
>
> Correcting these flaws ensures that dashed lines end with a
> dash rather than whitespace, and that terminating dashes are
> not clipped. Also, the number of dashes drawn reflects the
> number calculated.
>
> Please review this at https://codereview.appspot.com/320320043/
>
> Affected files (+13, -8 lines):
> M lily/line-interface.cc
>
>
> Index: lily/line-interface.cc
> diff --git a/lily/line-interface.cc b/lily/line-interface.cc
> index
> bc0895339fea3c996e08a71891c0090cbea2e96c..9c16ece4106f956af5cb3a30cb4fc667065abab8
> 100644
> --- a/lily/line-interface.cc
> +++ b/lily/line-interface.cc
> @@ -123,8 +123,8 @@ Line_interface::make_dashed_line (Real thick,
> Offset from, Offset to,
> Real dash_period, Real dash_fraction)
> {
> dash_fraction = min (max (dash_fraction, 0.0), 1.0);
> - Real on = dash_fraction * dash_period;
> - Real off = max (0.0, dash_period - on - thick);
> + Real on = dash_fraction * dash_period;
> + Real off = max (0.0, dash_period - on);
>
> SCM at = scm_list_n (ly_symbol2scm ("dashed-line"),
> scm_from_double (thick),
> @@ -226,16 +226,21 @@ Line_interface::line (Grob *me, Offset from,
> Offset to)
> return Stencil ();
>
> Real len = (to - from).length ();
> -
> - int n = (int) rint ((len - period * fraction) / period);
> - n = max (0, n);
> - if (n > 0)
> + /*
> + Dashed lines should begin and end with a dash. Therefore,
> + there will be one more dash than complete dash + whitespace
> + units (full periods).
> + */
> + int full_period_count =
> + (int) rint ((len - period * fraction) / period);
> + full_period_count = max (0, full_period_count);
> + if (full_period_count > 0)
> {
> /*
> TODO: figure out something intelligent for really short
> sections.
> - */
> - period = ((to - from).length () - period * fraction) / n;
> + */
> + period = len / (fraction + full_period_count);
> }
> stencil = make_dashed_line (thick, from, to, period, fraction);
> }
>
>
>
> _______________________________________________
> lilypond-devel mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/lilypond-devel
--
address@hidden
https://openlilylib.org
http://lilypondblog.org