Making the clock optionally non-interactive, display-only and drawn without the seconds hand.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39668 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -26,7 +26,8 @@
|
|||||||
|
|
||||||
class OffscreenClock : public BView {
|
class OffscreenClock : public BView {
|
||||||
public:
|
public:
|
||||||
OffscreenClock(BRect frame, const char* name);
|
OffscreenClock(BRect frame, const char* name,
|
||||||
|
bool drawSecondHand = true);
|
||||||
virtual ~OffscreenClock();
|
virtual ~OffscreenClock();
|
||||||
|
|
||||||
void SetTime(int32 hour, int32 minute, int32 second);
|
void SetTime(int32 hour, int32 minute, int32 second);
|
||||||
@@ -62,10 +63,13 @@ private:
|
|||||||
|
|
||||||
bool fHourDragging;
|
bool fHourDragging;
|
||||||
bool fMinuteDragging;
|
bool fMinuteDragging;
|
||||||
|
|
||||||
|
bool fDrawSecondHand;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
OffscreenClock::OffscreenClock(BRect frame, const char* name)
|
OffscreenClock::OffscreenClock(BRect frame, const char* name,
|
||||||
|
bool drawSecondHand)
|
||||||
:
|
:
|
||||||
BView(frame, name, B_FOLLOW_NONE, B_WILL_DRAW),
|
BView(frame, name, B_FOLLOW_NONE, B_WILL_DRAW),
|
||||||
fHours(0),
|
fHours(0),
|
||||||
@@ -73,7 +77,8 @@ OffscreenClock::OffscreenClock(BRect frame, const char* name)
|
|||||||
fSeconds(0),
|
fSeconds(0),
|
||||||
fDirty(true),
|
fDirty(true),
|
||||||
fHourDragging(false),
|
fHourDragging(false),
|
||||||
fMinuteDragging(false)
|
fMinuteDragging(false),
|
||||||
|
fDrawSecondHand(drawSecondHand)
|
||||||
{
|
{
|
||||||
SetFlags(Flags() | B_SUBPIXEL_PRECISE);
|
SetFlags(Flags() | B_SUBPIXEL_PRECISE);
|
||||||
|
|
||||||
@@ -343,12 +348,14 @@ OffscreenClock::_DrawHands(float x, float y, float radius,
|
|||||||
offsetY = (radius * 0.9) * cosf((minutes * M_PI) / 30.0);
|
offsetY = (radius * 0.9) * cosf((minutes * M_PI) / 30.0);
|
||||||
StrokeLine(BPoint(x, y), BPoint(x + offsetX, y - offsetY));
|
StrokeLine(BPoint(x, y), BPoint(x + offsetX, y - offsetY));
|
||||||
|
|
||||||
// calc, draw second hand
|
if (fDrawSecondHand) {
|
||||||
SetHighColor(secondsColor);
|
// calc, draw second hand
|
||||||
SetPenSize(1.0);
|
SetHighColor(secondsColor);
|
||||||
offsetX = (radius * 0.95) * sinf((fSeconds * M_PI) / 30.0);
|
SetPenSize(1.0);
|
||||||
offsetY = (radius * 0.95) * cosf((fSeconds * M_PI) / 30.0);
|
offsetX = (radius * 0.95) * sinf((fSeconds * M_PI) / 30.0);
|
||||||
StrokeLine(BPoint(x, y), BPoint(x + offsetX, y - offsetY));
|
offsetY = (radius * 0.95) * cosf((fSeconds * M_PI) / 30.0);
|
||||||
|
StrokeLine(BPoint(x, y), BPoint(x + offsetX, y - offsetY));
|
||||||
|
}
|
||||||
|
|
||||||
// draw the center knob
|
// draw the center knob
|
||||||
SetHighColor(knobColor);
|
SetHighColor(knobColor);
|
||||||
@@ -359,11 +366,14 @@ OffscreenClock::_DrawHands(float x, float y, float radius,
|
|||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
|
|
||||||
TAnalogClock::TAnalogClock(BRect frame, const char* name)
|
TAnalogClock::TAnalogClock(BRect frame, const char* name,
|
||||||
|
bool drawSecondHand = true, bool interactive = true)
|
||||||
:
|
:
|
||||||
BView(frame, name, B_FOLLOW_NONE, B_WILL_DRAW | B_DRAW_ON_CHILDREN),
|
BView(frame, name, B_FOLLOW_NONE, B_WILL_DRAW | B_DRAW_ON_CHILDREN),
|
||||||
fBitmap(NULL),
|
fBitmap(NULL),
|
||||||
fClock(NULL),
|
fClock(NULL),
|
||||||
|
fDrawSecondHand(drawSecondHand),
|
||||||
|
fInteractive(interactive),
|
||||||
fDraggingHourHand(false),
|
fDraggingHourHand(false),
|
||||||
fDraggingMinuteHand(false),
|
fDraggingMinuteHand(false),
|
||||||
fTimeChangeIsOngoing(false)
|
fTimeChangeIsOngoing(false)
|
||||||
@@ -381,7 +391,7 @@ TAnalogClock::~TAnalogClock()
|
|||||||
void
|
void
|
||||||
TAnalogClock::_InitView(BRect rect)
|
TAnalogClock::_InitView(BRect rect)
|
||||||
{
|
{
|
||||||
fClock = new OffscreenClock(Bounds(), "offscreen");
|
fClock = new OffscreenClock(Bounds(), "offscreen", fDrawSecondHand);
|
||||||
fBitmap = new BBitmap(Bounds(), B_RGB32, true);
|
fBitmap = new BBitmap(Bounds(), B_RGB32, true);
|
||||||
fBitmap->Lock();
|
fBitmap->Lock();
|
||||||
fBitmap->AddChild(fClock);
|
fBitmap->AddChild(fClock);
|
||||||
@@ -430,6 +440,11 @@ TAnalogClock::MessageReceived(BMessage* message)
|
|||||||
void
|
void
|
||||||
TAnalogClock::MouseDown(BPoint point)
|
TAnalogClock::MouseDown(BPoint point)
|
||||||
{
|
{
|
||||||
|
if(!fInteractive) {
|
||||||
|
BView::MouseDown(point);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fDraggingMinuteHand = fClock->InMinuteHand(point);
|
fDraggingMinuteHand = fClock->InMinuteHand(point);
|
||||||
if (fDraggingMinuteHand) {
|
if (fDraggingMinuteHand) {
|
||||||
fClock->SetMinuteDragging(true);
|
fClock->SetMinuteDragging(true);
|
||||||
@@ -450,6 +465,11 @@ TAnalogClock::MouseDown(BPoint point)
|
|||||||
void
|
void
|
||||||
TAnalogClock::MouseUp(BPoint point)
|
TAnalogClock::MouseUp(BPoint point)
|
||||||
{
|
{
|
||||||
|
if(!fInteractive) {
|
||||||
|
BView::MouseUp(point);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (fDraggingHourHand || fDraggingMinuteHand) {
|
if (fDraggingHourHand || fDraggingMinuteHand) {
|
||||||
int32 hour, minute, second;
|
int32 hour, minute, second;
|
||||||
fClock->GetTime(&hour, &minute, &second);
|
fClock->GetTime(&hour, &minute, &second);
|
||||||
@@ -470,6 +490,10 @@ TAnalogClock::MouseUp(BPoint point)
|
|||||||
void
|
void
|
||||||
TAnalogClock::MouseMoved(BPoint point, uint32 transit, const BMessage* message)
|
TAnalogClock::MouseMoved(BPoint point, uint32 transit, const BMessage* message)
|
||||||
{
|
{
|
||||||
|
if(!fInteractive) {
|
||||||
|
BView::MouseMoved(point, transit, message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (fDraggingMinuteHand)
|
if (fDraggingMinuteHand)
|
||||||
fClock->SetMinuteHand(point);
|
fClock->SetMinuteHand(point);
|
||||||
@@ -501,7 +525,11 @@ TAnalogClock::SetTime(int32 hour, int32 minute, int32 second)
|
|||||||
if (fClock)
|
if (fClock)
|
||||||
fClock->SetTime(hour, minute, second);
|
fClock->SetTime(hour, minute, second);
|
||||||
|
|
||||||
Invalidate();
|
BWindow* window = Window();
|
||||||
|
if (window && window->Lock()) {
|
||||||
|
Invalidate();
|
||||||
|
Window()->Unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ class OffscreenClock;
|
|||||||
|
|
||||||
class TAnalogClock : public BView {
|
class TAnalogClock : public BView {
|
||||||
public:
|
public:
|
||||||
TAnalogClock(BRect frame, const char* name);
|
TAnalogClock(BRect frame, const char* name,
|
||||||
|
bool drawSecondHand = true, bool interactive = true);
|
||||||
virtual ~TAnalogClock();
|
virtual ~TAnalogClock();
|
||||||
|
|
||||||
virtual void AttachedToWindow();
|
virtual void AttachedToWindow();
|
||||||
@@ -41,6 +42,8 @@ private:
|
|||||||
BBitmap* fBitmap;
|
BBitmap* fBitmap;
|
||||||
OffscreenClock* fClock;
|
OffscreenClock* fClock;
|
||||||
|
|
||||||
|
bool fDrawSecondHand;
|
||||||
|
bool fInteractive;
|
||||||
bool fDraggingHourHand;
|
bool fDraggingHourHand;
|
||||||
bool fDraggingMinuteHand;
|
bool fDraggingMinuteHand;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user