Grob *common_x = common_refpoint_of_array (elements, me, X_AXIS);
Interval xext = Axis_group_interface::relative_group_extent (elements, common_x, X_AXIS);
-
+ if (xext.is_empty ())
+ {
+ me->programming_error ("elements have no X extent.");
+ xext = Interval (0, 0);
+ }
Stencil left_br = Horizontal_bracket::make_enclosing_bracket (me, me, elements,
Y_AXIS, LEFT);
Grob *common = common_refpoint_of_array (grobs, refpoint, a);
Interval ext = Axis_group_interface::relative_group_extent (grobs, common, a);
- Stencil b = make_bracket (me, ext.length(), a, dir);
- b.translate_axis (ext[LEFT] - refpoint->relative_coordinate (common, a), a);
+ if (ext.is_empty ())
+ {
+ me->programming_error ("Can't enclose empty extents with bracket");
+ return Stencil ();
+ }
+ else
+ {
+ Stencil b = make_bracket (me, ext.length(), a, dir);
+ b.translate_axis (ext[LEFT] - refpoint->relative_coordinate (common, a), a);
- return b;
+ return b;
+ }
}
-
/*
TODO:
Support texts on the brackets?
*/
-
MAKE_SCHEME_CALLBACK (Horizontal_bracket, print, 1);
SCM
Horizontal_bracket::print (SCM smob)
(num-x (interval-widen (ly:stencil-extent number-stencil X)
(* mag 0.2)))
(num-y (ly:stencil-extent number-stencil Y))
- (slash-stencil
- (ly:make-stencil
- `(draw-line
- ,thickness
- ,(car num-x) ,(- (interval-center num-y) dy)
- ,(cdr num-x) ,(+ (interval-center num-y) dy))
- num-x num-y
- )))
-
- (ly:stencil-add number-stencil
- (cond
- ((= num 5) (ly:stencil-translate slash-stencil
- ;;(cons (* mag -0.05) (* mag 0.42))
- (cons (* mag -0.00) (* mag -0.07))
-
- ))
- ((= num 7) (ly:stencil-translate slash-stencil
- ;;(cons (* mag -0.05) (* mag 0.42))
- (cons (* mag -0.00) (* mag -0.15))
-
- ))
-
- (else slash-stencil)))
- ))
+ (is-sane (and (interval-sane? num-x) (interval-sane? num-y)))
+
+ (slash-stencil
+ (if is-sane
+ (ly:make-stencil
+ `(draw-line
+ ,thickness
+ ,(car num-x) ,(- (interval-center num-y) dy)
+ ,(cdr num-x) ,(+ (interval-center num-y) dy))
+ num-x num-y)
+ #f)))
+
+ (set! slash-stencil
+ (cond
+ ((not (ly:stencil? slash-stencil)) #f)
+ ((= num 5) (ly:stencil-translate slash-stencil
+ ;;(cons (* mag -0.05) (* mag 0.42))
+ (cons (* mag -0.00) (* mag -0.07))
+
+ ))
+ ((= num 7) (ly:stencil-translate slash-stencil
+ ;;(cons (* mag -0.05) (* mag 0.42))
+ (cons (* mag -0.00) (* mag -0.15))
+
+ ))
+
+ (else slash-stencil)))
+
+ (if slash-stencil
+ (set! number-stencil
+ (ly:stencil-add number-stencil slash-stencil))
+
+ (ly:warning "invalid number for slashed digit ~a" num))
+
+
+ number-stencil))
\f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; the note command.