X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Foutput-def.cc;h=e425dbf4f93cd2dba5fc03172017a02f04ff63b4;hb=6dc515376e07af1160edd46b61c0fd235c65db7d;hp=3461e3c920cd727d121f6c4f7f0214dc96f442e6;hpb=c9390a3d527175be064c0e2cd612139ee8fe3d7a;p=lilypond.git diff --git a/lily/output-def.cc b/lily/output-def.cc index 3461e3c920..e425dbf4f9 100644 --- a/lily/output-def.cc +++ b/lily/output-def.cc @@ -1,9 +1,20 @@ /* - music-output-def.cc -- implement Output_def + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2012 Han-Wen Nienhuys - (c) 1997--2009 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "output-def.hh" @@ -31,7 +42,7 @@ Output_def::Output_def () smobify_self (); - scope_ = ly_make_anonymous_module (false); + scope_ = ly_make_module (false); } Output_def::Output_def (Output_def const &s) @@ -41,7 +52,7 @@ Output_def::Output_def (Output_def const &s) smobify_self (); input_origin_ = s.input_origin_; - scope_ = ly_make_anonymous_module (false); + scope_ = ly_make_module (false); if (ly_is_module (s.scope_)) ly_module_copy (scope_, s.scope_); } @@ -135,13 +146,24 @@ Output_def::normalize () Real paper_width; SCM scm_paper_width = c_variable ("paper-width"); + bool twosided = to_boolean (c_variable ("two-sided")); + // We don't distinguish between outer-margin / left-margin and so on + // until page-stencil positioning in page.scm Real left_margin, left_margin_default; - SCM scm_left_margin_default = c_variable ("left-margin-default-scaled"); - SCM scm_left_margin = c_variable ("left-margin"); + SCM scm_left_margin_default = (twosided + ? c_variable ("outer-margin-default-scaled") + : c_variable ("left-margin-default-scaled")); + SCM scm_left_margin = (twosided + ? c_variable ("outer-margin") + : c_variable ("left-margin")); Real right_margin, right_margin_default; - SCM scm_right_margin_default = c_variable ("right-margin-default-scaled"); - SCM scm_right_margin = c_variable ("right-margin"); + SCM scm_right_margin_default = (twosided + ? c_variable ("inner-margin-default-scaled") + : c_variable ("right-margin-default-scaled")); + SCM scm_right_margin = (twosided + ? c_variable ("inner-margin") + : c_variable ("right-margin")); if (scm_paper_width == SCM_UNDEFINED || scm_left_margin_default == SCM_UNDEFINED @@ -162,14 +184,18 @@ Output_def::normalize () = paper_width - left_margin_default - right_margin_default; SCM scm_line_width = c_variable ("line-width"); + Real binding_offset = 0; + if (twosided) + binding_offset = robust_scm2double (c_variable ("binding-offset"), 0); + if (scm_line_width == SCM_UNDEFINED) { left_margin = ((scm_left_margin == SCM_UNDEFINED) - ? left_margin_default - : scm_to_double (scm_left_margin)); + ? left_margin_default + : scm_to_double (scm_left_margin)); right_margin = ((scm_right_margin == SCM_UNDEFINED) - ? right_margin_default - : scm_to_double (scm_right_margin)); + ? right_margin_default + : scm_to_double (scm_right_margin)) + binding_offset; line_width = paper_width - left_margin - right_margin; } else @@ -177,15 +203,15 @@ Output_def::normalize () line_width = scm_to_double (scm_line_width); if (scm_left_margin == SCM_UNDEFINED) { - // Vertically center systems if only line-width is given - if (scm_right_margin == SCM_UNDEFINED) + // Vertically center systems if only line-width is given + if (scm_right_margin == SCM_UNDEFINED) { left_margin = (paper_width - line_width) / 2; right_margin = left_margin; } else { - right_margin = scm_to_double (scm_right_margin); + right_margin = scm_to_double (scm_right_margin) + binding_offset; left_margin = paper_width - line_width - right_margin; } } @@ -194,7 +220,7 @@ Output_def::normalize () left_margin = scm_to_double (scm_left_margin); right_margin = ((scm_right_margin == SCM_UNDEFINED) ? (paper_width - line_width - left_margin) - : scm_to_double (scm_right_margin)); + : scm_to_double (scm_right_margin)) + binding_offset; } }