From 9d3da74deabb2eda5a8c7963db514fce6a586cc9 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 18 May 2009 21:25:34 +0000 Subject: [PATCH] Add a slider to the settings view to allow adjusting the rendering output size. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30799 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../translators/hvif/HVIFTranslator.cpp | 19 +++++-- src/add-ons/translators/hvif/HVIFTranslator.h | 1 + src/add-ons/translators/hvif/HVIFView.cpp | 54 ++++++++++++++++++- src/add-ons/translators/hvif/HVIFView.h | 13 ++++- 4 files changed, 80 insertions(+), 7 deletions(-) diff --git a/src/add-ons/translators/hvif/HVIFTranslator.cpp b/src/add-ons/translators/hvif/HVIFTranslator.cpp index e179a498cb..f8231cb357 100644 --- a/src/add-ons/translators/hvif/HVIFTranslator.cpp +++ b/src/add-ons/translators/hvif/HVIFTranslator.cpp @@ -44,6 +44,11 @@ static translation_format sOutputFormats[] = { }; +static TranSetting sDefaultSettings[] = { + { HVIF_SETTING_RENDER_SIZE, TRAN_SETTING_INT32, 64 } +}; + + BTranslator * make_nth_translator(int32 n, image_id image, uint32 flags, ...) { @@ -58,8 +63,9 @@ HVIFTranslator::HVIFTranslator() HVIF_TRANSLATOR_VERSION, sInputFormats, sizeof(sInputFormats) / sizeof(sInputFormats[0]), sOutputFormats, sizeof(sOutputFormats) / sizeof(sOutputFormats[0]), - "HVIFTranslator_Settings", NULL, 0, B_TRANSLATOR_BITMAP, - HVIF_FORMAT_CODE) + "HVIFTranslator_Settings", sDefaultSettings, + sizeof(sDefaultSettings) / sizeof(sDefaultSettings[0]), + B_TRANSLATOR_BITMAP, HVIF_FORMAT_CODE) { } @@ -134,7 +140,12 @@ HVIFTranslator::DerivedTranslate(BPositionIO *inSource, return B_NO_TRANSLATOR; } - BBitmap rendered(BRect(0, 0, 63, 63), B_BITMAP_NO_SERVER_LINK, B_RGBA32); + int32 renderSize = fSettings->SetGetInt32(HVIF_SETTING_RENDER_SIZE); + if (renderSize <= 0 || renderSize > 1024) + renderSize = 64; + + BBitmap rendered(BRect(0, 0, renderSize - 1, renderSize - 1), + B_BITMAP_NO_SERVER_LINK, B_RGBA32); if (BIconUtils::GetVectorIcon(buffer, size, &rendered) != B_OK) { free(buffer); return B_NO_TRANSLATOR; @@ -158,5 +169,5 @@ BView * HVIFTranslator::NewConfigView(TranslatorSettings *settings) { return new HVIFView(BRect(0, 0, 250, 150), "HVIFTranslator Settings", - B_FOLLOW_ALL, B_WILL_DRAW); + B_FOLLOW_ALL, B_WILL_DRAW, settings); } diff --git a/src/add-ons/translators/hvif/HVIFTranslator.h b/src/add-ons/translators/hvif/HVIFTranslator.h index f84f82fbdd..ab7459c0ca 100644 --- a/src/add-ons/translators/hvif/HVIFTranslator.h +++ b/src/add-ons/translators/hvif/HVIFTranslator.h @@ -11,6 +11,7 @@ #include "BaseTranslator.h" #define HVIF_TRANSLATOR_VERSION B_TRANSLATION_MAKE_VERSION(1, 0, 0) +#define HVIF_SETTING_RENDER_SIZE "hvif /renderSize" class HVIFTranslator : public BaseTranslator { public: diff --git a/src/add-ons/translators/hvif/HVIFView.cpp b/src/add-ons/translators/hvif/HVIFView.cpp index 7edec75204..ee0fb5596f 100644 --- a/src/add-ons/translators/hvif/HVIFView.cpp +++ b/src/add-ons/translators/hvif/HVIFView.cpp @@ -9,14 +9,18 @@ #include "HVIFView.h" #include "HVIFTranslator.h" +#include #include #include +#define HVIF_SETTING_RENDER_SIZE_CHANGED 'rsch' + HVIFView::HVIFView(const BRect &frame, const char *name, uint32 resizeMode, - uint32 flags) - : BView(frame, name, resizeMode, flags) + uint32 flags, TranslatorSettings *settings) + : BView(frame, name, resizeMode, flags), + fSettings(settings) { SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); @@ -50,4 +54,50 @@ HVIFView::HVIFView(const BRect &frame, const char *name, uint32 resizeMode, B_UTF8_COPYRIGHT"2009 Haiku Inc."); stringView->ResizeToPreferred(); AddChild(stringView); + + rect.OffsetBy(0, height + 5); + int32 renderSize = fSettings->SetGetInt32(HVIF_SETTING_RENDER_SIZE); + BString label = "Render Size: "; + label << renderSize; + fRenderSize = new BSlider(rect, "renderSize", label.String(), NULL, 1, 32); + + fRenderSize->ResizeToPreferred(); + fRenderSize->SetValue(renderSize / 8); + fRenderSize->SetHashMarks(B_HASH_MARKS_BOTTOM); + fRenderSize->SetHashMarkCount(16); + fRenderSize->SetModificationMessage( + new BMessage(HVIF_SETTING_RENDER_SIZE_CHANGED)); + AddChild(fRenderSize); +} + + +void +HVIFView::AttachedToWindow() +{ + fRenderSize->SetTarget(this); +} + + +void +HVIFView::MessageReceived(BMessage *message) +{ + switch (message->what) { + case HVIF_SETTING_RENDER_SIZE_CHANGED: + { + int32 value = fRenderSize->Value(); + if (value <= 0 || value > 32) + break; + + value *= 8; + fSettings->SetGetInt32(HVIF_SETTING_RENDER_SIZE, &value); + fSettings->SaveSettings(); + + BString newLabel = "Render Size: "; + newLabel << value; + fRenderSize->SetLabel(newLabel.String()); + return; + } + } + + BView::MessageReceived(message); } diff --git a/src/add-ons/translators/hvif/HVIFView.h b/src/add-ons/translators/hvif/HVIFView.h index b8a197b8a0..e1c5063069 100644 --- a/src/add-ons/translators/hvif/HVIFView.h +++ b/src/add-ons/translators/hvif/HVIFView.h @@ -8,12 +8,23 @@ #ifndef HVIF_VIEW_H #define HVIF_VIEW_H +#include "TranslatorSettings.h" + +#include #include class HVIFView : public BView { public: HVIFView(const BRect &frame, const char *name, - uint32 resizeMode, uint32 flags); + uint32 resizeMode, uint32 flags, + TranslatorSettings *settings); + +virtual void AttachedToWindow(); +virtual void MessageReceived(BMessage *message); + +private: + BSlider * fRenderSize; + TranslatorSettings *fSettings; }; #endif // HVIF_VIEW_H