2 using System.Collections.Generic;
\r
4 using System.Drawing;
\r
5 using System.Drawing.Drawing2D;
\r
6 using System.Windows.Forms;
\r
7 using DTXCreator.UndoRedo;
\r
10 namespace DTXCreator.譜面
\r
12 internal class C譜面管理
\r
14 public Bitmap bmp背景画像;
\r
15 public Dictionary<int, float> dicBPx = new Dictionary<int, float>();
\r
16 public Dictionary<int, C小節> dic小節 = new Dictionary<int, C小節>();
\r
17 public List<Cレーン> listレーン = new List<Cレーン>();
\r
18 public static readonly int nレーン割付チップ番号表示高さdot = 10;
\r
19 public static readonly int nレーン番号表示高さdot = 0x20;
\r
20 public int n現在のガイド幅grid = ( C小節.n基準の高さgrid / 0x10 );
\r
21 public int n現在の譜面表示下辺の譜面先頭からの位置grid;
\r
22 public string strPATH_WAV = "";
\r
24 public C譜面管理( Cメインフォーム cm )
\r
28 public bool bOPENチップである( Cチップ cc )
\r
30 Cレーン cレーン = this.listレーン[ cc.nレーン番号0to ];
\r
31 return ( ( cc.n値・整数1to1295 == 2 ) && ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) ) );
\r
33 public bool b確定選択中のチップがある()
\r
35 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
37 foreach( Cチップ cチップ in pair.Value.listチップ )
\r
39 if( cチップ.b確定選択中 || cチップ.bドラッグで選択中 )
\r
47 public decimal dc譜面先頭からの位置gridにおけるBPMを返す( int n譜面先頭からの位置grid )
\r
49 decimal num = this._Form.dc現在のBPM;
\r
50 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );
\r
53 for( int i = 0; i <= c小節.n小節番号0to3599; i++ )
\r
55 C小節 c小節2 = this.p小節を返す( i );
\r
58 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( i );
\r
59 foreach( Cチップ cチップ in c小節2.listチップ )
\r
61 if( ( cチップ.nチャンネル番号00toFF == 8 ) && ( ( num3 + cチップ.n位置grid ) <= n譜面先頭からの位置grid ) )
\r
63 num = (decimal) cチップ.f値・浮動小数;
\r
71 public int nX座標dotが位置するレーン番号を返す( int nXdot )
\r
77 foreach( Cレーン cレーン in this.listレーン )
\r
89 public int nY座標dotが位置するgridを返す・ガイド幅単位( int nY )
\r
91 int num = this.nY座標dotが位置するgridを返す・最高解像度( nY );
\r
92 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num );
\r
95 c小節 = this.p小節を返す( this.n現在の最大の小節番号を返す() );
\r
97 int num2 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
98 int num3 = ( ( num - num2 ) / this.n現在のガイド幅grid ) * this.n現在のガイド幅grid;
\r
99 return ( num2 + num3 );
\r
101 public int nY座標dotが位置するgridを返す・最高解像度( int nY )
\r
103 int num = this._Form.pictureBox譜面パネル.ClientSize.Height - nY;
\r
104 return ( ( num / C小節.n1グリッドの高さdot ) + this.n現在の譜面表示下辺の譜面先頭からの位置grid );
\r
106 public int nレーンの左端X座標dotを返す( int nレーン番号0to )
\r
108 if( ( nレーン番号0to >= 0 ) && ( nレーン番号0to < this.listレーン.Count ) )
\r
110 return this.listレーン[ nレーン番号0to ].n位置Xdot;
\r
114 public int nレーン名に対応するレーン番号を返す( string strレーン名 )
\r
117 foreach( Cレーン cレーン in this.listレーン )
\r
119 if( cレーン.strレーン名.Equals( strレーン名 ) )
\r
127 public int n現在の最大の小節番号を返す()
\r
130 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
132 C小節 c小節 = pair.Value;
\r
133 if( c小節.n小節番号0to3599 > nBar )
\r
135 nBar = c小節.n小節番号0to3599;
\r
140 public int n全小節の高さdotの合計を返す()
\r
143 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
145 nHeights += pair.Value.n小節長倍率を考慮した現在の小節の高さdot;
\r
149 public int n全小節の高さgridの合計を返す()
\r
152 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
154 num += pair.Value.n小節長倍率を考慮した現在の小節の高さgrid;
\r
158 public int n譜面先頭からの位置gridから描画領域内のY座標dotを返す( int n譜面先頭からの位置grid, Size sz描画領域dot )
\r
160 int num = n譜面先頭からの位置grid - this.n現在の譜面表示下辺の譜面先頭からの位置grid;
\r
161 return ( sz描画領域dot.Height - ( num * C小節.n1グリッドの高さdot ) );
\r
163 public int n譜面先頭からみた小節先頭の位置gridを返す( int n小節番号0to3599 )
\r
165 if( ( n小節番号0to3599 < 0 ) || ( n小節番号0to3599 > this.n現在の最大の小節番号を返す() ) )
\r
170 for( int i = 0; i < n小節番号0to3599; i++ )
\r
172 C小節 c小節 = this.p小節を返す( i );
\r
175 num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
180 public C小節 pチップの存在する小節を返す( Cチップ cc )
\r
182 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
184 C小節 c小節 = pair.Value;
\r
185 if( c小節.listチップ.Contains( cc ) )
\r
192 public Cチップ p指定された座標dotにあるチップを返す( int x, int y )
\r
194 int num = this.nX座標dotが位置するレーン番号を返す( x );
\r
197 int num2 = this.nY座標dotが位置するgridを返す・最高解像度( y );
\r
198 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num2 );
\r
203 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
204 foreach( Cチップ cチップ in c小節.listチップ )
\r
206 int num4 = num3 + cチップ.n位置grid;
\r
207 int num5 = C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );
\r
208 if( ( ( cチップ.nレーン番号0to == num ) && ( num4 <= num2 ) ) && ( num2 <= ( num4 + num5 ) ) )
\r
216 public Cチップ p指定位置にあるチップを返す( int n小節番号0to, int nレーン番号0to, int n小節内の位置grid )
\r
218 C小節 c小節 = this.p小節を返す( n小節番号0to );
\r
221 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
223 Cチップ cチップ = c小節.listチップ[ i ];
\r
224 if( ( cチップ.n位置grid == n小節内の位置grid ) && ( cチップ.nレーン番号0to == nレーン番号0to ) )
\r
232 public C小節 p小節を返す( int n小節番号0to3599 )
\r
235 if( this.dic小節.TryGetValue( n小節番号0to3599, out c小節 ) )
\r
241 public C小節 p譜面先頭からの位置gridを含む小節を返す( int n譜面先頭からの位置grid )
\r
244 int num2 = this.n現在の最大の小節番号を返す();
\r
245 for( int i = 0; i <= num2; i++ )
\r
247 C小節 c小節 = this.p小節を返す( i );
\r
250 num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
251 if( n譜面先頭からの位置grid < num )
\r
259 public void tチップを削除する( int nレーン番号0to, int n譜面先頭からの位置grid )
\r
261 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );
\r
265 int num = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
266 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
269 Cレーン cレーン = this.listレーン[ nレーン番号0to ];
\r
270 bool flag = ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB );
\r
271 bool flag2 = ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB );
\r
273 foreach( Cチップ cチップ in c小節.listチップ )
\r
275 if( cチップ.n位置grid == num )
\r
277 if( cチップ.nレーン番号0to == nレーン番号0to )
\r
279 Cチップ cc = new Cチップ();
\r
280 cc.tコピーfrom( cチップ );
\r
281 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );
\r
282 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo, redo ) );
\r
283 c小節.listチップ.Remove( cチップ );
\r
285 this._Form.b未保存 = true;
\r
288 if( ( flag && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )
\r
290 Cチップ cチップ3 = new Cチップ();
\r
291 cチップ3.tコピーfrom( cチップ );
\r
292 Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ3 );
\r
293 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo2, redo2 ) );
\r
294 c小節.listチップ.Remove( cチップ );
\r
296 this._Form.b未保存 = true;
\r
299 if( ( flag2 && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )
\r
301 Cチップ cチップ4 = new Cチップ();
\r
302 cチップ4.tコピーfrom( cチップ );
\r
303 Cチップ配置用UndoRedo redo3 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ4 );
\r
304 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo3, redo3 ) );
\r
305 c小節.listチップ.Remove( cチップ );
\r
307 this._Form.b未保存 = true;
\r
314 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
315 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
318 public void tチップを配置または置換する( int nレーン番号0to, int n譜面先頭からの位置grid, int nチップ値・整数, float fチップ値・浮動小数, bool b裏として配置 )
\r
320 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );
\r
323 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
324 this.tチップを削除する( nレーン番号0to, n譜面先頭からの位置grid );
\r
325 if( ( ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) || ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( nチップ値・整数 == 2 ) )
\r
327 this.tチップを削除する( nレーン番号0to + 1, n譜面先頭からの位置grid );
\r
328 this.tチップを削除する( nレーン番号0to + 2, n譜面先頭からの位置grid );
\r
330 Cレーン cレーン = this.listレーン[ nレーン番号0to ];
\r
331 Cチップ item = new Cチップ();
\r
332 item.nチャンネル番号00toFF = b裏として配置 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF;
\r
333 item.nレーン番号0to = nレーン番号0to;
\r
334 item.n位置grid = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
335 item.n値・整数1to1295 = nチップ値・整数;
\r
336 item.f値・浮動小数 = fチップ値・浮動小数;
\r
338 c小節.listチップ.Add( item );
\r
339 Cチップ cc = new Cチップ();
\r
340 cc.tコピーfrom( item );
\r
341 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );
\r
342 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のRedo ), redo, redo ) );
\r
343 int num = this.n現在の最大の小節番号を返す();
\r
344 if( c小節.n小節番号0to3599 == num )
\r
346 for( int i = num + 1; i <= ( num + 4 ); i++ )
\r
348 this.dic小節.Add( i, new C小節( i ) );
\r
349 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t小節挿入のUndo ), new DGRedoを実行する<int>( this.t小節挿入のRedo ), i, i ) );
\r
352 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
353 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
354 this._Form.b未保存 = true;
\r
357 public void tチップ削除のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
359 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
362 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
364 Cチップ cチップ = c小節.listチップ[ i ];
\r
365 if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )
\r
367 c小節.listチップ.RemoveAt( i );
\r
368 this._Form.b未保存 = true;
\r
374 public void tチップ削除のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
376 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
379 Cチップ item = new Cチップ();
\r
380 item.tコピーfrom( ur変更前.cc );
\r
381 c小節.listチップ.Add( item );
\r
382 this._Form.b未保存 = true;
\r
385 public void tチップ選択のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
387 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
390 cチップ.b確定選択中 = true;
\r
393 public void tチップ選択のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
395 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
398 cチップ.b確定選択中 = false;
\r
401 public void tチップ選択解除のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
403 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
406 cチップ.b確定選択中 = false;
\r
409 public void tチップ選択解除のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
411 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
414 cチップ.b確定選択中 = true;
\r
417 public void tチップ配置のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
419 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
422 Cチップ item = new Cチップ();
\r
423 item.tコピーfrom( ur変更前.cc );
\r
424 c小節.listチップ.Add( item );
\r
425 this._Form.b未保存 = true;
\r
428 public void tチップ配置のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
430 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
433 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
435 Cチップ cチップ = c小節.listチップ[ i ];
\r
436 if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )
\r
438 c小節.listチップ.RemoveAt( i );
\r
439 this._Form.b未保存 = true;
\r
445 public void tチップ番号置換のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
447 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
450 cチップ.n値・整数1to1295 = ur変更後.n値・整数1to1295;
\r
451 this._Form.b未保存 = true;
\r
454 public void tチップ番号置換のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
456 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更後.n小節番号0to, ur変更後.nレーン番号0to, ur変更後.n位置grid );
\r
459 cチップ.n値・整数1to1295 = ur変更前.n値・整数1to1295;
\r
460 this._Form.b未保存 = true;
\r
463 public void tチップ表裏反転のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
465 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
470 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;
\r
475 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;
\r
478 this._Form.b未保存 = true;
\r
481 public void tチップ表裏反転のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
483 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
488 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;
\r
493 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;
\r
496 this._Form.b未保存 = true;
\r
501 this.t初期化・listレーンの生成();
\r
502 this.t初期化・小節を10個まで作成する();
\r
503 this.t初期化・背景画像を生成する();
\r
504 this.t初期化・スクロールバーを初期設定する();
\r
506 public void t小節削除のRedo( int nダミー, int n削除する小節番号0to )
\r
508 this.dic小節.Remove( n削除する小節番号0to );
\r
509 int num = this.n現在の最大の小節番号を返す();
\r
510 for( int i = n削除する小節番号0to + 1; i <= num; i++ )
\r
512 C小節 c小節 = this.p小節を返す( i );
\r
515 this.dic小節.Remove( i );
\r
516 c小節.n小節番号0to3599 = i - 1;
\r
517 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
520 this._Form.b未保存 = true;
\r
522 public void t小節削除のUndo( int n削除された小節番号0to, int nダミー )
\r
524 for( int i = this.n現在の最大の小節番号を返す(); i >= n削除された小節番号0to; i-- )
\r
526 C小節 c小節 = this.p小節を返す( i );
\r
529 this.dic小節.Remove( i );
\r
530 c小節.n小節番号0to3599 = i + 1;
\r
531 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
534 this.dic小節.Add( n削除された小節番号0to, new C小節( n削除された小節番号0to ) );
\r
535 this._Form.b未保存 = true;
\r
537 public void t小節挿入のRedo( int nダミー, int n挿入する小節番号0to )
\r
539 for( int i = this.n現在の最大の小節番号を返す(); i >= n挿入する小節番号0to; i-- )
\r
541 C小節 c小節 = this.p小節を返す( i );
\r
544 this.dic小節.Remove( i );
\r
545 c小節.n小節番号0to3599 = i + 1;
\r
546 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
549 this.dic小節.Add( n挿入する小節番号0to, new C小節( n挿入する小節番号0to ) );
\r
550 this._Form.b未保存 = true;
\r
552 public void t小節挿入のUndo( int n挿入された小節番号0to, int nダミー )
\r
554 this.dic小節.Remove( n挿入された小節番号0to );
\r
555 int num = this.n現在の最大の小節番号を返す();
\r
556 for( int i = n挿入された小節番号0to + 1; i <= num; i++ )
\r
558 C小節 c小節 = this.p小節を返す( i );
\r
561 this.dic小節.Remove( i );
\r
562 c小節.n小節番号0to3599 = i - 1;
\r
563 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
566 this._Form.b未保存 = true;
\r
568 public void t小節長変更のRedo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )
\r
570 C小節 c小節 = this.p小節を返す( ur変更後.n小節番号0to );
\r
573 c小節.f小節長倍率 = ur変更後.f倍率;
\r
574 this._Form.b未保存 = true;
\r
577 public void t小節長変更のUndo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )
\r
579 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
582 c小節.f小節長倍率 = ur変更前.f倍率;
\r
583 this._Form.b未保存 = true;
\r
586 public void t垂直スクロールバーと譜面可視領域の上下位置の調整()
\r
588 VScrollBar bar = this._Form.vScrollBar譜面用垂直スクロールバー;
\r
589 PictureBox box = this._Form.pictureBox譜面パネル;
\r
591 bar.Maximum = this.n全小節の高さgridの合計を返す() - 1;
\r
592 bar.SmallChange = C小節.n基準の高さgrid / 0x10;
\r
593 bar.LargeChange = C小節.n基準の高さgrid;
\r
594 bar.Enabled = bar.Maximum > bar.LargeChange;
\r
597 this.n現在の譜面表示下辺の譜面先頭からの位置grid = ( ( bar.Maximum + 1 ) - bar.LargeChange ) - bar.Value;
\r
601 public void t水平スクロールバーと譜面パネル左右位置の調整()
\r
603 HScrollBar bar = this._Form.hScrollBar譜面用水平スクロールバー;
\r
604 SplitContainer container = this._Form.splitContainerタブと譜面を分割;
\r
605 PictureBox box = this._Form.pictureBox譜面パネル;
\r
607 bar.Maximum = box.Width - 1;
\r
608 bar.SmallChange = 5;
\r
609 bar.LargeChange = container.Panel2.Width;
\r
610 bar.Enabled = bar.Maximum > bar.LargeChange;
\r
613 int num = bar.Value;
\r
614 if( ( num + bar.LargeChange ) > bar.Maximum )
\r
616 num = ( bar.Maximum - bar.LargeChange ) + 1;
\r
619 box.Location = new Point( -num, 0 );
\r
623 public void t譜面を描画する( Graphics g, Size sz描画対象サイズdot, Rectangle rc可視領域dot )
\r
625 this.strfmt小節番号文字フォーマット.LineAlignment = StringAlignment.Center;
\r
626 this.strfmt小節番号文字フォーマット.Alignment = StringAlignment.Center;
\r
627 this.strfmtレーン名文字フォーマット.LineAlignment = StringAlignment.Near;
\r
628 this.strfmtレーン名文字フォーマット.Alignment = StringAlignment.Center;
\r
629 this.strfmtレーン割付チップ番号文字フォーマット.LineAlignment = StringAlignment.Near;
\r
630 this.strfmtレーン割付チップ番号文字フォーマット.Alignment = StringAlignment.Near;
\r
633 int num3 = this.n現在の譜面表示下辺の譜面先頭からの位置grid * C小節.n1グリッドの高さdot;
\r
634 int num4 = num3 + rc可視領域dot.Height;
\r
635 int num5 = this.n現在の最大の小節番号を返す();
\r
637 while( num6 <= num5 )
\r
639 C小節 cs = this.p小節を返す( num6 );
\r
642 num2 = num + cs.n小節長倍率を考慮した現在の小節の高さdot;
\r
649 Rectangle rectangle = new Rectangle();
\r
651 rectangle.Y = sz描画対象サイズdot.Height - ( num2 - num3 );
\r
652 rectangle.Width = sz描画対象サイズdot.Width;
\r
653 rectangle.Height = num2 - num;
\r
654 Rectangle rectangle2 = new Rectangle();
\r
655 rectangle2.X = rc可視領域dot.X;
\r
656 rectangle2.Y = rectangle.Y;
\r
657 rectangle2.Width = rc可視領域dot.Width;
\r
658 rectangle2.Height = rectangle.Height;
\r
659 this.t譜面を描画する・1小節を描画する( g, cs, rectangle, rectangle2 );
\r
665 Rectangle rectangle3 = new Rectangle();
\r
668 rectangle3.Width = sz描画対象サイズdot.Width;
\r
669 rectangle3.Height = nレーン割付チップ番号表示高さdot;
\r
670 this.t譜面を描画する・レーン割付チップを描画する( g, rectangle3 );
\r
673 rectangle3.Width = sz描画対象サイズdot.Width;
\r
674 rectangle3.Height = nレーン番号表示高さdot;
\r
675 this.t譜面を描画する・レーン名を描画する( g, rectangle3 );
\r
678 #region [ private ]
\r
679 //-----------------
\r
680 private Cメインフォーム _Form;
\r
681 private Brush brレーン割付番号文字ブラシ = new SolidBrush( Color.White );
\r
682 private Brush brレーン割付番号文字ブラシ影 = new SolidBrush( Color.Black );
\r
683 private Brush brレーン名文字ブラシ = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) );
\r
684 private Brush brレーン名文字ブラシ影 = new SolidBrush( Color.Black );
\r
685 private Brush br小節番号文字ブラシ = new SolidBrush( Color.FromArgb( 80, 0xff, 0xff, 0xff ) );
\r
686 private Font ftレーン割付チップ番号文字フォント = new Font( "MS UI Gothic", 7f, FontStyle.Regular );
\r
687 private Font ftレーン番号文字フォント = new Font( "MS US Gothic", 8f, FontStyle.Regular );
\r
688 private Font ft小節番号文字フォント = new Font( "MS UI Gothic", 50f, FontStyle.Regular );
\r
689 private Pen penガイド線ペン = new Pen( Color.FromArgb( 50, 50, 50 ) );
\r
690 private Pen penレーン区分線ペン細 = new Pen( Color.Gray );
\r
691 private Pen penレーン区分線ペン太 = new Pen( Color.White, 2f );
\r
692 private Pen pen小節線ペン = new Pen( Color.White, 2f );
\r
693 private Pen pen拍線ペン = new Pen( Color.Gray );
\r
694 private StringFormat strfmtレーン割付チップ番号文字フォーマット = new StringFormat();
\r
695 private StringFormat strfmtレーン名文字フォーマット = new StringFormat();
\r
696 private StringFormat strfmt小節番号文字フォーマット = new StringFormat();
\r
698 private void t初期化・listレーンの生成()
\r
700 this.listレーン.Clear();
\r
704 Cレーン item = new Cレーン();
\r
705 item.eレーン種別 = Cレーン.E種別.BPM;
\r
706 item.strレーン名 = "BPM";
\r
707 item.nチャンネル番号・表00toFF = 8;
\r
708 item.nチャンネル番号・裏00toFF = 3;
\r
709 item.b右側の線が太線 = true;
\r
710 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
711 item.n位置Xdot = num;
\r
713 this.listレーン.Add( item );
\r
716 item.eレーン種別 = Cレーン.E種別.WAV;
\r
717 item.strレーン名 = "LC";
\r
718 item.nチャンネル番号・表00toFF = 0x1a;
\r
719 item.nチャンネル番号・裏00toFF = 0x1a;
\r
720 item.b右側の線が太線 = true;
\r
721 item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff );
\r
722 item.n位置Xdot = num;
\r
724 this.listレーン.Add( item );
\r
727 item.eレーン種別 = Cレーン.E種別.WAV;
\r
728 item.strレーン名 = "HH";
\r
729 item.nチャンネル番号・表00toFF = 0x11;
\r
730 item.nチャンネル番号・裏00toFF = 0x18;
\r
731 item.b右側の線が太線 = false;
\r
732 item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff );
\r
733 item.n位置Xdot = num;
\r
735 this.listレーン.Add( item );
\r
738 item.eレーン種別 = Cレーン.E種別.WAV;
\r
739 item.strレーン名 = "SD";
\r
740 item.nチャンネル番号・表00toFF = 0x12;
\r
741 item.nチャンネル番号・裏00toFF = 0x12;
\r
742 item.b右側の線が太線 = false;
\r
743 item.col背景色 = Color.FromArgb( alpha, 0xff, 0xff, 0 );
\r
744 item.n位置Xdot = num;
\r
746 this.listレーン.Add( item );
\r
749 item.eレーン種別 = Cレーン.E種別.WAV;
\r
750 item.strレーン名 = "BD";
\r
751 item.nチャンネル番号・表00toFF = 0x13;
\r
752 item.nチャンネル番号・裏00toFF = 0x13;
\r
753 item.b右側の線が太線 = false;
\r
754 item.col背景色 = Color.FromArgb( alpha, 0xff, 0x7f, 0x7f );
\r
755 item.n位置Xdot = num;
\r
757 this.listレーン.Add( item );
\r
760 item.eレーン種別 = Cレーン.E種別.WAV;
\r
761 item.strレーン名 = "HT";
\r
762 item.nチャンネル番号・表00toFF = 20;
\r
763 item.nチャンネル番号・裏00toFF = 20;
\r
764 item.b右側の線が太線 = false;
\r
765 item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 );
\r
766 item.n位置Xdot = num;
\r
768 this.listレーン.Add( item );
\r
771 item.eレーン種別 = Cレーン.E種別.WAV;
\r
772 item.strレーン名 = "LT";
\r
773 item.nチャンネル番号・表00toFF = 0x15;
\r
774 item.nチャンネル番号・裏00toFF = 0x15;
\r
775 item.b右側の線が太線 = false;
\r
776 item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 );
\r
777 item.n位置Xdot = num;
\r
779 this.listレーン.Add( item );
\r
782 item.eレーン種別 = Cレーン.E種別.WAV;
\r
783 item.strレーン名 = "FT";
\r
784 item.nチャンネル番号・表00toFF = 0x17;
\r
785 item.nチャンネル番号・裏00toFF = 0x17;
\r
786 item.b右側の線が太線 = false;
\r
787 item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0xff );
\r
788 item.n位置Xdot = num;
\r
790 this.listレーン.Add( item );
\r
793 item.eレーン種別 = Cレーン.E種別.WAV;
\r
794 item.strレーン名 = "CY";
\r
795 item.nチャンネル番号・表00toFF = 0x16;
\r
796 item.nチャンネル番号・裏00toFF = 0x19;
\r
797 item.b右側の線が太線 = false;
\r
798 item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0xff );
\r
799 item.n位置Xdot = num;
\r
801 this.listレーン.Add( item );
\r
804 item.eレーン種別 = Cレーン.E種別.FI;
\r
805 item.strレーン名 = "FI";
\r
806 item.nチャンネル番号・表00toFF = 0x53;
\r
807 item.nチャンネル番号・裏00toFF = 0x53;
\r
808 item.b右側の線が太線 = true;
\r
809 item.col背景色 = Color.FromArgb( alpha, 0xff, 0xff, 0 );
\r
810 item.n位置Xdot = num;
\r
812 this.listレーン.Add( item );
\r
815 item.eレーン種別 = Cレーン.E種別.WAV;
\r
816 item.strレーン名 = "BGM";
\r
817 item.nチャンネル番号・表00toFF = 1;
\r
818 item.nチャンネル番号・裏00toFF = 1;
\r
819 item.b右側の線が太線 = true;
\r
820 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
821 item.n位置Xdot = num;
\r
823 this.listレーン.Add( item );
\r
826 item.eレーン種別 = Cレーン.E種別.WAV;
\r
827 item.strレーン名 = "SE1";
\r
828 item.nチャンネル番号・表00toFF = 0x61;
\r
829 item.nチャンネル番号・裏00toFF = 0x61;
\r
830 item.b右側の線が太線 = false;
\r
831 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
832 item.n位置Xdot = num;
\r
834 this.listレーン.Add( item );
\r
837 item.eレーン種別 = Cレーン.E種別.WAV;
\r
838 item.strレーン名 = "SE2";
\r
839 item.nチャンネル番号・表00toFF = 0x62;
\r
840 item.nチャンネル番号・裏00toFF = 0x62;
\r
841 item.b右側の線が太線 = false;
\r
842 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
843 item.n位置Xdot = num;
\r
845 this.listレーン.Add( item );
\r
848 item.eレーン種別 = Cレーン.E種別.WAV;
\r
849 item.strレーン名 = "SE3";
\r
850 item.nチャンネル番号・表00toFF = 0x63;
\r
851 item.nチャンネル番号・裏00toFF = 0x63;
\r
852 item.b右側の線が太線 = false;
\r
853 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
854 item.n位置Xdot = num;
\r
856 this.listレーン.Add( item );
\r
859 item.eレーン種別 = Cレーン.E種別.WAV;
\r
860 item.strレーン名 = "SE4";
\r
861 item.nチャンネル番号・表00toFF = 100;
\r
862 item.nチャンネル番号・裏00toFF = 100;
\r
863 item.b右側の線が太線 = false;
\r
864 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
865 item.n位置Xdot = num;
\r
867 this.listレーン.Add( item );
\r
870 item.eレーン種別 = Cレーン.E種別.WAV;
\r
871 item.strレーン名 = "SE5";
\r
872 item.nチャンネル番号・表00toFF = 0x65;
\r
873 item.nチャンネル番号・裏00toFF = 0x65;
\r
874 item.b右側の線が太線 = false;
\r
875 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
876 item.n位置Xdot = num;
\r
878 this.listレーン.Add( item );
\r
881 item.eレーン種別 = Cレーン.E種別.GtV;
\r
882 item.strレーン名 = "GtV";
\r
883 item.nチャンネル番号・表00toFF = 0;
\r
884 item.nチャンネル番号・裏00toFF = 0;
\r
885 item.b右側の線が太線 = true;
\r
886 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
887 item.n位置Xdot = num;
\r
889 this.listレーン.Add( item );
\r
892 item.eレーン種別 = Cレーン.E種別.GtR;
\r
893 item.strレーン名 = "GtR";
\r
894 item.nチャンネル番号・表00toFF = 0;
\r
895 item.nチャンネル番号・裏00toFF = 0;
\r
896 item.b右側の線が太線 = false;
\r
897 item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 );
\r
898 item.n位置Xdot = num;
\r
900 this.listレーン.Add( item );
\r
903 item.eレーン種別 = Cレーン.E種別.GtG;
\r
904 item.strレーン名 = "GtG";
\r
905 item.nチャンネル番号・表00toFF = 0;
\r
906 item.nチャンネル番号・裏00toFF = 0;
\r
907 item.b右側の線が太線 = false;
\r
908 item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 );
\r
909 item.n位置Xdot = num;
\r
911 this.listレーン.Add( item );
\r
914 item.eレーン種別 = Cレーン.E種別.GtB;
\r
915 item.strレーン名 = "GtB";
\r
916 item.nチャンネル番号・表00toFF = 0;
\r
917 item.nチャンネル番号・裏00toFF = 0;
\r
918 item.b右側の線が太線 = false;
\r
919 item.col背景色 = Color.FromArgb( alpha, 0, 0x80, 0xff );
\r
920 item.n位置Xdot = num;
\r
922 this.listレーン.Add( item );
\r
925 item.eレーン種別 = Cレーン.E種別.GtW;
\r
926 item.strレーン名 = "GtW";
\r
927 item.nチャンネル番号・表00toFF = 40;
\r
928 item.nチャンネル番号・裏00toFF = 40;
\r
929 item.b右側の線が太線 = true;
\r
930 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
931 item.n位置Xdot = num;
\r
933 this.listレーン.Add( item );
\r
936 item.eレーン種別 = Cレーン.E種別.BsV;
\r
937 item.strレーン名 = "BsV";
\r
938 item.nチャンネル番号・表00toFF = 0;
\r
939 item.nチャンネル番号・裏00toFF = 0;
\r
940 item.b右側の線が太線 = true;
\r
941 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
942 item.n位置Xdot = num;
\r
944 this.listレーン.Add( item );
\r
947 item.eレーン種別 = Cレーン.E種別.BsR;
\r
948 item.strレーン名 = "BsR";
\r
949 item.nチャンネル番号・表00toFF = 0;
\r
950 item.nチャンネル番号・裏00toFF = 0;
\r
951 item.b右側の線が太線 = false;
\r
952 item.col背景色 = Color.FromArgb( alpha, 0xff, 0, 0 );
\r
953 item.n位置Xdot = num;
\r
955 this.listレーン.Add( item );
\r
958 item.eレーン種別 = Cレーン.E種別.BsG;
\r
959 item.strレーン名 = "BsG";
\r
960 item.nチャンネル番号・表00toFF = 0;
\r
961 item.nチャンネル番号・裏00toFF = 0;
\r
962 item.b右側の線が太線 = false;
\r
963 item.col背景色 = Color.FromArgb( alpha, 0, 0xff, 0 );
\r
964 item.n位置Xdot = num;
\r
966 this.listレーン.Add( item );
\r
969 item.eレーン種別 = Cレーン.E種別.BsB;
\r
970 item.strレーン名 = "BsB";
\r
971 item.nチャンネル番号・表00toFF = 0;
\r
972 item.nチャンネル番号・裏00toFF = 0;
\r
973 item.b右側の線が太線 = false;
\r
974 item.col背景色 = Color.FromArgb( alpha, 0, 0x80, 0xff );
\r
975 item.n位置Xdot = num;
\r
977 this.listレーン.Add( item );
\r
980 item.eレーン種別 = Cレーン.E種別.BsW;
\r
981 item.strレーン名 = "BsW";
\r
982 item.nチャンネル番号・表00toFF = 0xa8;
\r
983 item.nチャンネル番号・裏00toFF = 0xa8;
\r
984 item.b右側の線が太線 = true;
\r
985 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
986 item.n位置Xdot = num;
\r
988 this.listレーン.Add( item );
\r
991 item.eレーン種別 = Cレーン.E種別.AVI;
\r
992 item.strレーン名 = "AVI";
\r
993 item.nチャンネル番号・表00toFF = 0x54;
\r
994 item.nチャンネル番号・裏00toFF = 0x54;
\r
995 item.b右側の線が太線 = true;
\r
996 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
997 item.n位置Xdot = num;
\r
999 this.listレーン.Add( item );
\r
1000 num += item.n幅dot;
\r
1001 item = new Cレーン();
\r
1002 item.eレーン種別 = Cレーン.E種別.BMP;
\r
1003 item.strレーン名 = "BG1";
\r
1004 item.nチャンネル番号・表00toFF = 4;
\r
1005 item.nチャンネル番号・裏00toFF = 0xc4;
\r
1006 item.b右側の線が太線 = true;
\r
1007 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
1008 item.n位置Xdot = num;
\r
1009 item.n幅dot = num2;
\r
1010 this.listレーン.Add( item );
\r
1011 num += item.n幅dot;
\r
1012 item = new Cレーン();
\r
1013 item.eレーン種別 = Cレーン.E種別.BMP;
\r
1014 item.strレーン名 = "BG2";
\r
1015 item.nチャンネル番号・表00toFF = 7;
\r
1016 item.nチャンネル番号・裏00toFF = 0xc7;
\r
1017 item.b右側の線が太線 = false;
\r
1018 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
1019 item.n位置Xdot = num;
\r
1020 item.n幅dot = num2;
\r
1021 this.listレーン.Add( item );
\r
1022 num += item.n幅dot;
\r
1023 item = new Cレーン();
\r
1024 item.eレーン種別 = Cレーン.E種別.BMP;
\r
1025 item.strレーン名 = "BG3";
\r
1026 item.nチャンネル番号・表00toFF = 0x55;
\r
1027 item.nチャンネル番号・裏00toFF = 0xd5;
\r
1028 item.b右側の線が太線 = false;
\r
1029 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
1030 item.n位置Xdot = num;
\r
1031 item.n幅dot = num2;
\r
1032 this.listレーン.Add( item );
\r
1033 num += item.n幅dot;
\r
1034 item = new Cレーン();
\r
1035 item.eレーン種別 = Cレーン.E種別.BMP;
\r
1036 item.strレーン名 = "BG4";
\r
1037 item.nチャンネル番号・表00toFF = 0x56;
\r
1038 item.nチャンネル番号・裏00toFF = 0xd6;
\r
1039 item.b右側の線が太線 = false;
\r
1040 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
1041 item.n位置Xdot = num;
\r
1042 item.n幅dot = num2;
\r
1043 this.listレーン.Add( item );
\r
1044 num += item.n幅dot;
\r
1045 item = new Cレーン();
\r
1046 item.eレーン種別 = Cレーン.E種別.BMP;
\r
1047 item.strレーン名 = "BG5";
\r
1048 item.nチャンネル番号・表00toFF = 0x57;
\r
1049 item.nチャンネル番号・裏00toFF = 0xd7;
\r
1050 item.b右側の線が太線 = false;
\r
1051 item.col背景色 = Color.FromArgb( alpha, 160, 160, 160 );
\r
1052 item.n位置Xdot = num;
\r
1053 item.n幅dot = num2;
\r
1054 this.listレーン.Add( item );
\r
1055 num += item.n幅dot;
\r
1057 private void t初期化・スクロールバーを初期設定する()
\r
1059 this._Form.hScrollBar譜面用水平スクロールバー.Value = 0;
\r
1060 this._Form.vScrollBar譜面用垂直スクロールバー.Value = 0;
\r
1061 this.t水平スクロールバーと譜面パネル左右位置の調整();
\r
1062 this.t垂直スクロールバーと譜面可視領域の上下位置の調整();
\r
1063 this._Form.vScrollBar譜面用垂直スクロールバー.Value = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;
\r
1065 private void t初期化・小節を10個まで作成する()
\r
1067 for( int i = 0; i < 10; i++ )
\r
1069 this.dic小節.Add( i, new C小節( i ) );
\r
1072 private void t初期化・背景画像を生成する()
\r
1075 foreach( Cレーン cレーン in this.listレーン )
\r
1077 width += cレーン.n幅dot;
\r
1079 this.bmp背景画像 = new Bitmap( width, 1 );
\r
1080 Graphics graphics = Graphics.FromImage( this.bmp背景画像 );
\r
1082 foreach( Cレーン cレーン2 in this.listレーン )
\r
1084 graphics.FillRectangle( new SolidBrush( cレーン2.col背景色 ), x, 0, cレーン2.n幅dot, this.bmp背景画像.Height );
\r
1087 graphics.Dispose();
\r
1088 this._Form.pictureBox譜面パネル.Width = this.bmp背景画像.Width;
\r
1089 this._Form.pictureBox譜面パネル.BackgroundImage = this.bmp背景画像;
\r
1090 this._Form.pictureBox譜面パネル.BackgroundImageLayout = ImageLayout.Tile;
\r
1092 private void t譜面を描画する・1小節を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域, Rectangle rc小節のPicBox内可視領域 )
\r
1094 this.t譜面を描画する・1小節を描画する・小節番号を描画する( g, cs, rc小節のPicBox内可視領域 );
\r
1095 this.t譜面を描画する・1小節を描画する・ガイド線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
1096 this.t譜面を描画する・1小節を描画する・拍線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
1097 this.t譜面を描画する・1小節を描画する・レーン区分線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
1098 this.t譜面を描画する・1小節を描画する・小節線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
1099 this.t譜面を描画する・1小節を描画する・チップを描画する( g, cs, rc小節のPicBox内描画領域 );
\r
1101 private void t譜面を描画する・1小節を描画する・ガイド線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
1103 if( this.n現在のガイド幅grid > 1 )
\r
1105 int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;
\r
1106 for( int i = 0; i < num; i += this.n現在のガイド幅grid )
\r
1108 int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );
\r
1109 g.DrawLine( this.penガイド線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );
\r
1113 private void t譜面を描画する・1小節を描画する・チップを描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
1115 cs.listチップ.Sort();
\r
1116 Rectangle rectangle = new Rectangle( 0, 0, 0, 0 );
\r
1117 foreach( Cチップ cチップ in cs.listチップ )
\r
1119 if( cチップ.n枠外レーン数 != 0 )
\r
1123 int num = cチップ.n位置grid;
\r
1124 Cレーン cレーン = this.listレーン[ cチップ.nレーン番号0to ];
\r
1125 rectangle.X = cレーン.n位置Xdot;
\r
1126 rectangle.Y = ( rc小節のPicBox内描画領域.Bottom - ( num * C小節.n1グリッドの高さdot ) ) - Cチップ.nチップの高さdot;
\r
1127 rectangle.Width = cレーン.n幅dot;
\r
1128 rectangle.Height = Cチップ.nチップの高さdot;
\r
1131 switch( cレーン.eレーン種別 )
\r
1133 case Cレーン.E種別.GtR:
\r
1134 case Cレーン.E種別.GtG:
\r
1135 case Cレーン.E種別.GtB:
\r
1136 case Cレーン.E種別.BsR:
\r
1137 case Cレーン.E種別.BsG:
\r
1138 case Cレーン.E種別.BsB:
\r
1139 if( ( ( cレーン.eレーン種別 != Cレーン.E種別.GtR ) || ( cチップ.n値・整数1to1295 != 2 ) ) && ( ( cレーン.eレーン種別 != Cレーン.E種別.BsR ) || ( cチップ.n値・整数1to1295 != 2 ) ) )
\r
1143 rectangle.Width = cレーン.n幅dot * 3;
\r
1144 Cチップ.tOPENチップを描画する( g, rectangle );
\r
1147 case Cレーン.E種別.BPM:
\r
1148 Cチップ.t表チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );
\r
1152 Cチップ.t表チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );
\r
1155 Cチップ.t表チップを描画する( g, rectangle, -1, cレーン.col背景色 );
\r
1157 else if( cレーン.eレーン種別 == Cレーン.E種別.BPM )
\r
1159 Cチップ.t裏チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );
\r
1163 Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );
\r
1166 if( cチップ.bドラッグで選択中 || cチップ.b確定選択中 )
\r
1168 Cチップ.tチップの周囲の太枠を描画する( g, rectangle );
\r
1172 private void t譜面を描画する・1小節を描画する・レーン区分線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
1175 foreach( Cレーン cレーン in this.listレーン )
\r
1177 Pen pen = cレーン.b右側の線が太線 ? this.penレーン区分線ペン太 : this.penレーン区分線ペン細;
\r
1178 g.DrawLine( pen, num, rc小節のPicBox内描画領域.Top, num, rc小節のPicBox内描画領域.Bottom );
\r
1179 num += cレーン.n幅dot;
\r
1182 private void t譜面を描画する・1小節を描画する・小節線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
1184 Rectangle rectangle = rc小節のPicBox内描画領域;
\r
1185 g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Bottom, rectangle.Right, rectangle.Bottom );
\r
1186 g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Top, rectangle.Right, rectangle.Top );
\r
1188 private void t譜面を描画する・1小節を描画する・小節番号を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内可視領域 )
\r
1190 g.DrawString( C変換.str小節番号を文字列3桁に変換して返す( cs.n小節番号0to3599 ), this.ft小節番号文字フォント, this.br小節番号文字ブラシ, rc小節のPicBox内可視領域, this.strfmt小節番号文字フォーマット );
\r
1192 private void t譜面を描画する・1小節を描画する・拍線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
1194 int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;
\r
1195 for( int i = 0; i < num; i += C小節.n基準の高さgrid / 4 )
\r
1197 int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );
\r
1198 g.DrawLine( this.pen拍線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );
\r
1201 private void t譜面を描画する・レーン割付チップを描画する( Graphics g, Rectangle rc小節のPicBox内描画領域 )
\r
1203 LinearGradientBrush brush = new LinearGradientBrush( rc小節のPicBox内描画領域, Color.FromArgb( 0xff, 0, 0, 100 ), Color.FromArgb( 0xff, 100, 100, 0xff ), LinearGradientMode.Vertical );
\r
1204 g.FillRectangle( brush, rc小節のPicBox内描画領域 );
\r
1206 Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );
\r
1207 foreach( Cレーン cレーン in this.listレーン )
\r
1209 layoutRectangle.X = ( rc小節のPicBox内描画領域.X + cレーン.n位置Xdot ) + 1;
\r
1210 layoutRectangle.Y = rc小節のPicBox内描画領域.Y + 1;
\r
1211 layoutRectangle.Width = cレーン.n幅dot;
\r
1212 layoutRectangle.Height = rc小節のPicBox内描画領域.Height;
\r
1213 if( cレーン.nレーン割付チップ・表0or1to1295 > 0 )
\r
1215 string s = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 );
\r
1216 g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
1217 layoutRectangle.X--;
\r
1218 layoutRectangle.Y--;
\r
1219 g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
1220 layoutRectangle.X++;
\r
1221 layoutRectangle.Y++;
\r
1223 layoutRectangle.X += cレーン.n幅dot / 2;
\r
1224 if( cレーン.nレーン割付チップ・裏0or1to1295 > 0 )
\r
1226 string str2 = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 );
\r
1227 g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
1228 layoutRectangle.X--;
\r
1229 layoutRectangle.Y--;
\r
1230 g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
1234 private void t譜面を描画する・レーン名を描画する( Graphics g, Rectangle rcレーン名のPicBox内描画領域 )
\r
1236 LinearGradientBrush brush = new LinearGradientBrush( rcレーン名のPicBox内描画領域, Color.FromArgb( 0xff, 100, 100, 0xff ), Color.FromArgb( 0, 0, 0, 0xff ), LinearGradientMode.Vertical );
\r
1237 g.FillRectangle( brush, rcレーン名のPicBox内描画領域 );
\r
1239 Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );
\r
1240 foreach( Cレーン cレーン in this.listレーン )
\r
1242 layoutRectangle.X = ( rcレーン名のPicBox内描画領域.X + cレーン.n位置Xdot ) + 2;
\r
1243 layoutRectangle.Y = rcレーン名のPicBox内描画領域.Y + 2;
\r
1244 layoutRectangle.Width = cレーン.n幅dot;
\r
1245 layoutRectangle.Height = 0x18;
\r
1246 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ影, layoutRectangle, this.strfmtレーン名文字フォーマット );
\r
1247 layoutRectangle.X -= 2;
\r
1248 layoutRectangle.Y -= 2;
\r
1249 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ, layoutRectangle, this.strfmtレーン名文字フォーマット );
\r
1252 //-----------------
\r