/*
* Copyright 2007-2014 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ryan Leavengood, leavengood@gmail.com
*/
#include "DebugNow.h"
#include <Catalog.h>
#include <DefaultSettingsView.h>
#include <Font.h>
#include <StringView.h>
#include <View.h>
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "Screensaver DebugNow"
static const rgb_color kMediumBlue = { 0, 0, 100 };
static const rgb_color kWhite = { 255, 255, 255 };
// #pragma mark - Instantiation function
BScreenSaver* instantiate_screen_saver(BMessage* message, image_id image)
{
return new DebugNow(message, image);
}
// #pragma mark - DebugNow
DebugNow::DebugNow(BMessage* archive, image_id id)
:
BScreenSaver(archive, id),
fLine1(B_TRANSLATE_COMMENT("DEBUG",
"keep it short and all uppercase, 5 characters or less")),
fLine2(B_TRANSLATE_COMMENT("NOW",
"keep it short and all uppercase, 5 characters or less"))
{
}
void
DebugNow::StartConfig(BView* view)
{
BPrivate::BuildDefaultSettingsView(view, "DEBUG NOW",
B_TRANSLATE("by Ryan Leavengood"));
}
status_t
DebugNow::StartSaver(BView* view, bool preview)
{
float viewWidth = view->Bounds().Width();
float viewHeight = view->Bounds().Height();
BFont font;
view->GetFont(&font);
font.SetSize(viewHeight / 3);
view->SetFont(&font);
fDelta.nonspace = 0;
fDelta.space = 0;
BRect stringRect;
font.GetBoundingBoxesForStrings(&fLine1, 1, B_SCREEN_METRIC, &fDelta,
&stringRect);
float y = ((viewHeight - (stringRect.Height() * 2 + viewHeight / 10)) / 2)
+ stringRect.Height();
fLine1Start.Set(((viewWidth - stringRect.Width()) / 2) - stringRect.left, y);
font.GetBoundingBoxesForStrings(&fLine2, 1, B_SCREEN_METRIC, &fDelta,
&stringRect);
fLine2Start.Set(((viewWidth - stringRect.Width()) / 2) - stringRect.left,
y + stringRect.Height() + viewHeight / 10);
// set tick size to 500,000 microseconds (0.5 seconds)
SetTickSize(500000);
return B_OK;
}
void
DebugNow::Draw(BView* view, int32 frame)
{
// on first frame set the low color to make the text rendering correct
if (frame == 0)
view->SetLowColor(kMediumBlue);
// draw the background color every frame
view->SetHighColor(kMediumBlue);
view->FillRect(view->Bounds());
// draw the text every other frame to make the it blink
if (frame % 2 == 1) {
view->SetHighColor(kWhite);
view->DrawString(fLine1, fLine1Start, &fDelta);
view->DrawString(fLine2, fLine2Start, &fDelta);
}
}
↑ V730 Not all members of a class are initialized inside the constructor. Consider inspecting: fDelta.