1 /** DGui project file.
2 
3 Copyright: Trogu Antonio Davide 2011-2013
4 
5 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 
7 Authors: Trogu Antonio Davide
8 */
9 module dgui.picturebox;
10 
11 import dgui.core.controls.control;
12 import dgui.canvas;
13 
14 enum SizeMode
15 {
16 	normal = 0,
17 	autoSize = 1,
18 }
19 
20 class PictureBox: Control
21 {
22 	private SizeMode _sm = SizeMode.normal;
23 	private Image _img;
24 
25 	public override void dispose()
26 	{
27 		if(this._img)
28 		{
29 			this._img.dispose();
30 			this._img = null;
31 		}
32 
33 		super.dispose();
34 	}
35 
36 	alias @property Control.bounds bounds;
37 
38 	@property public override void bounds(Rect r)
39 	{
40 		if(this._img && this._sm is SizeMode.autoSize)
41 		{
42 			// Ignora 'r.size' e usa la dimensione dell'immagine
43 			Size sz = r.size;
44 			super.bounds = Rect(r.x, r.y, sz.width, sz.height);
45 
46 		}
47 		else
48 		{
49 			super.bounds = r;
50 		}
51 	}
52 
53 	@property public final SizeMode sizeMode()
54 	{
55 		return this._sm;
56 	}
57 
58 	@property public final void sizeMode(SizeMode sm)
59 	{
60 		this._sm = sm;
61 
62 		if(this.created)
63 		{
64 			this.redraw();
65 		}
66 	}
67 
68 	@property public final Image image()
69 	{
70 		return this._img;
71 	}
72 
73 	@property public final void image(Image img)
74 	{
75 		if(this._img)
76 		{
77 			this._img.dispose(); // Destroy the previous image
78 		}
79 
80 		this._img = img;
81 
82 		if(this.created)
83 		{
84 			this.redraw();
85 		}
86 	}
87 
88 	protected override void createControlParams(ref CreateControlParams ccp)
89 	{
90 		ccp.className  = WC_DPICTUREBOX;
91 		ccp.defaultCursor = SystemCursors.arrow;
92 		ccp.classStyle = ClassStyles.parentDC;
93 
94 		super.createControlParams(ccp);
95 	}
96 
97 	protected override void onPaint(PaintEventArgs e)
98 	{
99 		if(this._img)
100 		{
101 			Canvas c = e.canvas;
102 
103 			switch(this._sm)
104 			{
105 				case SizeMode.autoSize:
106 					c.drawImage(this._img, Rect(nullPoint, this.size));
107 					break;
108 
109 				default:
110 					c.drawImage(this._img, 0, 0);
111 					break;
112 			}
113 		}
114 
115 		super.onPaint(e);
116 	}
117 }