From 197c60bf3e2cf8a50510a7bf3155670a64649da8 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Tue, 4 Mar 2014 20:01:09 -0500 Subject: [PATCH] SpiderSaver: Style fixes, move SpiderView into own files Fixes after rebase to make the thing work, along with some style fixes that got mixed in. --- src/add-ons/screen_savers/spider/Jamfile | 2 + .../screen_savers/spider/SpiderSaver.cpp | 293 ++++-------------- .../screen_savers/spider/SpiderSaver.h | 72 ++--- .../screen_savers/spider/SpiderView.cpp | 214 +++++++++++++ src/add-ons/screen_savers/spider/SpiderView.h | 44 +++ 5 files changed, 364 insertions(+), 261 deletions(-) create mode 100644 src/add-ons/screen_savers/spider/SpiderView.cpp create mode 100644 src/add-ons/screen_savers/spider/SpiderView.h diff --git a/src/add-ons/screen_savers/spider/Jamfile b/src/add-ons/screen_savers/spider/Jamfile index 7ff272979c5..0302c6083c4 100644 --- a/src/add-ons/screen_savers/spider/Jamfile +++ b/src/add-ons/screen_savers/spider/Jamfile @@ -8,6 +8,7 @@ ScreenSaver Spider : Polygon.cpp PolygonQueue.cpp SpiderSaver.cpp + SpiderView.cpp : be libscreensaver.so localestub [ TargetLibsupc++ ] ; @@ -16,4 +17,5 @@ DoCatalogs Spider : x-vnd.Haiku-SpiderScreensaver : SpiderSaver.cpp + SpiderView.cpp ; diff --git a/src/add-ons/screen_savers/spider/SpiderSaver.cpp b/src/add-ons/screen_savers/spider/SpiderSaver.cpp index a541542200d..ae978268660 100644 --- a/src/add-ons/screen_savers/spider/SpiderSaver.cpp +++ b/src/add-ons/screen_savers/spider/SpiderSaver.cpp @@ -1,10 +1,12 @@ /* - * Copyright 2007-2009, Haiku, Inc. All rights reserved. + * Copyright 2007-2014 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: - * Stephan Aßmus + * Stephan Aßmus, superstippi@gmx.de */ + + #include "SpiderSaver.h" #include @@ -15,115 +17,101 @@ #include #include #include -#include -#include -#include -#include -#include #include "Polygon.h" #include "PolygonQueue.h" +#include "SpiderView.h" + #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "Screensaver Spider" -enum { - MSG_QUEUE_NUMBER = 'qunm', - MSG_POLY_NUMBER = 'plnm', - MSG_QUEUE_DEPTH = 'qudp', - MSG_COLOR = 'colr', -}; - -#define MIN_POLY_POINTS 3 -#define MAX_POLY_POINTS 10 -#define MIN_QUEUE_DEPTH 40 -#define MAX_QUEUE_DEPTH 160 -#define MAX_QUEUE_NUMBER 40 - -enum { - RED = 1, - GREEN = 2, - BLUE = 3, - YELLOW = 4, - PURPLE = 5, - CYAN = 6, - GRAY = 7, -}; - -// MAIN INSTANTIATION FUNCTION + +// #pragma mark - Instantiation function + + extern "C" _EXPORT BScreenSaver* -instantiate_screen_saver(BMessage *message, image_id image) +instantiate_screen_saver(BMessage* message, image_id image) { return new SpiderSaver(message, image); } -// constructor -SpiderSaver::SpiderSaver(BMessage *message, image_id id) - : BScreenSaver(message, id), - fBackBitmap(NULL), - fBackView(NULL), - fQueues(new PolygonQueue*[MAX_QUEUE_NUMBER]), - fQueueNumber(20), - fMaxPolyPoints(MAX_POLY_POINTS), - fMaxQueueDepth(MAX_QUEUE_DEPTH), - fColor(RED), - fPreview(false) + +// #pragma mark - SpiderSaver + + +SpiderSaver::SpiderSaver(BMessage* message, image_id id) + : + BScreenSaver(message, id), + fBackBitmap(NULL), + fBackView(NULL), + fQueues(new PolygonQueue*[MAX_QUEUE_NUMBER]), + fQueueNumber(20), + fMaxPolyPoints(MAX_POLY_POINTS), + fMaxQueueDepth(MAX_QUEUE_DEPTH), + fColor(RED), + fPreview(false) { for (int32 i = 0; i < MAX_QUEUE_NUMBER; i++) fQueues[i] = NULL; - if (message) { + + if (message != NULL) { int32 value; if (message->FindInt32("queue number", &value) == B_OK) fQueueNumber = value; + if (message->FindInt32("poly points", &value) == B_OK) fMaxPolyPoints = value; + if (message->FindInt32("queue depth", &value) == B_OK) fMaxQueueDepth = value; + if (message->FindInt32("color", &value) == B_OK) fColor = value; } + srand48((long int)system_time()); } -// destructor + SpiderSaver::~SpiderSaver() { _Cleanup(); delete[] fQueues; } -// StartConfig + void -SpiderSaver::StartConfig(BView *view) +SpiderSaver::StartConfig(BView* view) { SpiderView* configView = new SpiderView(view->Bounds(), this, fQueueNumber, fMaxPolyPoints, fMaxQueueDepth, fColor); view->AddChild(configView); } -// StartSaver + status_t -SpiderSaver::StartSaver(BView *v, bool preview) +SpiderSaver::StartSaver(BView* view, bool preview) { SetTickSize(50000); fPreview = preview; - fBounds = v->Bounds(); + fBounds = view->Bounds(); _Init(fBounds); return B_OK; } -// StopSaver + void SpiderSaver::StopSaver() { _Cleanup(); } -// Draw + void -SpiderSaver::Draw(BView *view, int32 frame) +SpiderSaver::Draw(BView* view, int32 frame) { fLocker.Lock(); for (uint32 i = 0; i < fQueueNumber; i++) { @@ -141,21 +129,23 @@ SpiderSaver::Draw(BView *view, int32 frame) fLocker.Unlock(); } -// SaveState + status_t SpiderSaver::SaveState(BMessage* into) const { - if (into) { + if (into != NULL) { into->AddInt32("queue number", (int32)fQueueNumber); into->AddInt32("poly points", (int32)fMaxPolyPoints); into->AddInt32("queue depth", (int32)fMaxQueueDepth); into->AddInt32("color", (int32)fColor); + return B_OK; } + return B_BAD_VALUE; } -// SetQueueNumber + void SpiderSaver::SetQueueNumber(uint32 number) { @@ -166,7 +156,7 @@ SpiderSaver::SetQueueNumber(uint32 number) fLocker.Unlock(); } -// SetQueueDepth + void SpiderSaver::SetQueueDepth(uint32 maxDepth) { @@ -177,7 +167,7 @@ SpiderSaver::SetQueueDepth(uint32 maxDepth) fLocker.Unlock(); } -// SetPolyPoints + void SpiderSaver::SetPolyPoints(uint32 maxPoints) { @@ -188,7 +178,7 @@ SpiderSaver::SetPolyPoints(uint32 maxPoints) fLocker.Unlock(); } -// SetColor + void SpiderSaver::SetColor(uint32 color) { @@ -199,7 +189,10 @@ SpiderSaver::SetColor(uint32 color) fLocker.Unlock(); } -// _Init + +// #pragma mark - SpiderSaver private methods + + void SpiderSaver::_Init(BRect bounds) { @@ -208,18 +201,20 @@ SpiderSaver::_Init(BRect bounds) uint32 maxPoints = fMaxPolyPoints; uint32 minQueueDepth = fMaxQueueDepth / 2; uint32 maxQueueDepth = fMaxQueueDepth; + if (fPreview) { minQueueDepth /= 4; maxQueueDepth /= 4; } - for (uint32 i = 0; i < fQueueNumber; i++) + + for (uint32 i = 0; i < fQueueNumber; i++) { fQueues[i] = new PolygonQueue(new Polygon(bounds, minPoints + lrand48() % (maxPoints - minPoints)), minQueueDepth + lrand48() % (maxQueueDepth - minQueueDepth)); + } } -// _Cleanup void SpiderSaver::_Cleanup() { @@ -231,7 +226,6 @@ SpiderSaver::_Cleanup() } -// _AllocBackBitmap void SpiderSaver::_AllocBackBitmap(float width, float height) { @@ -261,7 +255,6 @@ SpiderSaver::_AllocBackBitmap(float width, float height) } -// _FreeBackBitmap void SpiderSaver::_FreeBackBitmap() { @@ -273,30 +266,35 @@ SpiderSaver::_FreeBackBitmap() } -// _DrawInto void -SpiderSaver::_DrawInto(BView *view) +SpiderSaver::_DrawInto(BView* view) { for (uint32 i = 0; i < fQueueNumber; i++) { switch (fColor) { case GREEN: view->SetHighColor(1, 2, 1, 255); break; + case BLUE: view->SetHighColor(1, 1, 2, 255); break; + case YELLOW: view->SetHighColor(2, 2, 1, 255); break; + case PURPLE: view->SetHighColor(2, 1, 2, 255); break; + case CYAN: view->SetHighColor(1, 2, 2, 255); break; + case GRAY: view->SetHighColor(2, 2, 2, 255); break; + case RED: default: view->SetHighColor(2, 1, 1, 255); @@ -310,6 +308,7 @@ SpiderSaver::_DrawInto(BView *view) view->SetDrawingMode(B_OP_ADD); _DrawPolygon(p, view); } + if (Polygon* p = fQueues[i]->Tail()) { view->SetDrawingMode(B_OP_SUBTRACT); _DrawPolygon(p, view); @@ -317,9 +316,9 @@ SpiderSaver::_DrawInto(BView *view) } } -// _DrawPolygon + void -SpiderSaver::_DrawPolygon(Polygon* polygon, BView *view) +SpiderSaver::_DrawPolygon(Polygon* polygon, BView* view) { int32 pointCount = polygon->CountPoints(); if (pointCount > 1) { @@ -327,163 +326,7 @@ SpiderSaver::_DrawPolygon(Polygon* polygon, BView *view) view->MovePenTo(p); for (int32 i = 1; i < pointCount; i++) view->StrokeLine(polygon->PointAt(i)); - view->StrokeLine(p); - } -} -// constructor -SpiderView::SpiderView(BRect frame, SpiderSaver* saver, - uint32 queueNumber, uint32 maxPolyPoints, - uint32 maxQueueDepth, uint32 color) - : BView(frame, "spider view", B_FOLLOW_NONE, B_WILL_DRAW | B_PULSE_NEEDED), - fSaver(saver) -{ - SetViewUIColor(B_PANEL_BACKGROUND_COLOR); - - frame.OffsetTo(0.0, 0.0); - frame.InsetBy(10.0, 5.0); - - float viewHeight = floorf(frame.Height() / 5.0); - - // title stuff - font_height fh; - be_bold_font->GetHeight(&fh); - float fontHeight = fh.ascent + fh.descent + 5.0; - frame.bottom = frame.top + fontHeight; - BStringView* title = new BStringView(frame, B_EMPTY_STRING, - B_TRANSLATE("Spider by stippi")); - title->SetFont(be_bold_font); - AddChild(title); - - be_plain_font->GetHeight(&fh); - fontHeight = fh.ascent + fh.descent + 5.0; - frame.top = frame.bottom; - frame.bottom = frame.top + fontHeight; - title = new BStringView(frame, B_EMPTY_STRING, B_TRANSLATE("for bonefish")); - BFont font(be_plain_font); - font.SetShear(110.0); - title->SetFont(&font); - title->SetAlignment(B_ALIGN_CENTER); - AddChild(title); - - // controls - frame.top = 10.0; - frame.bottom = frame.top + viewHeight; - frame.OffsetBy(0.0, viewHeight); - fQueueNumberS = new BSlider(frame, "queue number", - B_TRANSLATE("Max. polygon count"), new BMessage(MSG_QUEUE_NUMBER), - 1, MAX_QUEUE_NUMBER); - fQueueNumberS->SetHashMarks(B_HASH_MARKS_BOTTOM); - fQueueNumberS->SetHashMarkCount((MAX_QUEUE_NUMBER - 1) / 2 + 1); - fQueueNumberS->SetValue(queueNumber); - AddChild(fQueueNumberS); - frame.OffsetBy(0.0, viewHeight); - fPolyNumberS = new BSlider(frame, "poly points", - B_TRANSLATE("Max. points per polygon"), new BMessage(MSG_POLY_NUMBER), - MIN_POLY_POINTS, MAX_POLY_POINTS); - fPolyNumberS->SetHashMarks(B_HASH_MARKS_BOTTOM); - fPolyNumberS->SetHashMarkCount(MAX_POLY_POINTS - MIN_POLY_POINTS + 1); - fPolyNumberS->SetValue(maxPolyPoints); - AddChild(fPolyNumberS); - frame.OffsetBy(0.0, viewHeight); - fQueueDepthS = new BSlider(frame, "queue depth", B_TRANSLATE("Trail depth"), - new BMessage(MSG_QUEUE_DEPTH), MIN_QUEUE_DEPTH, MAX_QUEUE_DEPTH); - fQueueDepthS->SetHashMarks(B_HASH_MARKS_BOTTOM); - fQueueDepthS->SetHashMarkCount((MAX_QUEUE_DEPTH - MIN_QUEUE_DEPTH) / 4 + 1); - fQueueDepthS->SetValue(maxQueueDepth); - AddChild(fQueueDepthS); - - BMenu* menu = new BMenu(B_TRANSLATE("Color")); - BMessage* message = new BMessage(MSG_COLOR); - message->AddInt32("color", RED); - BMenuItem* item = new BMenuItem(B_TRANSLATE("Red"), message); - if (color == RED) - item->SetMarked(true); - menu->AddItem(item); - message = new BMessage(MSG_COLOR); - message->AddInt32("color", GREEN); - item = new BMenuItem(B_TRANSLATE("Green"), message); - if (color == GREEN) - item->SetMarked(true); - menu->AddItem(item); - message = new BMessage(MSG_COLOR); - message->AddInt32("color", BLUE); - item = new BMenuItem(B_TRANSLATE("Blue"), message); - if (color == BLUE) - item->SetMarked(true); - menu->AddItem(item); - message = new BMessage(MSG_COLOR); - message->AddInt32("color", YELLOW); - item = new BMenuItem(B_TRANSLATE("Yellow"), message); - if (color == YELLOW) - item->SetMarked(true); - menu->AddItem(item); - message = new BMessage(MSG_COLOR); - message->AddInt32("color", PURPLE); - item = new BMenuItem(B_TRANSLATE("Purple"), message); - if (color == PURPLE) - item->SetMarked(true); - menu->AddItem(item); - message = new BMessage(MSG_COLOR); - message->AddInt32("color", CYAN); - item = new BMenuItem(B_TRANSLATE("Cyan"), message); - if (color == CYAN) - item->SetMarked(true); - menu->AddItem(item); - message = new BMessage(MSG_COLOR); - message->AddInt32("color", GRAY); - item = new BMenuItem(B_TRANSLATE("Gray"), message); - if (color == GRAY) - item->SetMarked(true); - menu->AddItem(item); - - menu->SetLabelFromMarked(true); - menu->SetRadioMode(true); - - frame.OffsetBy(0.0, viewHeight); - fColorMF = new BMenuField(frame, "color", B_TRANSLATE("Color"), menu); - fColorMF->SetDivider(fColorMF->StringWidth(B_TRANSLATE("Color")) + 5.0); - AddChild(fColorMF); -} - -// destructor -SpiderView::~SpiderView() -{ -} - -// AttachedToWindow -void -SpiderView::AttachedToWindow() -{ - fQueueNumberS->SetTarget(this); - fPolyNumberS->SetTarget(this); - fQueueDepthS->SetTarget(this); - fColorMF->Menu()->SetTargetForItems(this); -} - -// MessageReceived -void -SpiderView::MessageReceived(BMessage* message) -{ - switch (message->what) { - case MSG_QUEUE_NUMBER: - fSaver->SetQueueNumber(fQueueNumberS->Value()); - break; - case MSG_POLY_NUMBER: - fSaver->SetPolyPoints(fPolyNumberS->Value()); - break; - case MSG_QUEUE_DEPTH: - fSaver->SetQueueDepth(fQueueDepthS->Value()); - break; - case MSG_COLOR: { - uint32 color; - if (message->FindInt32("color", (int32*)&color) == B_OK) - fSaver->SetColor(color); - break; - } - default: - BView::MessageReceived(message); - break; + view->StrokeLine(p); } } - diff --git a/src/add-ons/screen_savers/spider/SpiderSaver.h b/src/add-ons/screen_savers/spider/SpiderSaver.h index 1fdd4d19e4f..ade64f244c8 100644 --- a/src/add-ons/screen_savers/spider/SpiderSaver.h +++ b/src/add-ons/screen_savers/spider/SpiderSaver.h @@ -1,25 +1,47 @@ /* - * Copyright 2007, Haiku Inc. All rights reserved. + * Copyright 2007-2014 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: - * Stephan Aßmus + * Stephan Aßmus, superstippi@gmx.de */ #ifndef SPIDER_SAVER_H #define SPIDER_SAVER_H + #include #include #include + +enum { + RED = 1, + GREEN = 2, + BLUE = 3, + YELLOW = 4, + PURPLE = 5, + CYAN = 6, + GRAY = 7, +}; + + +#define MIN_POLY_POINTS 3 +#define MAX_POLY_POINTS 10 +#define MIN_QUEUE_DEPTH 40 +#define MAX_QUEUE_DEPTH 160 +#define MAX_QUEUE_NUMBER 40 + + + class BSlider; class BMenuField; class Polygon; class PolygonQueue; class SpiderView; + class SpiderSaver : public BScreenSaver { - public: +public: SpiderSaver(BMessage *message, image_id image); virtual ~SpiderSaver(); @@ -37,7 +59,7 @@ class SpiderSaver : public BScreenSaver { void SetPolyPoints(uint32 maxPoints); void SetColor(uint32 color); - private: +private: void _Init(BRect bounds); void _Cleanup(); void _AllocBackBitmap(float width, float height); @@ -45,42 +67,20 @@ class SpiderSaver : public BScreenSaver { void _DrawInto(BView *view); void _DrawPolygon(Polygon* polygon, BView *view); - BBitmap* fBackBitmap; - BView* fBackView; + BBitmap* fBackBitmap; + BView* fBackView; - PolygonQueue** fQueues; - uint32 fQueueNumber; - uint32 fMaxPolyPoints; - uint32 fMaxQueueDepth; - uint32 fColor; + PolygonQueue** fQueues; + uint32 fQueueNumber; + uint32 fMaxPolyPoints; + uint32 fMaxQueueDepth; + uint32 fColor; - bool fPreview; - BRect fBounds; + bool fPreview; + BRect fBounds; - BLocker fLocker; + BLocker fLocker; }; -class SpiderView : public BView { - public: - SpiderView(BRect frame, - SpiderSaver* saver, - uint32 queueNumber, - uint32 maxPolyPoints, - uint32 maxQueueDepth, - uint32 color); - virtual ~SpiderView(); - - // BView - virtual void AttachedToWindow(); - virtual void MessageReceived(BMessage* message); - - private: - SpiderSaver* fSaver; - - BSlider* fQueueNumberS; - BSlider* fPolyNumberS; - BSlider* fQueueDepthS; - BMenuField* fColorMF; -}; #endif // SPIDER_SAVER_H diff --git a/src/add-ons/screen_savers/spider/SpiderView.cpp b/src/add-ons/screen_savers/spider/SpiderView.cpp new file mode 100644 index 00000000000..f89c85f4fbb --- /dev/null +++ b/src/add-ons/screen_savers/spider/SpiderView.cpp @@ -0,0 +1,214 @@ +/* + * Copyright 2007-2014 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus, superstippi@gmx.de + */ + + +#include "SpiderView.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "SpiderSaver.h" + + +#undef B_TRANSLATION_CONTEXT +#define B_TRANSLATION_CONTEXT "SpiderView" + + +static const uint32 kMsgQueueNumber = 'qunm'; +static const uint32 kMsgPolyNumber = 'plnm'; +static const uint32 kMsgQueueDepth = 'qudp'; +static const uint32 kMsgColor = 'colr'; + + +// #pragma - SpiderView + + +SpiderView::SpiderView(BRect frame, SpiderSaver* saver, uint32 queueNumber, + uint32 maxPolyPoints, uint32 maxQueueDepth, uint32 color) + : + BView(frame, "spider view", B_FOLLOW_NONE, B_WILL_DRAW | B_PULSE_NEEDED), + fSaver(saver) +{ + SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR)); + + frame.OffsetTo(0.0, 0.0); + frame.InsetBy(10.0, 5.0); + + float viewHeight = floorf(frame.Height() / 5.0); + + // title stuff + font_height fh; + be_bold_font->GetHeight(&fh); + float fontHeight = fh.ascent + fh.descent + 5.0; + frame.bottom = frame.top + fontHeight; + BStringView* title = new BStringView(frame, B_EMPTY_STRING, + B_TRANSLATE("Spider by stippi")); + title->SetFont(be_bold_font); + AddChild(title); + + be_plain_font->GetHeight(&fh); + fontHeight = fh.ascent + fh.descent + 5.0; + frame.top = frame.bottom; + frame.bottom = frame.top + fontHeight; + title = new BStringView(frame, B_EMPTY_STRING, + B_TRANSLATE("for bonefish")); + BFont font(be_plain_font); + font.SetShear(110.0); + title->SetFont(&font); + title->SetAlignment(B_ALIGN_CENTER); + AddChild(title); + + // controls + frame.top = 10.0f; + frame.bottom = frame.top + viewHeight; + + // queue slider + frame.OffsetBy(0.0f, viewHeight); + fQueueNumberSlider = new BSlider(frame, "queue number", + B_TRANSLATE("Max. polygon count"), new BMessage(kMsgQueueNumber), + 1, MAX_QUEUE_NUMBER); + fQueueNumberSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); + fQueueNumberSlider->SetHashMarkCount((MAX_QUEUE_NUMBER - 1) / 2 + 1); + fQueueNumberSlider->SetValue(queueNumber); + AddChild(fQueueNumberSlider); + + // poly sliders + frame.OffsetBy(0.0f, viewHeight); + fPolyNumberSlider = new BSlider(frame, "poly points", + B_TRANSLATE("Max. points per polygon"), new BMessage(kMsgPolyNumber), + MIN_POLY_POINTS, MAX_POLY_POINTS); + fPolyNumberSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); + fPolyNumberSlider->SetHashMarkCount(MAX_POLY_POINTS - MIN_POLY_POINTS + 1); + fPolyNumberSlider->SetValue(maxPolyPoints); + AddChild(fPolyNumberSlider); + + // queue depth slider + frame.OffsetBy(0.0f, viewHeight); + fQueueDepthSlider = new BSlider(frame, "queue depth", + B_TRANSLATE("Trail depth"), new BMessage(kMsgQueueDepth), + MIN_QUEUE_DEPTH, MAX_QUEUE_DEPTH); + fQueueDepthSlider->SetHashMarks(B_HASH_MARKS_BOTTOM); + fQueueDepthSlider->SetHashMarkCount( + (MAX_QUEUE_DEPTH - MIN_QUEUE_DEPTH) / 4 + 1); + fQueueDepthSlider->SetValue(maxQueueDepth); + AddChild(fQueueDepthSlider); + + // color menu field + BMenu* menu = new BMenu(B_TRANSLATE("Color")); + BMenuItem* item; + BMessage* message; + + // red + message = new BMessage(kMsgColor); + message->AddInt32("color", RED); + item = new BMenuItem(B_TRANSLATE("Red"), message); + item->SetMarked(color == RED); + menu->AddItem(item); + + // green + message = new BMessage(kMsgColor); + message->AddInt32("color", GREEN); + item = new BMenuItem(B_TRANSLATE("Green"), message); + item->SetMarked(color == GREEN); + menu->AddItem(item); + + // blue + message = new BMessage(kMsgColor); + message->AddInt32("color", BLUE); + item = new BMenuItem(B_TRANSLATE("Blue"), message); + item->SetMarked(color == BLUE); + menu->AddItem(item); + + // yellow + message = new BMessage(kMsgColor); + message->AddInt32("color", YELLOW); + item = new BMenuItem(B_TRANSLATE("Yellow"), message); + item->SetMarked(color == YELLOW); + menu->AddItem(item); + + // purple + message = new BMessage(kMsgColor); + message->AddInt32("color", PURPLE); + item = new BMenuItem(B_TRANSLATE("Purple"), message); + item->SetMarked(color == PURPLE); + menu->AddItem(item); + + // cyan + message = new BMessage(kMsgColor); + message->AddInt32("color", CYAN); + item = new BMenuItem(B_TRANSLATE("Cyan"), message); + item->SetMarked(color == CYAN); + menu->AddItem(item); + + // gray + message = new BMessage(kMsgColor); + message->AddInt32("color", GRAY); + item = new BMenuItem(B_TRANSLATE("Gray"), message); + item->SetMarked(color == GRAY); + menu->AddItem(item); + + menu->SetLabelFromMarked(true); + menu->SetRadioMode(true); + + frame.OffsetBy(0.0f, viewHeight); + fColorMenuField = new BMenuField(frame, "color", B_TRANSLATE("Color"), + menu); + fColorMenuField->SetDivider(fColorMenuField->StringWidth( + B_TRANSLATE("Color")) + 5.0f); + AddChild(fColorMenuField); +} + + +SpiderView::~SpiderView() +{ +} + + +void +SpiderView::AttachedToWindow() +{ + fQueueNumberSlider->SetTarget(this); + fPolyNumberSlider->SetTarget(this); + fQueueDepthSlider->SetTarget(this); + fColorMenuField->Menu()->SetTargetForItems(this); +} + + +void +SpiderView::MessageReceived(BMessage* message) +{ + switch (message->what) { + case kMsgQueueNumber: + fSaver->SetQueueNumber(fQueueNumberSlider->Value()); + break; + + case kMsgPolyNumber: + fSaver->SetPolyPoints(fPolyNumberSlider->Value()); + break; + + case kMsgQueueDepth: + fSaver->SetQueueDepth(fQueueDepthSlider->Value()); + break; + + case kMsgColor: { + uint32 color; + if (message->FindInt32("color", (int32*)&color) == B_OK) + fSaver->SetColor(color); + + break; + } + + default: + BView::MessageReceived(message); + } +} diff --git a/src/add-ons/screen_savers/spider/SpiderView.h b/src/add-ons/screen_savers/spider/SpiderView.h new file mode 100644 index 00000000000..387936cbf21 --- /dev/null +++ b/src/add-ons/screen_savers/spider/SpiderView.h @@ -0,0 +1,44 @@ +/* + * Copyright 2007-2014 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Stephan Aßmus, superstippi@gmx.de + */ +#ifndef SPIDER_VIEW_H +#define SPIDER_VIEW_H + + +#include + + +class BRect; +class BMenuField; +class BMessage; +class BSlider; +class SpiderSaver; + + +class SpiderView : public BView { +public: + SpiderView(BRect frame, SpiderSaver* saver, + uint32 queueNumber, + uint32 maxPolyPoints, + uint32 maxQueueDepth, + uint32 color); + virtual ~SpiderView(); + + virtual void AttachedToWindow(); + virtual void MessageReceived(BMessage* message); + +private: + SpiderSaver* fSaver; + + BSlider* fQueueNumberSlider; + BSlider* fPolyNumberSlider; + BSlider* fQueueDepthSlider; + BMenuField* fColorMenuField; +}; + + +#endif // SPIDER_VIEW_H