>From ae50c298fee5f57c1200bd82b8f20783e74b4cd9 Mon Sep 17 00:00:00 2001
From: Knut Petersen
Date: Tue, 24 Jan 2017 14:17:10 +0100
Subject: [PATCH] Implement no-outline-stencil backend command
Should be used instead of a transparent stencil / delayed
stencil evaluation construct where the delay is not needed.
Signed-off-by: Knut Petersen
---
lily/include/stencil.hh | 1 +
lily/stencil-integral.cc | 3 +++
lily/stencil-interpret.cc | 5 +++++
lily/stencil.cc | 6 ++++++
scm/define-stencil-commands.scm | 1 +
5 files changed, 16 insertions(+)
diff --git a/lily/include/stencil.hh b/lily/include/stencil.hh
index 8af67c0f76..546b5a3bff 100644
--- a/lily/include/stencil.hh
+++ b/lily/include/stencil.hh
@@ -84,6 +84,7 @@ public:
void align_to (Axis a, Real x);
void translate_axis (Real, Axis);
void scale (Real, Real);
+ void no_outline ();
Interval extent (Axis) const;
Box extent_box () const;
diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc
index 1b9aa5181b..583a454750 100644
--- a/lily/stencil-integral.cc
+++ b/lily/stencil-integral.cc
@@ -55,6 +55,7 @@ when this transforms a point (x,y), the point is written as matrix:
#include "skyline.hh"
#include "skyline-pair.hh"
#include "spanner.hh"
+
using namespace std;
Real QUANTIZATION_UNIT = 0.2;
@@ -938,6 +939,8 @@ stencil_traverser (PangoMatrix trans, SCM expr)
else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("delay-stencil-evaluation")))
// should not use the place-holder text, but no need for the warning below
return vector ();
+ else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("no-outline-stencil")))
+ return vector ();
else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("grob-cause")))
return stencil_traverser (trans, scm_caddr (expr));
else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("color")))
diff --git a/lily/stencil-interpret.cc b/lily/stencil-interpret.cc
index 25fad0d842..6bf0671284 100644
--- a/lily/stencil-interpret.cc
+++ b/lily/stencil-interpret.cc
@@ -39,6 +39,11 @@ interpret_stencil_expression (SCM expr,
}
if (scm_is_eq (head, ly_symbol2scm ("transparent-stencil")))
return;
+ if (scm_is_eq (head, ly_symbol2scm ("no-outline-stencil")))
+ {
+ interpret_stencil_expression (scm_cadr (expr), func, func_arg, o);
+ return;
+ }
if (scm_is_eq (head, ly_symbol2scm ("footnote")))
return;
if (scm_is_eq (head, ly_symbol2scm ("translate-stencil")))
diff --git a/lily/stencil.cc b/lily/stencil.cc
index 5e568c98db..afc348d95f 100644
--- a/lily/stencil.cc
+++ b/lily/stencil.cc
@@ -193,6 +193,12 @@ Stencil::scale (Real x, Real y)
}
void
+Stencil::no_outline ()
+{
+ expr_ = scm_list_2 (ly_symbol2scm ("no-outline-stencil"), expr_);
+}
+
+void
Stencil::add_stencil (Stencil const &s)
{
SCM cs = ly_symbol2scm ("combine-stencil");
diff --git a/scm/define-stencil-commands.scm b/scm/define-stencil-commands.scm
index 23c17abb9b..ddce5bd631 100644
--- a/scm/define-stencil-commands.scm
+++ b/scm/define-stencil-commands.scm
@@ -63,6 +63,7 @@ are used internally in @file{lily/@/stencil-interpret.cc}."
combine-stencil
delay-stencil-evaluation
footnote
+ no-outline-stencil
output-attributes
rotate-stencil
scale-stencil
--
2.11.0