//──────────────────────────────────────── /// <summary> /// この関数は、Function2_LoadCsvに渡されます。 /// </summary> /// <param name="mNum"></param> /// <param name="scale2"></param> public void UsercontrolCanvas_OnChangeSpritePartsnumber(Memory4bSpritePartsnumber mNum, float scale2) { if (this.Owner_MemoryApplication.IsDisplayExecute && mNum.IsDefinitionExpression) { // 数値表示モードでは、名前定義は表示しません。 mNum.Scale = 1.0f; mNum.BoundsCircleScaledOnBackground = new Rectangle(); mNum.BoundsTextScaledOnBackground = new Rectangle(); goto gt_EndMethod; } mNum.Scale = scale2; float x = scale2 * mNum.LocationOnBackgroundActual.X; float y = scale2 * mNum.LocationOnBackgroundActual.Y; // ドット絵の1ドットを最小単位にして動くよう調整。スケールは 1、または 2の倍数の整数。 x = (float)((int)(x / scale2) * (int)scale2); y = (float)((int)(y / scale2) * (int)scale2); // 番号スプライトのサイズ string sText = mNum.GetText(true, this.Owner_MemoryApplication); Graphics g = this.CreateGraphics(); SizeF sizeF = g.MeasureString(sText, mNum.Font); g.Dispose(); // センタリング x -= sizeF.Width / 2; y -= sizeF.Height / 2; // 後ろに、少し大きめの丸を塗ります。 mNum.BoundsCircleScaledOnBackground = new Rectangle( (int)x - 4, (int)y - 4, (int)sizeF.Width + 8, (int)sizeF.Height + 2 ); mNum.BoundsTextScaledOnBackground = new Rectangle( (int)x, (int)y, (int)(scale2 * sizeF.Width), (int)(scale2 * sizeF.Height) ); goto gt_EndMethod; // // // // gt_EndMethod: mNum.IsDirty = false; }
//──────────────────────────────────────── /// <summary> /// この関数は、Function2_LoadCsvに渡されます。 /// </summary> /// <param name="mNum"></param> /// <param name="scale2"></param> public void UsercontrolCanvas_OnChangeSpritePartsnumber(Memory4bSpritePartsnumber mNum, float scale2) { if (this.Owner_MemoryApplication.IsDisplayExecute && mNum.IsDefinitionExpression) { // 数値表示モードでは、名前定義は表示しません。 mNum.Scale = 1.0f; mNum.BoundsCircleScaledOnBackground = new Rectangle(); mNum.BoundsTextScaledOnBackground = new Rectangle(); goto gt_EndMethod; } mNum.Scale = scale2; float x = scale2 * mNum.LocationOnBackgroundActual.X; float y = scale2 * mNum.LocationOnBackgroundActual.Y; // ドット絵の1ドットを最小単位にして動くよう調整。スケールは 1、または 2の倍数の整数。 x = (float)((int)(x / scale2) * (int)scale2); y = (float)((int)(y / scale2) * (int)scale2); // 番号スプライトのサイズ string sText = mNum.GetText( true, this.Owner_MemoryApplication); Graphics g = this.CreateGraphics(); SizeF sizeF = g.MeasureString(sText, mNum.Font); g.Dispose(); // センタリング x -= sizeF.Width / 2; y -= sizeF.Height / 2; // 後ろに、少し大きめの丸を塗ります。 mNum.BoundsCircleScaledOnBackground = new Rectangle( (int)x - 4, (int)y - 4, (int)sizeF.Width + 8, (int)sizeF.Height + 2 ); mNum.BoundsTextScaledOnBackground = new Rectangle( (int)x, (int)y, (int)(scale2 * sizeF.Width), (int)(scale2 * sizeF.Height) ); goto gt_EndMethod; // // // // gt_EndMethod: mNum.IsDirty = false; }
//──────────────────────────────────────── public void PaintSprite( Graphics g, Memory4bSpritePartsnumber memSprNum, bool isOnWindow, float scale2) { if (this.IsDisplayExecute && memSprNum.IsDefinitionExpression) { // 数値表示モードでは、名前定義は表示しません。 goto process_end; } if (memSprNum.IsDirty || memSprNum.Scale != scale2) { memSprNum.Delegate_OnChangeSprite_Partsnumber(memSprNum, scale2);//, numPutUc } Rectangle boundsCircle; if (isOnWindow) { boundsCircle = new Rectangle( memSprNum.BoundsCircleScaledOnBackground.X + (int)this.BgLocationScaled.X, memSprNum.BoundsCircleScaledOnBackground.Y + (int)this.BgLocationScaled.Y, memSprNum.BoundsCircleScaledOnBackground.Width, memSprNum.BoundsCircleScaledOnBackground.Height ); } else { boundsCircle = memSprNum.BoundsCircleScaledOnBackground; } Rectangle boundsText; if (isOnWindow) { boundsText = new Rectangle( memSprNum.BoundsTextScaledOnBackground.X + (int)this.BgLocationScaled.X, memSprNum.BoundsTextScaledOnBackground.Y + (int)this.BgLocationScaled.Y, memSprNum.BoundsTextScaledOnBackground.Width, memSprNum.BoundsTextScaledOnBackground.Height ); } else { boundsText = new Rectangle( memSprNum.BoundsTextScaledOnBackground.X, memSprNum.BoundsTextScaledOnBackground.Y, memSprNum.BoundsTextScaledOnBackground.Width, memSprNum.BoundsTextScaledOnBackground.Height ); } //// 番号スプライトのサイズ string sText = memSprNum.GetText(true, this); // 後ろに、少し大きめの丸を塗ります。 Brush backBrush; if (memSprNum.IsMouseTarget) { backBrush = Brushes.YellowGreen; } else { backBrush = memSprNum.BrushBackground; } g.FillEllipse(backBrush, boundsCircle.X, boundsCircle.Y, boundsCircle.Width, boundsCircle.Height); g.DrawEllipse(memSprNum.PenForeground, boundsCircle.X, boundsCircle.Y, boundsCircle.Width, boundsCircle.Height); // 影 g.DrawString( sText, memSprNum.Font, Brushes.Black, boundsText.Location ); boundsText.Offset(-1, -1); // 文字 g.DrawString( sText, memSprNum.Font, Brushes.White, boundsText.Location ); goto process_end; // // // // process_end: ; }