X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Foutput-def.cc;h=a67e8edb6749c9735ce6991a6036b89de327ba3b;hb=eefefc514a3a42718ee29db04c345e8593c15273;hp=4a1ce211ba741336a20d11d77a01c66e5a7ff62a;hpb=aa8523e4fa16352a1708065e447aac65426d82a4;p=lilypond.git diff --git a/lily/output-def.cc b/lily/output-def.cc index 4a1ce211ba..a67e8edb67 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--2011 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"); - 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"); - 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; } }