lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C++ question:


From: Knut Petersen
Subject: Re: C++ question:
Date: Fri, 20 Jan 2017 13:51:27 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0

Am 20.01.2017 um 13:35 schrieb David Kastrup:
Knut Petersen <address@hidden> writes:

Hi David!
Uh what?

If you want to change the dimensions of a stencil copy, you can just do

Stencil wd0 = orig;
wd0.set_empty (false);
I use the following code to emit hyphens (stencil ds) and whiteout boxes 
(stencil ws)
in lyric-hyphen.cc:

   Stencil total;
   for (int i = 0; i < hyphens; i++)
     { // ok
       Stencil ds = dash_stencil;
       ds.translate_axis (span_points[LEFT] + start_space +
                          i * (dash_period + dash_length), X_AXIS);
       total.add_stencil (ds);
       if (whiteout > 0.0 )
         {
           Box wb (Interval (0, dash_length + 2 * whiteout * lt),
                   Interval (h - whiteout * lt, h + th + whiteout * lt));
           Stencil ws (Lookup::round_filled_box (wb, 0.8 * lt));
           ws = ws.in_color (1.0, 0.0, 0.0);
           ws.translate_axis (span_points[LEFT] + start_space + i * (dash_period
                              + dash_length) - whiteout * lt, X_AXIS);
           ws.set_empty(false); // <== Does not help against collision detection
           total.add_stencil (ws);
         }
     }

As you can see in the attached jpgs, a collision of the whiteout box moves the 
last lyric line down.
set_empty(true) nor anything else I tried does change anything.
Uh, you set the dimensions to 0,0 _after_ moving the thing to its place.
That would make the remaining point stick out seriously wide of the
actual glyph.  Maybe move the set_empty before the translate_axis?

Not even the following code shows any improvement:

  Stencil total;
  for (int i = 0; i < hyphens; i++)
    {
      Stencil ds = dash_stencil;
      ds.translate_axis (span_points[LEFT] + start_space +
                         i * (dash_period + dash_length), X_AXIS);
      total.add_stencil (ds);
      if (whiteout > 0.0 )
        {
          Box wb (Interval (0, dash_length + 2 * whiteout * lt),
                  Interval (h - whiteout * lt, h + th + whiteout * lt));
          Stencil ws;
          ws.set_empty(false);
          ws = (Lookup::round_filled_box (wb, 0.8 * lt));
          ws.set_empty(false);
          ws = ws.in_color (1.0, 0.0, 0.0);
          ws.translate_axis (span_points[LEFT] + start_space + i * (dash_period
                             + dash_length) - whiteout * lt, X_AXIS);
          ws.set_empty(false);
          total.add_stencil (ws);
          total.set_empty(false);
        }
    }

  total.translate_axis (-me->relative_coordinate (common, X_AXIS), X_AXIS);
  total.set_empty(false);
  return total.smobbed_copy ();
}

Knut



reply via email to

[Prev in Thread] Current Thread [Next in Thread]