Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/instruments/instrument.py
blob: 3d3f3fce7e6e8ae4fc83e9da4ea76c22e36267f2 (plain)
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