#!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright (C) 2012 S. Daniel Francis # # This program 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. # # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. import os import logging logger = logging.getLogger('instrument') import cairo import rsvg class Instrument: staves = [] name = '' ymin = 0 ymax = 0 show_bracket = False staffx = 0 def __init__(self): self.svg = rsvg.Handle(file=os.path.join( os.environ['SUGAR_BUNDLE_PATH'], 'symbols/accolade.svg')) def draw(self, window, width, lmarg, rmarg, linespacing): accolade_cr = window.cairo_create() xx = lmarg * 0.20 / self.svg.props.width x0 = lmarg y0 = linespacing * 3.5 self.staffx = lmarg + lmarg * 0.20 for staff in self.staves: staff.lmarg = self.staffx staff.rmarg = rmarg staff.spacing = linespacing staff.y = self.ymax staff.draw(window, width) self.ymax = staff.ymax yy = (self.ymax - self.ymin - linespacing * 4) / self.svg.props.height matrix = cairo.Matrix(xx=xx, yy=yy, x0=x0, y0=y0) accolade_cr.transform(matrix) self.svg.render_cairo(accolade_cr) def guess_height(self, linespace): return len(self.staves) * linespace * 9