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