comparison FBGUI/FBGUI.cs @ 34:70bde4fa6a2f

FBGUI: Fixed image scaling in FBGImageBox
author Ivo Smits <Ivo@UCIS.nl>
date Sun, 21 Apr 2013 17:01:03 +0200
parents e9b704f193df
children 41b2d01ae458
comparison
equal deleted inserted replaced
33:e9b704f193df 34:70bde4fa6a2f
1371 public class FBGImageBox : FBGControl { 1371 public class FBGImageBox : FBGControl {
1372 Image image = null; 1372 Image image = null;
1373 Image scaledImage = null; 1373 Image scaledImage = null;
1374 Size imageSize; 1374 Size imageSize;
1375 Boolean ownsImage = false; 1375 Boolean ownsImage = false;
1376 Boolean shouldScaleImage = false;
1376 PictureBoxSizeMode sizeMode = PictureBoxSizeMode.Normal; 1377 PictureBoxSizeMode sizeMode = PictureBoxSizeMode.Normal;
1377 Rectangle imageRect; 1378 Rectangle imageRect;
1378 public Image Image { get { return image; } set { SetImage(value, false); } } 1379 public Image Image { get { return image; } set { SetImage(value, false); } }
1379 public Boolean PreScaleImage { get; set; } 1380 public Boolean PreScaleImage { get; set; }
1380 public void SetOwnedImage(Image img) { SetImage(img, true); } 1381 public void SetOwnedImage(Image img) { SetImage(img, true); }
1394 if (Bounds.Size != value.Size) UpdateImageRect(value.Size); 1395 if (Bounds.Size != value.Size) UpdateImageRect(value.Size);
1395 base.Bounds = value; 1396 base.Bounds = value;
1396 } 1397 }
1397 } 1398 }
1398 private void UpdateImageRect(Size csize) { 1399 private void UpdateImageRect(Size csize) {
1399 if (scaledImage != null && scaledImage != image) scaledImage.Dispose(); 1400 shouldScaleImage = false;
1401 if (scaledImage != null) scaledImage.Dispose();
1400 scaledImage = null; 1402 scaledImage = null;
1401 if (image == null) return; 1403 if (image == null) return;
1402 Boolean boundsset = !csize.IsEmpty; 1404 Boolean boundsset = !csize.IsEmpty;
1403 if (!boundsset && sizeMode == PictureBoxSizeMode.AutoSize) { 1405 if (!boundsset && sizeMode == PictureBoxSizeMode.AutoSize) {
1404 scaledImage = image;
1405 Size = imageSize; 1406 Size = imageSize;
1406 return; 1407 return;
1407 } 1408 }
1408 if (!boundsset) csize = Bounds.Size; 1409 if (!boundsset) csize = Bounds.Size;
1409 switch (sizeMode) { 1410 switch (sizeMode) {
1423 float rat = Math.Min(xrat, yrat); 1424 float rat = Math.Min(xrat, yrat);
1424 SizeF dispsize = new SizeF(imageSize.Width * rat, imageSize.Height * rat); 1425 SizeF dispsize = new SizeF(imageSize.Width * rat, imageSize.Height * rat);
1425 imageRect = Rectangle.Round(new RectangleF(csize.Width / 2f - dispsize.Width / 2f, csize.Height / 2f - dispsize.Height / 2f, dispsize.Width, dispsize.Height)); 1426 imageRect = Rectangle.Round(new RectangleF(csize.Width / 2f - dispsize.Width / 2f, csize.Height / 2f - dispsize.Height / 2f, dispsize.Width, dispsize.Height));
1426 break; 1427 break;
1427 } 1428 }
1428 if (imageRect.Size == imageSize) scaledImage = image; 1429 shouldScaleImage = imageRect.Size != imageSize;
1429 if (!boundsset) Invalidate(); 1430 if (!boundsset) Invalidate();
1430 } 1431 }
1431 protected override void Paint(Graphics g) { 1432 protected override void Paint(Graphics g) {
1432 if (!Visible) return; 1433 if (!Visible) return;
1433 base.Paint(g); 1434 base.Paint(g);
1434 if (PreScaleImage && scaledImage == null && image != null) scaledImage = new Bitmap(image, imageRect.Size); 1435 if (shouldScaleImage && PreScaleImage && image != null) {
1435 if (scaledImage != null) g.DrawImage(image, imageRect); 1436 scaledImage = new Bitmap(image, imageRect.Size);
1437 shouldScaleImage = false;
1438 }
1439 if (scaledImage != null) g.DrawImage(scaledImage, imageRect);
1440 else if (image != null) g.DrawImage(image, imageRect);
1436 } 1441 }
1437 public Point PointToImage(Point point) { 1442 public Point PointToImage(Point point) {
1438 switch (sizeMode) { 1443 switch (sizeMode) {
1439 case PictureBoxSizeMode.AutoSize: 1444 case PictureBoxSizeMode.AutoSize:
1440 case PictureBoxSizeMode.Normal: 1445 case PictureBoxSizeMode.Normal: