From 65b27c0e438acc4bcb64978b077a1a11b816d1c2 Mon Sep 17 00:00:00 2001 From: Maurice Kalinowski Date: Tue, 21 Oct 2008 21:37:31 +0000 Subject: [PATCH] - Add option to stick Magnify to a certain coordinate. - Keep updating on this area - Fixes #2831 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28272 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/magnify/Magnify.cpp | 25 ++++++++++++++++++++++--- src/apps/magnify/Magnify.h | 4 ++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/apps/magnify/Magnify.cpp b/src/apps/magnify/Magnify.cpp index c090f0257f..bf3636f739 100644 --- a/src/apps/magnify/Magnify.cpp +++ b/src/apps/magnify/Magnify.cpp @@ -49,6 +49,7 @@ const int32 msg_toggle_ruler = 'rulr'; const int32 msg_copy_image = 'copy'; const int32 msg_track_color = 'trak'; const int32 msg_freeze = 'frez'; +const int32 msg_stick = 'stic'; const int32 msg_dump = 'dump'; const int32 msg_add_cross_hair = 'acrs'; const int32 msg_remove_cross_hair = 'rcrs'; @@ -165,6 +166,8 @@ BuildInfoMenu(BMenu *menu) menuItem = new BMenuItem("Freeze/Unfreeze image", new BMessage(msg_freeze),'F'); menu->AddItem(menuItem); + menuItem = new BMenuItem("Stick Coordinates", new BMessage(msg_stick), 'I'); + menu->AddItem(menuItem); menu->AddSeparatorItem(); menuItem = new BMenuItem("Make Square", new BMessage(msg_make_square),'/'); @@ -258,6 +261,7 @@ TWindow::TWindow(int32 pixelCount) AddShortcut('H', B_SHIFT_KEY, new BMessage(msg_remove_cross_hair)); AddShortcut('G', B_COMMAND_KEY, new BMessage(msg_toggle_grid)); AddShortcut('F', B_COMMAND_KEY, new BMessage(msg_freeze)); + AddShortcut('I', B_COMMAND_KEY, new BMessage(msg_stick)); AddShortcut('-', B_COMMAND_KEY, new BMessage(msg_shrink)); AddShortcut('=', B_COMMAND_KEY, new BMessage(msg_grow)); AddShortcut('/', B_COMMAND_KEY, new BMessage(msg_make_square)); @@ -339,6 +343,10 @@ TWindow::MessageReceived(BMessage* m) fFatBits->MakeActive(!fFatBits->Active()); break; + case msg_stick: + fFatBits->MakeSticked(!fFatBits->Sticked()); + break; + case msg_save: { // freeze the image here, unfreeze after dump or cancel fFatBits->StartSave(); @@ -1068,7 +1076,8 @@ TMagnify::TMagnify(BRect r, TWindow* parent) fCrossHair1(-1, -1), fShowCrossHair2(false), fCrossHair2(-1, -1), - fParent(parent) + fParent(parent), + fStickCoordinates(false) { SetViewColor(B_TRANSPARENT_32_BIT); } @@ -1482,9 +1491,12 @@ TMagnify::Update(bool force) ulong button; static long counter = 0; - GetMouse(&loc, &button); + if (!fStickCoordinates) { + GetMouse(&loc, &button); + ConvertToScreen(&loc); + } else + loc = fLastLoc; - ConvertToScreen(&loc); if (force || fLastLoc != loc || counter++ % 35 == 0) { if (fImageView->CreateImage(loc, force)) Invalidate(); @@ -1609,6 +1621,13 @@ TMagnify::MakeActive(bool s) } +void +TMagnify::MakeSticked(bool s) +{ + fStickCoordinates = s; +} + + void TMagnify::PixelCount(int32* width, int32* height) { diff --git a/src/apps/magnify/Magnify.h b/src/apps/magnify/Magnify.h index 2d9039bc3b..ae9d06d8db 100644 --- a/src/apps/magnify/Magnify.h +++ b/src/apps/magnify/Magnify.h @@ -100,6 +100,9 @@ class TMagnify : public BView { void MakeActive(bool); bool Active() { return fActive; } + void MakeSticked(bool); + bool Sticked() const { return fStickCoordinates; } + void AddCrossHair(); void RemoveCrossHair(); void SetCrossHairsShowing(bool ch1=false, bool ch2=false); @@ -138,6 +141,7 @@ class TMagnify : public BView { TWindow* fParent; bool fImageFrozenOnSave; + bool fStickCoordinates; }; class TMenu : public BMenu {