summaryrefslogtreecommitdiff
path: root/noncore/multimedia/tonleiter/fretboard.cpp
Unidiff
Diffstat (limited to 'noncore/multimedia/tonleiter/fretboard.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/multimedia/tonleiter/fretboard.cpp43
1 files changed, 35 insertions, 8 deletions
diff --git a/noncore/multimedia/tonleiter/fretboard.cpp b/noncore/multimedia/tonleiter/fretboard.cpp
index 7936c83..7e63e01 100644
--- a/noncore/multimedia/tonleiter/fretboard.cpp
+++ b/noncore/multimedia/tonleiter/fretboard.cpp
@@ -44,24 +44,30 @@ void Graph::FretBoard::paintEvent(QPaintEvent* pe)
44 QPainter p(this); 44 QPainter p(this);
45 paintBoard(&p); 45 paintBoard(&p);
46 paintFrets(&p); 46 paintFrets(&p);
47 paintStrings(&p); 47 paintStrings(&p);
48 paintScale(&p); 48 paintScale(&p);
49} 49}
50//**************************************************************************** 50//****************************************************************************
51void Graph::FretBoard::resizeEvent(QResizeEvent* re) 51void Graph::FretBoard::resizeEvent(QResizeEvent* re)
52{ 52{
53 Q_UNUSED(re); 53 Q_UNUSED(re);
54} 54}
55//**************************************************************************** 55//****************************************************************************
56void Graph::FretBoard::mouseReleaseEvent(QMouseEvent* me)
57{
58 Q_UNUSED(me);
59 emit pressed();
60}
61//****************************************************************************
56void Graph::FretBoard::paintBoard(QPainter* p) 62void Graph::FretBoard::paintBoard(QPainter* p)
57{ 63{
58 //debug 64 //debug
59 QColor bgc=QColor(142,138,120); 65 QColor bgc=QColor(142,138,120);
60 p->setPen(QPen(bgc,5)); 66 p->setPen(QPen(bgc,5));
61 p->setBrush(QBrush(bgc)); 67 p->setBrush(QBrush(bgc));
62 p->drawRect(xmin,ymin,xwidth,yheight); 68 p->drawRect(xmin,ymin,xwidth,yheight);
63 69
64} 70}
65//**************************************************************************** 71//****************************************************************************
66void Graph::FretBoard::paintFrets(QPainter* p) 72void Graph::FretBoard::paintFrets(QPainter* p)
67{ 73{
@@ -112,46 +118,67 @@ void Graph::FretBoard::paintStrings(QPainter* p)
112 118
113 int stinglabelid=inst.noOfStrings()-(s+1); 119 int stinglabelid=inst.noOfStrings()-(s+1);
114 QString label=Note::getNameOfNote(inst.string(stinglabelid)); 120 QString label=Note::getNameOfNote(inst.string(stinglabelid));
115 p->drawText(xmargin/2,stringpos+ymin,label); 121 p->drawText(xmargin/2,stringpos+ymin,label);
116 } 122 }
117} 123}
118//**************************************************************************** 124//****************************************************************************
119void Graph::FretBoard::paintScale(QPainter* p) 125void Graph::FretBoard::paintScale(QPainter* p)
120{ 126{
121 int dotsize=10; 127 int dotsize=10;
122 int scaleid=data->getCurrentScaleID(); 128 int scaleid=data->getCurrentScaleID();
123 Scale scale=data->getScale(scaleid); 129 Scale scale=data->getScale(scaleid);
124 130 int baseoctave=Note::octaveOfBaseNote(data->getCurrentBaseNote(),inst.lowestNote());
125 int colorstart=255%inst.noOfOctaves();
126 int colorintervall=(255-colorstart)/inst.noOfOctaves();
127 131
128 for(int s=0;s<inst.noOfStrings();s++) 132 for(int s=0;s<inst.noOfStrings();s++)
129 { 133 {
130 int y=(int)(stringdist*s)+ymin; 134 int y=(int)(stringdist*s)+ymin;
131 int stingid=inst.noOfStrings()-(s+1); 135 int stingid=inst.noOfStrings()-(s+1);
132 for(int f=0;f<=inst.noOfFrets();f++) 136 for(int f=0;f<=inst.noOfFrets();f++)
133 { 137 {
134 int note=inst.string(stingid)+f; 138 int note=inst.string(stingid)+f;
135 if(scale.noteInScale(data->getCurrentBaseNote(),note)) 139 if(scale.noteInScale(data->getCurrentBaseNote(),note))
136 { 140 {
137 int x=(int)(fretdist*f)+xmin; 141 int x=(int)(fretdist*f)+xmin;
138 142
139 int octave=Note::octaveOfBaseNote(data->getCurrentBaseNote(),note); 143 //no more than six octaves can be visualised (there is a zero octave)
140 if(octave>5) octave=5; 144 int octave=Note::octaveOfBaseNote(data->getCurrentBaseNote(),note)-baseoctave;
145 if(octave<0)
146 qDebug("%d,%d",octave,baseoctave);
147 if(octave>5)
148 {
149 qDebug("octave out of range");
150 octave=5;
151 }
152
141 p->setPen(QColor(255,0,0)); 153 p->setPen(QColor(255,0,0));
142 int c=colorstart+octave*colorintervall; 154 int c= ( (note-12*baseoctave) - (12*octave+data->getCurrentBaseNote()) )*15;
143 QColor dotcolor(c,c,255); 155 if(c<0 || c>255)
144 p->setBrush(dotcolor); 156 qDebug("%d = %d - ( %d + %d)",c,note,12*octave,data->getCurrentBaseNote());
157 QColor dotcolor(255,255,255);
158
159 if(octave==0)
160 dotcolor=QColor(c,c,255);
161 else if(octave==1)
162 dotcolor=QColor(c,255,c);
163 else if(octave==2)
164 dotcolor=QColor(255,c,c);
165 else if(octave==3)
166 dotcolor=QColor(255,255,c);
167 else if(octave==4)
168 dotcolor=QColor(255,c,255);
169 else
170 dotcolor=QColor(c,255,255);
145 171
172 p->setBrush(dotcolor);
146 p->drawEllipse(x-dotsize/2,y-dotsize/2,dotsize,dotsize); 173 p->drawEllipse(x-dotsize/2,y-dotsize/2,dotsize,dotsize);
147 174
148 if(data->isDrawNames()) 175 if(data->isDrawNames())
149 { 176 {
150 p->setPen(QColor(255,155,0)); 177 p->setPen(QColor(255,155,0));
151 p->drawText(x-dotsize/2,y-dotsize/2,Note::getNameOfNote(note)); 178 p->drawText(x-dotsize/2,y-dotsize/2,Note::getNameOfNote(note));
152 } 179 }
153 180
154 } 181 }
155 } 182 }
156 } 183 }
157} 184}