vfs: check userland buffers before reading them.
[haiku.git] / src / apps / showimage / ShowImageView.h
bloba0d207e24050f9f238f999c4227df7e1be454ec8
1 /*
2 * Copyright 2003-2011, Haiku, Inc. All Rights Reserved.
3 * Copyright 2004-2005 yellowTAB GmbH. All Rights Reserverd.
4 * Copyright 2006 Bernd Korz. All Rights Reserved
5 * Distributed under the terms of the MIT License.
7 * Authors:
8 * Fernando Francisco de Oliveira
9 * Michael Wilber
10 * Michael Pfeiffer
11 * yellowTAB GmbH
12 * Bernd Korz
14 #ifndef SHOW_IMAGE_VIEW_H
15 #define SHOW_IMAGE_VIEW_H
18 #include <Bitmap.h>
19 #include <Entry.h>
20 #include <NodeInfo.h>
21 #include <String.h>
22 #include <TranslatorRoster.h>
23 #include <View.h>
25 #include "Filter.h"
26 #include "SelectionBox.h"
29 class BitmapOwner;
32 class ShowImageView : public BView {
33 public:
34 ShowImageView(BRect rect, const char* name,
35 uint32 resizingMode, uint32 flags);
36 virtual ~ShowImageView();
38 virtual void AttachedToWindow();
39 virtual void FrameResized(float width, float height);
40 virtual void Draw(BRect updateRect);
41 virtual void MouseDown(BPoint point);
42 virtual void MouseMoved(BPoint point, uint32 state,
43 const BMessage* dragMessage);
44 virtual void MouseUp(BPoint point);
45 virtual void KeyDown(const char* bytes, int32 numBytes);
46 virtual void Pulse();
48 virtual void MessageReceived(BMessage* message);
49 virtual void WindowActivated(bool active);
51 void SetTrackerMessenger(
52 const BMessenger& trackerMessenger);
53 status_t SetImage(const BMessage* message);
54 status_t SetImage(const entry_ref* ref, BBitmap* bitmap,
55 BitmapOwner* bitmapOwner);
56 const entry_ref* Image() const { return &fCurrentRef; }
57 BBitmap* Bitmap();
59 BPoint ImageToView(BPoint p) const;
60 BPoint ViewToImage(BPoint p) const;
61 BRect ImageToView(BRect r) const;
62 void ConstrainToImage(BPoint& point) const;
63 void ConstrainToImage(BRect& rect) const;
65 void SaveToFile(BDirectory* dir, const char* name,
66 BBitmap* bitmap,
67 const translation_format* format);
69 void SetScaleBilinear(bool b);
70 bool ScaleBilinear() { return fScaleBilinear; }
71 void SetShowCaption(bool show);
72 void SetStretchToBounds(bool enable);
73 bool StretchesToBounds() const
74 { return fStretchToBounds; }
75 void SetHideIdlingCursor(bool hide);
77 void FixupScrollBar(enum orientation orientation,
78 float bitmapLength, float viewLength);
79 void FixupScrollBars();
81 void SetSelectionMode(bool selectionMode);
82 bool IsSelectionModeEnabled() const
83 { return fSelectionMode; }
84 void SelectAll();
85 void ClearSelection();
87 void CopySelectionToClipboard();
89 void FitToBounds();
90 void ForceOriginalSize(bool force)
91 { fForceOriginalSize = force; }
92 void SetZoom(float zoom,
93 BPoint where = BPoint(-1, -1));
94 float Zoom() const
95 { return fZoom; }
96 void ZoomIn(BPoint where = BPoint(-1, -1));
97 void ZoomOut(BPoint where = BPoint(-1, -1));
99 // Image manipulation
100 void Rotate(int degree); // 90 and 270 only
101 void Flip(bool vertical);
102 void ResizeImage(int width, int height);
104 void SetIcon(bool clear);
106 private:
107 enum image_orientation {
108 k0, // 0
109 k90, // 1
110 k180, // 2
111 k270, // 3
112 k0V, // 4
113 k90V, // 5
114 k0H, // 6
115 k270V, // 7
116 kNumberOfOrientations,
119 void _SetHasSelection(bool bHasSelection);
120 void _AnimateSelection(bool a);
121 void _SendMessageToWindow(BMessage* message);
122 void _SendMessageToWindow(uint32 code);
123 void _Notify();
124 void _UpdateStatusText();
125 void _GetMergeRects(BBitmap* merge,
126 BRect selection, BRect& srcRect,
127 BRect& dstRect);
128 void _GetSelectionMergeRects(BRect& srcRect,
129 BRect& dstRect);
130 status_t _SetSelection(const entry_ref* ref,
131 BPoint point);
132 void _MergeWithBitmap(BBitmap* merge,
133 BRect selection);
134 void _MergeSelection();
135 void _DeleteScaler();
136 void _DeleteBitmap();
137 void _DeleteSelectionBitmap();
139 void _DoImageOperation(
140 enum ImageProcessor::operation op,
141 bool quiet = false);
142 void _UserDoImageOperation(
143 enum ImageProcessor::operation op,
144 bool quiet = false);
145 bool _ShouldStretch() const;
146 float _FitToBoundsZoom() const;
147 BRect _AlignBitmap();
148 BBitmap* _CopySelection(uchar alpha = 255,
149 bool imageSize = true);
150 bool _AddSupportedTypes(BMessage* message,
151 BBitmap* bitmap);
152 void _BeginDrag(BPoint sourcePoint);
153 void _SendInMessage(BMessage* message,
154 BBitmap* bitmap,
155 translation_format* format);
156 bool _OutputFormatForType(BBitmap* bitmap,
157 const char* type,
158 translation_format* format);
159 void _HandleDrop(BMessage* message);
160 void _ScrollBitmap(BPoint point);
161 void _UpdateSelectionRect(BPoint point, bool final);
162 void _DrawBackground(BRect aroundFrame);
163 void _LayoutCaption(BFont& font, BPoint& textPos,
164 BRect& background);
165 void _DrawCaption();
166 void _UpdateCaption();
168 void _DrawImage(BRect rect);
169 float _LimitToRange(float v, orientation o,
170 bool absolute);
171 void _ScrollRestricted(float x, float y,
172 bool absolute);
173 void _ScrollRestrictedTo(float x, float y);
174 void _ScrollRestrictedBy(float x, float y);
175 void _MouseWheelChanged(BMessage* message);
176 void _ShowPopUpMenu(BPoint screen);
177 void _SettingsSetBool(const char* name, bool value);
178 void _SetIcon(bool clear, icon_size which);
179 void _ToggleSlideShow();
180 void _StopSlideShow();
181 void _ExitFullScreen();
182 void _ShowToolBarIfEnabled(bool show);
184 private:
185 entry_ref fCurrentRef;
187 BitmapOwner* fBitmapOwner;
188 BBitmap* fBitmap;
189 BBitmap* fDisplayBitmap;
190 BBitmap* fSelectionBitmap;
192 float fZoom;
194 bool fScaleBilinear;
196 BPoint fBitmapLocationInView;
198 bool fStretchToBounds;
199 bool fForceOriginalSize;
200 bool fHideCursor;
201 bool fScrollingBitmap;
202 bool fCreatingSelection;
203 BPoint fFirstPoint;
204 // first point in image space of selection
205 bool fSelectionMode;
206 bool fAnimateSelection;
207 bool fHasSelection;
208 SelectionBox fSelectionBox;
209 BRect fCopyFromRect;
210 // the portion of the background bitmap the selection is made
211 // from
213 bool fShowCaption;
214 BString fCaption;
216 BString fFormatDescription;
217 BString fMimeType;
219 bool fShowingPopUpMenu;
221 int fHideCursorCountDown;
222 // Hides the cursor when it reaches zero
223 int fStickyZoomCountDown;
224 // Make the zoom sticky at 1.0 when zoomed with the mousewheel
226 bool fIsActiveWin;
227 // Is the parent window the active window?
229 BCursor* fDefaultCursor;
230 BCursor* fGrabCursor;
232 image_orientation fImageOrientation;
233 static image_orientation fTransformation[
234 ImageProcessor
235 ::kNumberOfAffineTransformations]
236 [kNumberOfOrientations];
239 #endif // SHOW_IMAGE_VIEW_H