xref: /haiku/src/apps/magnify/Magnify.h (revision e7c8829c5d8e5d34a2a1e111f1c06aceff256013)
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, bool selectionOnly=false);
117 		void 			SaveBits(BFile* file, const BBitmap *bitmap, char* name) const;
118 		void			EndSave();
119 
120 	private:
121 		static long		MagnifyTask(void *);
122 
123 		bool			fNeedToUpdate;
124 		long			fThread;				//	magnify thread id
125 		bool			fActive;				//	magnifying toggle
126 
127 		BBitmap*		fImageBuf;				// os buffer
128 		TOSMagnify*		fImageView;				// os view
129 		BPoint			fLastLoc;
130 
131 		short			fSelection;
132 
133 		bool			fShowSelection;
134 		BPoint			fSelectionLoc;
135 
136 		bool			fShowCrossHair1;
137 		BPoint			fCrossHair1;
138 		bool			fShowCrossHair2;
139 		BPoint			fCrossHair2;
140 
141 		TWindow*		fParent;
142 
143 		bool			fImageFrozenOnSave;
144 		bool			fStickCoordinates;
145 };
146 
147 class TMenu : public BMenu {
148 	public:
149 						TMenu(TWindow* mainWindow, const char *title = NULL,
150 							menu_layout layout = B_ITEMS_IN_COLUMN);
151 		virtual			~TMenu();
152 
153 		virtual void	AttachedToWindow();
154 
155 	private:
156 		TWindow*		fMainWindow;
157 };
158 
159 class TInfoView : public BBox {
160 	public:
161 						TInfoView(BRect frame);
162 		virtual			~TInfoView();
163 
164 		virtual void	AttachedToWindow();
165 		virtual void	Draw(BRect updateRect);
166 		virtual void	FrameResized(float width, float height);
167 
168 		void			AddMenu();
169 		void			SetMagView(TMagnify* magView);
170 
171 	private:
172 		float	 		fFontHeight;
173 		TMagnify*		fMagView;
174 		BMenuField*	 	fPopUp;
175 		TMenu*			fMenu;
176 
177 		int32 			fHPixelCount;
178 		int32 			fVPixelCount;
179 		int32			fPixelSize;
180 
181 		rgb_color		fSelectionColor;
182 
183 		BPoint			fCH1Loc;
184 		BPoint			fCH2Loc;
185 
186 		char			fInfoStr[64];
187 		char			fRGBStr[64];
188 		char			fCH1Str[64];
189 		char			fCH2Str[64];
190 };
191 
192 class TWindow : public BWindow {
193 	public:
194 						TWindow(int32 pixelCount = -1);
195 		virtual			~TWindow();
196 
197 		virtual void	MessageReceived(BMessage* message);
198 		virtual bool	QuitRequested();
199 
200 		void			GetPrefs(int32 pixelCount = -1);
201 		void			SetPrefs();
202 
203 		virtual void	FrameResized(float width, float height);
204 		virtual void	ScreenChanged(BRect screenSize, color_space depth);
205 
206 		virtual void	Minimize(bool);
207 		virtual void	Zoom(BPoint position, float width, float height);
208 
209 		void			CalcViewablePixels();
210 		void			GetPreferredSize(float* width, float* height);
211 
212 		void			ResizeWindow(int32 rowCount, int32 columnCount);
213 		void			ResizeWindow(bool direction);
214 
215 		void			SetGrid(bool);
216 		bool			ShowGrid();
217 
218 		void			ShowInfo(bool);
219 		bool			InfoIsShowing();
220 		void			UpdateInfo();
221 
222 		void			AddCrossHair();
223 		void			RemoveCrossHair();
224 		void			CrossHairsShowing(bool* ch1, bool* ch2);
225 
226 		void			PixelCount(int32* h, int32 *v);
227 
228 		void			SetPixelSize(int32);
229 		void			SetPixelSize(bool);
230 		int32			PixelSize();
231 
232 		void			ShowHelp();
233 
234 		bool			IsActive();
235 
236 	private:
237 		float			fInfoHeight;
238 		bool			fShowInfo;
239 		float 			fFontHeight;
240 
241 		bool			fShowGrid;
242 
243 		int32			fHPixelCount;
244 		int32			fVPixelCount;
245 		int32	 		fPixelSize;
246 
247 		TMagnify*		fFatBits;
248 		TInfoView*		fInfo;
249 
250 		BFilePanel*		fSavePanel;
251 };
252 
253 class TApp : public BApplication {
254 	public:
255 						TApp(int32 pixelCount = -1);
256 
257 		virtual void	MessageReceived(BMessage* message);
258 		virtual void	ReadyToRun();
259 		virtual void	AboutRequested();
260 };
261 
262 #endif	// MAGNIFY_H
263