Mercurial > hg > ucis.core
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: |