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