xref: /haiku/src/apps/magnify/Magnify.h (revision 13581b3d2a71545960b98fefebc5225b5bf29072)
1 /*
2  * Copyright 2002-2006, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Copyright 1999, Be Incorporated.   All Rights Reserved.
6  * This file may be used under the terms of the Be Sample Code License.
7  */
8 #ifndef MAGNIFY_H
9 #define MAGNIFY_H
10 
11 
12 #include <Application.h>
13 #include <Box.h>
14 #include <FilePanel.h>
15 #include <MenuBar.h>
16 #include <View.h>
17 #include <Window.h>
18 
19 
20 class TMagnify;
21 class TWindow;
22 
23 class TOSMagnify : public BView {
24 	public:
25 						TOSMagnify(BRect, TMagnify* parent, color_space space);
26 		virtual			~TOSMagnify();
27 
28 		void			InitObject();
29 
30 		virtual void	FrameResized(float width, float height);
31 		void			SetSpace(color_space space);
32 
33 		void			Resize(int32 width, int32 height);
34 
35 		bool			CreateImage(BPoint, bool force=false);
36 		bool			CopyScreenRect(BRect);
37 
38 		void			DrawGrid(int32 width, int32 height,
39 							BRect dest, int32 pixelSize);
40 		void			DrawSelection();
41 
42 		rgb_color		ColorAtSelection();
43 
44 		BBitmap*		Bitmap() { return fBitmap; }
45 
46 	private:
47 		color_space		fColorSpace;
48 		char*			fOldBits;
49 		long			fBytesPerPixel;
50 
51 		TMagnify*		fParent;
52 		BBitmap*		fBitmap;
53 		BBitmap*		fPixel;
54 		BView*			fPixelView;
55 };
56 
57 class TMagnify : public BView {
58 	public:
59 						TMagnify(BRect, TWindow*);
60 		virtual			~TMagnify();
61 
62 		void			InitBuffers(int32 hPixelCount, int32 vPixelCount,
63 							int32 pixelSize, bool showGrid);
64 
65 		virtual void	AttachedToWindow();
66 		virtual void	Draw(BRect);
67 
68 		virtual void	KeyDown(const char *bytes, int32 numBytes);
69 		virtual void	FrameResized(float, float);
70 		virtual void	MouseDown(BPoint where);
71 		virtual void	ScreenChanged(BRect bounds, color_space cs);
72 		virtual void	WindowActivated(bool);
73 
74 		void			SetSelection(bool state);
75 		void			MoveSelection(int32 x, int32 y);
76 		void			MoveSelectionTo(int32 x, int32 y);
77 		void			ShowSelection();
78 
79 		short 			Selection();
80 		bool			SelectionIsShowing();
81 		void			SelectionLoc(float* x, float* y);
82 		void			SetSelectionLoc(float, float);
83 		rgb_color		SelectionColor();
84 
85 		void			CrossHair1Loc(float* x, float* y);
86 		void			CrossHair2Loc(float* x, float* y);
87 		BPoint			CrossHair1Loc();
88 		BPoint			CrossHair2Loc();
89 
90 		void			NudgeMouse(float x, float y);
91 
92 		void			Update(bool force);
93 		bool			NeedToUpdate();
94 		void			SetUpdate(bool);
95 
96 		void			CopyImage();
97 
98 		long			ThreadID() { return fThread; }
99 
100 		void			MakeActive(bool);
101 		bool			Active() { return fActive; }
102 
103 		void			MakeSticked(bool);
104 		bool			Sticked() const { return fStickCoordinates; }
105 
106 		void			AddCrossHair();
107 		void			RemoveCrossHair();
108 		void			SetCrossHairsShowing(bool ch1=false, bool ch2=false);
109 		void			CrossHairsShowing(bool*, bool*);
110 
111 		void			PixelCount(int32* width, int32* height);
112 		int32 			PixelSize();
113 		bool			ShowGrid();
114 
115 		void			StartSave();
116 		void			SaveImage(entry_ref* ref, char* name);
117 		void			EndSave();
118 
119 	private:
120 		static status_t	MagnifyTask(void *);
121 
122 		bool			fNeedToUpdate;
123 		long			fThread;				//	magnify thread id
124 		bool			fActive;				//	magnifying toggle
125 
126 		BBitmap*		fImageBuf;				// os buffer
127 		TOSMagnify*		fImageView;				// os view
128 		BPoint			fLastLoc;
129 
130 		short			fSelection;
131 
132 		bool			fShowSelection;
133 		BPoint			fSelectionLoc;
134 
135 		bool			fShowCrossHair1;
136 		BPoint			fCrossHair1;
137 		bool			fShowCrossHair2;
138 		BPoint			fCrossHair2;
139 
140 		TWindow*		fParent;
141 
142 		bool			fImageFrozenOnSave;
143 		bool			fStickCoordinates;
144 };
145 
146 class TMenu : public BMenu {
147 	public:
148 						TMenu(TWindow* mainWindow, const char *title = NULL,
149 							menu_layout layout = B_ITEMS_IN_COLUMN);
150 		virtual			~TMenu();
151 
152 		virtual void	AttachedToWindow();
153 
154 	private:
155 		TWindow*		fMainWindow;
156 };
157 
158 class TInfoView : public BBox {
159 	public:
160 						TInfoView(BRect frame);
161 		virtual			~TInfoView();
162 
163 		virtual void	AttachedToWindow();
164 		virtual void	Draw(BRect updateRect);
165 		virtual void	FrameResized(float width, float height);
166 		virtual void	GetPreferredSize(float* _width, float* _height);
167 
168 		void			AddMenu();
169 		void			SetMagView(TMagnify* magView);
170 		void			SetInfoTextVisible(bool visible);
171 		bool			IsInfoTextVisible();
172 
173 	private:
174 		float	 		fFontHeight;
175 		TMagnify*		fMagView;
176 		BMenuField*	 	fPopUp;
177 		TMenu*			fMenu;
178 
179 		int32 			fHPixelCount;
180 		int32 			fVPixelCount;
181 		int32			fPixelSize;
182 
183 		rgb_color		fSelectionColor;
184 
185 		BPoint			fCH1Loc;
186 		BPoint			fCH2Loc;
187 
188 		char			fInfoStr[64];
189 		char			fRGBStr[64];
190 		BString			fCH1Str;
191 		BString			fCH2Str;
192 
193 		bool			fInfoTextVisible;
194 };
195 
196 class TWindow : public BWindow {
197 	public:
198 						TWindow(int32 pixelCount = -1);
199 		virtual			~TWindow();
200 
201 		virtual void	MessageReceived(BMessage* message);
202 		virtual bool	QuitRequested();
203 
204 		status_t		GetSupportedSuites(BMessage* msg);
205 		BHandler*		ResolveSpecifier(BMessage* msg, int32 index,
206 							BMessage* specifier, int32 what,
207 							const char* property);
208 
209 		void			GetPrefs(int32 pixelCount = -1);
210 		void			SetPrefs();
211 
212 		virtual void	FrameResized(float width, float height);
213 		virtual void	ScreenChanged(BRect screenSize, color_space depth);
214 
215 		virtual void	Minimize(bool);
216 		virtual void	Zoom(BPoint position, float width, float height);
217 
218 		void			CalcViewablePixels();
219 		void			GetPreferredSize(float* width, float* height);
220 
221 		void			ResizeWindow(int32 rowCount, int32 columnCount);
222 		void			ResizeWindow(bool direction);
223 
224 		void			SetGrid(bool);
225 		bool			ShowGrid();
226 
227 		void			ShowInfo(bool);
228 		bool			InfoIsShowing();
229 		bool			InfoBarIsVisible();
230 		void			UpdateInfo();
231 		void			UpdateInfoBarOnResize();
232 
233 		void			AddCrossHair();
234 		void			RemoveCrossHair();
235 		void			CrossHairsShowing(bool* ch1, bool* ch2);
236 
237 		void			PixelCount(int32* h, int32 *v);
238 
239 		void			SetPixelSize(int32);
240 		void			SetPixelSize(bool);
241 		int32			PixelSize();
242 
243 		bool			IsActive();
244 		bool			IsSticked();
245 
246 	private:
247 		float			fInfoHeight;
248 		bool			fShowInfo;
249 		float 			fFontHeight;
250 
251 		bool			fShowGrid;
252 		bool			fInfoBarState;
253 
254 		int32			fHPixelCount;
255 		int32			fVPixelCount;
256 		int32	 		fPixelSize;
257 
258 		TMagnify*		fFatBits;
259 		TInfoView*		fInfo;
260 
261 		BFilePanel*		fSavePanel;
262 };
263 
264 class TApp : public BApplication {
265 	public:
266 						TApp(int32 pixelCount = -1);
267 };
268 
269 #endif	// MAGNIFY_H
270