* Removed the delayed scaler code - it's no longer needed (and was trying rather

stupid things like creating a 50000x40000 pixel bitmap if you zoomed in).
* Removed dithering in CMAP8 mode. Please use 32 bit mode instead :-)
* Cleaned up ShowImageWindow.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39098 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2010-10-23 22:28:52 +00:00
parent 76d9e05341
commit d164619e74
4 changed files with 64 additions and 155 deletions
-77
View File
@@ -192,12 +192,7 @@ ShowImageView::ShowImageView(BRect rect, const char *name, uint32 resizingMode,
fZoom(1.0),
fDither(BScreen().ColorSpace() == B_CMAP8),
fScaleBilinear(true),
fScaler(NULL),
#if DELAYED_SCALING
fScalingCountDown(SCALING_DELAY_TIME),
#endif
fBitmapLocationInView(0.0, 0.0),
@@ -222,7 +217,6 @@ ShowImageView::ShowImageView(BRect rect, const char *name, uint32 resizingMode,
ShowImageSettings* settings;
settings = my_app->Settings();
if (settings->Lock()) {
fDither = settings->GetBool("Dither", fDither);
fShrinkToBounds = settings->GetBool("ShrinkToBounds", fShrinkToBounds);
fZoomToBounds = settings->GetBool("ZoomToBounds", fZoomToBounds);
fSlideShowDelay = settings->GetInt32("SlideShowDelay", fSlideShowDelay);
@@ -274,17 +268,6 @@ ShowImageView::Pulse()
else
fHideCursorCountDown--;
}
#if DELAYED_SCALING
if (fBitmap && (fScaleBilinear || fDither) && fScalingCountDown > 0) {
if (fScalingCountDown == 1) {
fScalingCountDown = 0;
_GetScaler(_AlignBitmap());
} else {
fScalingCountDown --;
}
}
#endif
}
@@ -376,24 +359,9 @@ ShowImageView::_UpdateStatusText()
}
void
ShowImageView::_DeleteScaler()
{
if (fScaler) {
fScaler->Stop();
delete fScaler;
fScaler = NULL;
}
#if DELAYED_SCALING
fScalingCountDown = SCALING_DELAY_TIME;
#endif
}
void
ShowImageView::_DeleteBitmap()
{
_DeleteScaler();
_DeleteSelectionBitmap();
if (fDisplayBitmap != fBitmap)
@@ -615,17 +583,6 @@ ShowImageView::_SetSelection(const entry_ref *ref, BPoint point)
}
void
ShowImageView::SetDither(bool dither)
{
if (fDither != dither) {
_SettingsSetBool("Dither", dither);
fDither = dither;
Invalidate();
}
}
void
ShowImageView::SetShowCaption(bool show)
{
@@ -871,40 +828,9 @@ ShowImageView::_UpdateCaption()
}
Scaler*
ShowImageView::_GetScaler(BRect rect)
{
if (fScaler == NULL || !fScaler->Matches(rect, fDither)) {
_DeleteScaler();
BMessenger msgr(this, Window());
fScaler = new Scaler(fDisplayBitmap, rect, msgr, MSG_INVALIDATE, fDither);
fScaler->Start();
}
return fScaler;
}
void
ShowImageView::_DrawImage(BRect rect)
{
if (fDither) {
#if DELAYED_SCALING
Scaler* scaler = fScaler;
if (scaler != NULL && !scaler->Matches(rect, fDither)) {
_DeleteScaler(); scaler = NULL;
}
#else
Scaler* scaler = _GetScaler(rect);
#endif
if (scaler != NULL && !scaler->IsRunning()) {
BBitmap* bitmap = scaler->GetBitmap();
if (bitmap) {
DrawBitmap(bitmap, BPoint(rect.left, rect.top));
return;
}
}
}
// TODO: fix composing of fBitmap with other bitmaps
// with regard to alpha channel
if (!fDisplayBitmap)
@@ -2276,9 +2202,6 @@ ShowImageView::_FirstFile()
void
ShowImageView::SetZoom(BPoint where, float zoom)
{
if ((fScaleBilinear || fDither) && fZoom != zoom)
_DeleteScaler();
// Invalidate before scrolling, as that prevents the app_server
// to do the scrolling server side
Invalidate();
-13
View File
@@ -27,12 +27,6 @@
#include <View.h>
// Delay scaling operation, so that a sequence of zoom in/out operations works
// smoother
#define DELAYED_SCALING 1
// the delay time in 1/10 seconds
#define SCALING_DELAY_TIME 3
// the delay time for hiding the cursor in 1/10 seconds (the pulse rate)
#define HIDE_CURSOR_DELAY_TIME 20
@@ -72,7 +66,6 @@ public:
void SaveToFile(BDirectory* dir, const char* name,
BBitmap* bitmap,
const translation_format* format);
void SetDither(bool dither);
void SetScaleBilinear(bool b);
bool GetScaleBilinear() { return fScaleBilinear; }
void SetShowCaption(bool show);
@@ -214,7 +207,6 @@ private:
void _DrawCaption();
void _UpdateCaption();
Scaler* _GetScaler(BRect rect);
void _DrawImage(BRect rect);
float _LimitToRange(float v, orientation o,
bool absolute);
@@ -246,12 +238,7 @@ private:
float fZoom;
bool fDither;
bool fScaleBilinear;
Scaler* fScaler;
#if DELAYED_SCALING
int fScalingCountDown;
#endif
BPoint fBitmapLocationInView;
-7
View File
@@ -1293,10 +1293,3 @@ ShowImageWindow::QuitRequested()
return quit;
}
void
ShowImageWindow::ScreenChanged(BRect frame, color_space mode)
{
fImageView->SetDither(mode == B_CMAP8);
}
+64 -58
View File
@@ -1,5 +1,5 @@
/*
* Copyright 2003-2009, Haiku, Inc. All Rights Reserved.
* Copyright 2003-2010, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -26,72 +26,78 @@ class ShowImageStatusView;
class ShowImageWindow : public BWindow {
public:
ShowImageWindow(const entry_ref *ref, const BMessenger& trackerMessenger);
virtual ~ShowImageWindow();
public:
ShowImageWindow(const entry_ref* ref,
const BMessenger& trackerMessenger);
virtual ~ShowImageWindow();
virtual void FrameResized(float width, float height);
virtual void MessageReceived(BMessage *message);
virtual bool QuitRequested();
virtual void ScreenChanged(BRect frame, color_space mode);
virtual void FrameResized(float width, float height);
virtual void MessageReceived(BMessage* message);
virtual bool QuitRequested();
status_t InitCheck();
ShowImageView* GetShowImageView() const { return fImageView; }
status_t InitCheck();
ShowImageView* GetShowImageView() const { return fImageView; }
void UpdateTitle();
void AddMenus(BMenuBar *bar);
void BuildContextMenu(BMenu *menu);
void WindowRedimension(BBitmap *bitmap);
void UpdateTitle();
void AddMenus(BMenuBar* bar);
void BuildContextMenu(BMenu* menu);
void WindowRedimension(BBitmap* bitmap);
private:
class RecentDocumentsMenu;
private:
class RecentDocumentsMenu;
void _BuildViewMenu(BMenu *menu, bool popupMenu);
BMenuItem* _AddItemMenu(BMenu *menu, const char *label,
uint32 what, const char shortcut, uint32 modifier,
const BHandler *target, bool enabled = true);
BMenuItem* _AddDelayItem(BMenu *menu, const char *label, float value);
void _BuildViewMenu(BMenu* menu, bool popupMenu);
BMenuItem* _AddItemMenu(BMenu* menu, const char* label,
uint32 what, const char shortcut,
uint32 modifier, const BHandler* target,
bool enabled = true);
BMenuItem* _AddDelayItem(BMenu* menu, const char* label,
float value);
bool _ToggleMenuItem(uint32 what);
void _EnableMenuItem(BMenu *menu, uint32 what, bool enable);
void _MarkMenuItem(BMenu *menu, uint32 what, bool marked);
void _MarkSlideShowDelay(float value);
void _ResizeToWindow(bool shrink, uint32 what);
bool _ToggleMenuItem(uint32 what);
void _EnableMenuItem(BMenu* menu, uint32 what,
bool enable);
void _MarkMenuItem(BMenu* menu, uint32 what,
bool marked);
void _MarkSlideShowDelay(float value);
void _ResizeToWindow(bool shrink, uint32 what);
void _SaveAs(BMessage *message);
// Handle Save As submenu choice
void _SaveToFile(BMessage *message);
// Handle save file panel message
bool _ClosePrompt();
void _ToggleFullScreen();
void _LoadSettings();
void _SavePrintOptions();
bool _PageSetup();
void _PrepareForPrint();
void _Print(BMessage *msg);
void _SaveAs(BMessage* message);
// Handle Save As submenu choice
void _SaveToFile(BMessage* message);
// Handle save file panel message
bool _ClosePrompt();
void _ToggleFullScreen();
void _LoadSettings();
void _SavePrintOptions();
bool _PageSetup();
void _PrepareForPrint();
void _Print(BMessage* msg);
void _OpenResizerWindow(int32 width, int32 height);
void _UpdateResizerWindow(int32 width, int32 height);
void _CloseResizerWindow();
void _OpenResizerWindow(int32 width, int32 height);
void _UpdateResizerWindow(int32 width, int32 height);
void _CloseResizerWindow();
BFilePanel* fSavePanel;
BMenuBar* fBar;
BMenu* fOpenMenu;
BMenu* fBrowseMenu;
BMenu* fGoToPageMenu;
BMenu* fSlideShowDelay;
ShowImageView* fImageView;
ShowImageStatusView* fStatusView;
bool fModified;
bool fFullScreen;
BRect fWindowFrame;
bool fShowCaption;
BMessage* fPrintSettings;
PrintOptions fPrintOptions;
BMessenger* fResizerWindowMessenger;
BMenuItem* fResizeItem;
int32 fHeight;
int32 fWidth;
private:
BFilePanel* fSavePanel;
BMenuBar* fBar;
BMenu* fOpenMenu
; BMenu* fBrowseMenu;
BMenu* fGoToPageMenu;
BMenu* fSlideShowDelay;
ShowImageView* fImageView;
ShowImageStatusView* fStatusView;
bool fModified;
bool fFullScreen;
BRect fWindowFrame;
bool fShowCaption;
BMessage* fPrintSettings;
PrintOptions fPrintOptions;
BMessenger* fResizerWindowMessenger;
BMenuItem* fResizeItem;
int32 fHeight;
int32 fWidth;
};
#endif // SHOW_IMAGE_WINDOW_H