1 namespace gui::controls;
5 public class Picture : CommonControl
7 class_property(icon) = "<:ecere>mimeTypes/image.png";
15 property Color tint { set { tint = value; } };
16 property BitmapResource image
18 property_category $"Appearance"
24 RemoveResource(bitmapRes);
26 defaultBitmap = value ? false : true;
35 return defaultBitmap ? null : bitmapRes;
39 property bool filter { property_category $"Appearance" set { filter = value; } get { return filter; } };
40 property Bitmap bitmapImage
53 BitmapResource bitmapRes;
70 fileMenu = Menu { menu, "File", f };
71 MenuItem { fileMenu, $"Save\tCtrl+S", s, ctrlS, NotifySelect = MenuFileSave };
72 MenuItem { fileMenu, $"Save As...", a, NotifySelect = MenuFileSaveAs };
93 if(hasHorzScroll || hasVertScroll)
94 bitmap.Copy(bitmapImage);
95 else if(bitmap.Allocate(null, clientSize.w, clientSize.h, 0, bitmapImage.pixelFormat, false))
97 Surface s = bitmap.GetSurface(0,0,null);
98 s.Filter(bitmapImage, 0,0,0,0, bitmap.width, bitmap.height, bitmapImage.width, bitmapImage.height);
102 bitmap.MakeDD(displaySystem);
108 bitmapRes = BitmapResource { fileName = ":mimeTypes/image.png", alphaBlend = true, window = this };
109 defaultBitmap = true;
113 bitmap = bitmapRes.bitmap;
116 SetInitSize(initSize);
121 SetScrollArea(bitmap.width, bitmap.height, false);
129 void OnUnloadGraphics()
137 bool OnResizing(int * w, int * h)
139 Size size = initSize;
140 Anchor anchor = this.anchor;
142 if(!size.w && (!anchor.left.type || !anchor.right.type))
150 if(!size.h && (!anchor.top.type || !anchor.bottom.type))
161 void OnScroll(ScrollBarAction action, int position, Key key)
166 OnHScroll = OnScroll;
167 OnVScroll = OnScroll;
169 bool OnKeyHit(Key key, unichar ch)
171 Bitmap bitmap = this.bitmap;
180 float x = 0.5f, y = 0.5f;
181 if(bitmap.width * zoomFactor > clientSize.w)
182 x = scroll.x / (bitmap.width * zoomFactor - clientSize.w);
183 if(bitmap.height * zoomFactor > clientSize.h)
184 y = scroll.y / (bitmap.height * zoomFactor - clientSize.h);
188 (int)(bitmap.width * zoomFactor),
189 (int)(bitmap.height * zoomFactor), false);
192 (int)(Max(0, bitmap.width * zoomFactor - clientSize.w) * x),
193 (int)(Max(0, bitmap.height * zoomFactor - clientSize.h) * y));
200 if(zoomFactor > 0.05)
202 float x = 0.5f, y = 0.5f;
203 if(bitmap.width * zoomFactor > clientSize.w)
204 x = scroll.x / (bitmap.width * zoomFactor - clientSize.w);
205 if(bitmap.height * zoomFactor > clientSize.h)
206 y = scroll.y / (bitmap.height * zoomFactor - clientSize.h);
210 (int)(bitmap.width * zoomFactor),
211 (int)(bitmap.height * zoomFactor), false);
214 (int)(Max(0, bitmap.width * zoomFactor - clientSize.w) * x),
215 (int)(Max(0, bitmap.height * zoomFactor - clientSize.h) * y));
225 void OnRedraw(Surface surface)
227 Bitmap bitmap = this.bitmap;
230 surface.blitTint = tint;
233 int w = (int)(bitmap.width * zoomFactor);
234 int h = (int)(bitmap.height * zoomFactor);
235 if(w == bitmap.width && h == bitmap.height)
238 Max(0, (clientSize.w - w) / 2), Max(0, (clientSize.h - h) / 2),
239 scroll.x,scroll.y, w, h);
244 surface.Filter(bitmap,
245 Max(0, (clientSize.w - w) / 2), Max(0, (clientSize.h - h) / 2),
246 (int)(scroll.x / zoomFactor), (int)(scroll.y / zoomFactor), w, h,
247 bitmap.width, bitmap.height);
249 surface.Stretch(bitmap,
250 Max(0, (clientSize.w - w) / 2), Max(0, (clientSize.h - h) / 2),
251 (int)(scroll.x / zoomFactor), (int)(scroll.y / zoomFactor), w, h,
252 bitmap.width, bitmap.height);
257 int w = bitmap.width;
258 int h = bitmap.height;
259 if(clientSize.w == bitmap.width && clientSize.h == bitmap.height)
261 Max(0, (clientSize.w - w) / 2), Max(0, (clientSize.h - h) / 2),
263 hasHorzScroll ? clientSize.w : bitmap.width, hasVertScroll ? clientSize.h : bitmap.height);
265 surface.Filter(bitmap,
266 Max(0, (clientSize.w - w) / 2), Max(0, (clientSize.h - h) / 2),
267 scroll.x,scroll.y, clientSize.w, clientSize.h,
268 hasHorzScroll ? clientSize.w : bitmap.width, hasVertScroll ? clientSize.h : bitmap.height);
270 surface.Stretch(bitmap,
271 Max(0, (clientSize.w - w) / 2), Max(0, (clientSize.h - h) / 2),
272 scroll.x,scroll.y, clientSize.w, clientSize.h,
273 hasHorzScroll ? clientSize.w : bitmap.width, hasVertScroll ? clientSize.h : bitmap.height);