private void previewPanel_Paint(object sender, PaintEventArgs e)
{
if ((_view != null) && (udLoop.Value < _view.Loops.Count) &&
(udFrame.Value < _view.Loops[(int)udLoop.Value].Frames.Count))
{
ViewFrame thisFrame = _view.Loops[(int)udLoop.Value].Frames[(int)udFrame.Value];
int spriteNum = thisFrame.Image;
SpriteInfo info = Factory.NativeProxy.GetSpriteInfo(spriteNum);
int spriteWidth = info.Width;
int spriteHeight = info.Height;
// Draw low-res sprites larger (TODO: find out why, perhaps just for the better looks?)
if (info.Resolution == SpriteImportResolution.LowRes)
{
spriteWidth *= 2;
spriteHeight *= 2;
}
int x = 0, y;
y = previewPanel.ClientSize.Height - spriteHeight;
if (chkCentrePivot.Checked)
{
x = previewPanel.ClientSize.Width / 2 - spriteWidth / 2;
}
if ((spriteWidth <= previewPanel.ClientSize.Width) &&
(spriteHeight <= previewPanel.ClientSize.Height))
{
IntPtr hdc = e.Graphics.GetHdc();
Factory.NativeProxy.DrawSprite(hdc, x, y, spriteNum, thisFrame.Flipped);
e.Graphics.ReleaseHdc();
}
else
{
Bitmap bmp = Utilities.GetBitmapForSpriteResizedKeepingAspectRatio(new Sprite(spriteNum, spriteWidth, spriteHeight), previewPanel.ClientSize.Width, previewPanel.ClientSize.Height, chkCentrePivot.Checked, false, SystemColors.Control);
if (thisFrame.Flipped)
{
Point urCorner = new Point(0, 0);
Point ulCorner = new Point(bmp.Width, 0);
Point llCorner = new Point(bmp.Width, bmp.Height);
Point[] destPara = { ulCorner, urCorner, llCorner };
e.Graphics.DrawImage(bmp, destPara);
}
else
{
e.Graphics.DrawImage(bmp, 1, 1);
}
bmp.Dispose();
}
}
}