1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org>
#
# 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
|