lilypond-devel
[Top][All Lists]
Advanced

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

Use make-bow-stencil to simplify make-parenthesis-stencil (issue 2807500


From: thomasmorley65
Subject: Use make-bow-stencil to simplify make-parenthesis-stencil (issue 280750043 by address@hidden)
Date: Thu, 26 Nov 2015 21:24:51 +0000

Reviewers: ,

Message:
please review

I'm not sure if the final interval-widen in make-parenthesis-stencil is
really necassary. It was in before, so I did it as well. My local
regtests don't show a difference, though.

Description:
Use make-bow-stencil to simplify make-parenthesis-stencil

Changes parentheses-item::calc-angled-bracket-stencils and
parenthesize-stencil accordingly

Please review this at https://codereview.appspot.com/280750043/

Affected files (+19, -60 lines):
  M scm/output-lib.scm
  M scm/stencil.scm


Index: scm/output-lib.scm
diff --git a/scm/output-lib.scm b/scm/output-lib.scm
index 0921cdd36f00b20d54442206d3a063ed2e9d0d05..1dbf4ab7ae8c277cbf23c5fafafd5b1d05ebfcbd 100644
--- a/scm/output-lib.scm
+++ b/scm/output-lib.scm
@@ -880,8 +880,9 @@ and duration-log @var{log}."
               (ly:stencil-aligned-to
                (make-parenthesis-stencil y-extent
                                          half-thickness
-                                         (- width)
-                                         angularity)
+                                         width
+                                         angularity
+                                         -1)
                Y CENTER)
               X RIGHT))
          (lp-x-extent
@@ -891,7 +892,8 @@ and duration-log @var{log}."
                (make-parenthesis-stencil y-extent
                                          half-thickness
                                          width
-                                         angularity)
+                                         angularity
+                                         1)
                Y CENTER)
               X LEFT))
          (rp-x-extent
Index: scm/stencil.scm
diff --git a/scm/stencil.scm b/scm/stencil.scm
index d2fad841cbd589d70297b49bc414e479a4a53381..9a45864f77985468d0743e6e69fb19140fe1950c 100644
--- a/scm/stencil.scm
+++ b/scm/stencil.scm
@@ -195,76 +195,33 @@ a list of @var{paddings}."
     stil))

 (define (make-parenthesis-stencil
-         y-extent half-thickness width angularity)
+         y-extent thickness width angularity orientation)
   "Create a parenthesis stencil.
 @var{y-extent} is the Y extent of the markup inside the parenthesis.
 @var{half-thickness} is the half thickness of the parenthesis.
 @var{width} is the width of a parenthesis.
address@hidden is the orientation of a parenthesis.
 The higher the value of number @var{angularity},
 the more angular the shape of the parenthesis."
-  (let* ((line-width 0.1)
-         ;; Horizontal position of baseline that end points run through.
-         (base-x
-          (if (< width 0)
-              (- width)
-              0))
-         ;; X value farthest from baseline on outside  of curve
-         (outer-x (+ base-x width))
-         ;; X extent of bezier sandwich centerline curves
-         (x-extent (ordered-cons base-x outer-x))
-         (bottom-y (interval-start y-extent))
-         (top-y (interval-end y-extent))
-
-         (lower-end-point (cons base-x bottom-y))
-         (upper-end-point (cons base-x top-y))
-
-         (outer-control-x (+ base-x (* 4/3 width)))
-         (inner-control-x (+ outer-control-x
-                             (if (< width 0)
-                                 half-thickness
-                                 (- half-thickness))))
-
-         ;; Vertical distance between a control point
-         ;; and the end point it connects to.
-         (offset-index (- (* 0.6 angularity) 0.8))
-         (lower-control-y (interval-index y-extent offset-index))
-         (upper-control-y (interval-index y-extent (- offset-index)))
-
-         (lower-outer-control-point
-          (cons outer-control-x lower-control-y))
-         (upper-outer-control-point
-          (cons outer-control-x upper-control-y))
-         (upper-inner-control-point
-          (cons inner-control-x upper-control-y))
-         (lower-inner-control-point
-          (cons inner-control-x lower-control-y)))
-  (ly:make-stencil
-    (ly:stencil-expr
-      (make-bezier-sandwich-stencil
-       (list
-        ;; Step 1: move to lower end point.
-        lower-end-point
-        ;; Step 2: curve through outer control points
-        ;; to upper end point.
-        lower-outer-control-point
-        upper-outer-control-point
-        upper-end-point
-        ;; Step 3: curve through inner control points
-        ;; to lower end point.
-        upper-inner-control-point
-        lower-inner-control-point)
-       (min (* 2 half-thickness) line-width)))
-    (interval-widen x-extent (/ line-width 2))
-    (interval-widen y-extent (/ line-width 2)))))
+  (let* ((start (cons 0 (car y-extent)))
+         (stop (cons 0 (cdr y-extent)))
+         (bow-stil
+           (make-bow-stencil
+             start stop thickness angularity width orientation))
+         (x-extent (ly:stencil-extent bow-stil X)))
+    (ly:make-stencil
+      (ly:stencil-expr bow-stil)
+      (interval-widen x-extent (/ line-width 2))
+      (interval-widen y-extent (/ line-width 2)))))

 (define-public (parenthesize-stencil
                 stencil half-thickness width angularity padding)
   "Add parentheses around @var{stencil}, returning a new stencil."
   (let* ((y-extent (ly:stencil-extent stencil Y))
          (lp (make-parenthesis-stencil
-              y-extent half-thickness (- width) angularity))
+              y-extent half-thickness width angularity 1))
          (rp (make-parenthesis-stencil
-              y-extent half-thickness width angularity)))
+              y-extent half-thickness width angularity -1)))
     (set! stencil (ly:stencil-combine-at-edge stencil X LEFT lp padding))
     (set! stencil (ly:stencil-combine-at-edge stencil X RIGHT rp padding))
     stencil))





reply via email to

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