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.
This commit is contained in:
John Scipione
2016-04-06 13:39:29 -07:00
parent 2b05e191ce
commit 197c60bf3e
5 changed files with 361 additions and 258 deletions
+2
View File
@@ -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
;
+65 -222
View File
@@ -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 <[email protected]>
* Stephan Aßmus, [email protected]
*/
#include "SpiderSaver.h"
#include <math.h>
@@ -15,115 +17,101 @@
#include <Bitmap.h>
#include <Catalog.h>
#include <Message.h>
#include <Menu.h>
#include <MenuField.h>
#include <MenuItem.h>
#include <Slider.h>
#include <StringView.h>
#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
// #pragma mark - Instantiation function
enum {
RED = 1,
GREEN = 2,
BLUE = 3,
YELLOW = 4,
PURPLE = 5,
CYAN = 6,
GRAY = 7,
};
// MAIN 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;
}
}
+36 -36
View File
@@ -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 <[email protected]>
* Stephan Aßmus, [email protected]
*/
#ifndef SPIDER_SAVER_H
#define SPIDER_SAVER_H
#include <Locker.h>
#include <ScreenSaver.h>
#include <View.h>
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
@@ -0,0 +1,214 @@
/*
* Copyright 2007-2014 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Stephan Aßmus, [email protected]
*/
#include "SpiderView.h"
#include <Catalog.h>
#include <Message.h>
#include <Menu.h>
#include <MenuField.h>
#include <MenuItem.h>
#include <Slider.h>
#include <StringView.h>
#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);
}
}
@@ -0,0 +1,44 @@
/*
* Copyright 2007-2014 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Stephan Aßmus, [email protected]
*/
#ifndef SPIDER_VIEW_H
#define SPIDER_VIEW_H
#include <View.h>
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