// ステージ表示用のブラシを作成 private void MakeStageBrushes() { if (loginfo.StageNames == null) { return; } ReadColorDef(); StageBrushSet blueBrush = new StageBrushSet( GetStageBrush(Color.MediumTurquoise.ToArgb(), false), GetStageBrush(Color.MediumTurquoise.ToArgb(), true) ); StageBrushSet redBrush = new StageBrushSet( GetStageBrush(Color.Salmon.ToArgb(), false), GetStageBrush(Color.Salmon.ToArgb(), true) ); stageBrushes = new List <List <StageBrushSet> >(); for (int segmentID = 0; segmentID < loginfo.StageNames.Count; segmentID++) { var stageNames = loginfo.StageNames[segmentID]; List <StageBrushSet> brushes = new List <StageBrushSet>(); foreach (var name in stageNames) { StageBrushSet set = DefaultStageBrush; if (config.ColorScheme == ColorScheme.Default) { if (brushMap[segmentID].ContainsKey(name)) { set = brushMap[segmentID][name]; } } else if (config.ColorScheme == ColorScheme.Blue) { set = blueBrush; } else if (config.ColorScheme == ColorScheme.Red) { set = redBrush; } brushes.Add(set); } stageBrushes.Add(brushes); } }
// ステージ一つ分の描画 private void DrawStage( Graphics renderTarget, int stageID, int segmentID, int x, int y, int length, string stageName, bool flushed ) { if (length == 0) { return; } SizeF cell = coordinateSystem.Cell; Size stageSize = new Size( length * (int)cell.Width, (int)cell.Height - CellMarginHeight * 2 ); Rectangle rect = new Rectangle( x, y, stageSize.Width, stageSize.Height ); StageBrushSet brushSet = stageBrushes[segmentID][stageID]; Brush brush = flushed ? brushSet.flushed : brushSet.normal; renderTarget.FillRectangle(brush, rect); if (currentViewSetting.DrawOutline) { renderTarget.DrawRectangle(Pens.Black, rect); } if (currentViewSetting.DrawStageName) { Font stageFont = StageFont; PointF p = rect.Location; SizeF size = renderTarget.MeasureString(stageName, stageFont); p.X += cell.Width / 2 - size.Width / 2; p.Y += cell.Height / 2 - size.Height / 2; renderTarget.DrawString(stageName, stageFont, Brushes.Black, p); for (int j = 1; j < length; j++) { p.X = rect.Location.X + j * cell.Width; if (!renderTarget.ClipBounds.IntersectsWith(new RectangleF(p, cell))) { continue; } String s = (j + 1).ToString(); size = renderTarget.MeasureString(s, stageFont); p.X += cell.Width / 2 - size.Width / 2; renderTarget.DrawString(s, stageFont, Brushes.Gray, p); } } }