From a2d91eb6ea9c4ba58c3c9c1666e2b19709824b7a Mon Sep 17 00:00:00 2001 From: beveloper Date: Sat, 1 Jan 2005 13:52:59 +0000 Subject: [PATCH] Added OpenBeOS text screensaver, renamed to Haiku git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10558 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/screen_savers/Jamfile | 2 +- src/add-ons/screen_savers/haiku/Jamfile | 6 + .../screen_savers/haiku/ScreenSaver.cpp | 109 ++++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/add-ons/screen_savers/haiku/Jamfile create mode 100644 src/add-ons/screen_savers/haiku/ScreenSaver.cpp diff --git a/src/add-ons/screen_savers/Jamfile b/src/add-ons/screen_savers/Jamfile index f4efb88e53..97c09d0d91 100644 --- a/src/add-ons/screen_savers/Jamfile +++ b/src/add-ons/screen_savers/Jamfile @@ -1,4 +1,4 @@ SubDir OBOS_TOP src add-ons screen_savers ; +SubInclude OBOS_TOP src add-ons screen_savers haiku ; SubInclude OBOS_TOP src add-ons screen_savers slideshowsaver ; - diff --git a/src/add-ons/screen_savers/haiku/Jamfile b/src/add-ons/screen_savers/haiku/Jamfile new file mode 100644 index 0000000000..57fd24969a --- /dev/null +++ b/src/add-ons/screen_savers/haiku/Jamfile @@ -0,0 +1,6 @@ +SubDir OBOS_TOP src add-ons screen_savers haiku ; + +ScreenSaver haiku : + ScreenSaver.cpp ; + +LinkSharedOSLibs haiku : be screensaver ; diff --git a/src/add-ons/screen_savers/haiku/ScreenSaver.cpp b/src/add-ons/screen_savers/haiku/ScreenSaver.cpp new file mode 100644 index 0000000000..ba78a4496f --- /dev/null +++ b/src/add-ons/screen_savers/haiku/ScreenSaver.cpp @@ -0,0 +1,109 @@ +/* +** +** A simple screensaver, displays the text "OpenBeOS" at random locations. +** +** Version: 2.0 +** +** Copyright (c) 2002 Marcus Overhagen. All Rights Reserved. +** This file may be used under the terms of the OpenBeOS License. +*/ + +#include +#include +#include +#include +#include + +class ScreenSaver : public BScreenSaver +{ +public: + ScreenSaver(BMessage *archive, image_id); + void Draw(BView *view, int32 frame); + void StartConfig(BView *view); + status_t StartSaver(BView *view, bool preview); + +private: + const char *fText; + float fX; + float fY; + float fSizeX; + float fSizeY; + float fTextHeight; + float fTextWith; + bool fIsPreview; +}; + +BScreenSaver *instantiate_screen_saver(BMessage *msg, image_id image) +{ + return new ScreenSaver(msg, image); +} + +ScreenSaver::ScreenSaver(BMessage *archive, image_id id) : + BScreenSaver(archive, id), + fText("OpenBeOS"), + fX(0), + fY(0) +{ +} + +void +ScreenSaver::StartConfig(BView *view) +{ + view->AddChild(new BStringView(BRect(20,10,200,35), "", "OpenBeOS, by Marcus Overhagen")); +} + +status_t +ScreenSaver::StartSaver(BView *view, bool preview) +{ + // save view dimensions and preview mode + fIsPreview = preview; + fSizeX = view->Bounds().Width(); + fSizeY = view->Bounds().Height(); + + // set a new font, about 1/8th of view height, and bold + BFont font; + view->GetFont(&font); + font.SetSize(fSizeY / 8); + font.SetFace(B_BOLD_FACE); + view->SetFont(&font); + + // find out space needed for text display + BRect rect; + escapement_delta delta; + delta.nonspace = 0; + delta.space = 0; + font.GetBoundingBoxesForStrings(&fText,1,B_SCREEN_METRIC,&delta,&rect); + fTextHeight = rect.Height(); + fTextWith = rect.Width(); + + // seed the random number generator + srand((int)system_time()); + + return B_OK; +} + +void +ScreenSaver::Draw(BView *view, int32 frame) +{ + if (frame == 0) { + // fill with black on first frame + view->SetLowColor(0, 0, 0); + view->FillRect(view->Bounds(), B_SOLID_LOW); + } else { + // erase old text on all other frames + view->SetHighColor(0,0,0); + view->DrawString(fText,BPoint(fX,fY)); + } + + // find some new text coordinates + fX = rand() % int(fSizeX - fTextWith); + fY = rand() % int(fSizeY - fTextHeight - (fIsPreview ? 2 : 20)) + fTextHeight; + + // draw new text + view->SetHighColor(0,255,0); + view->DrawString(fText,BPoint(fX,fY)); + + // randomize time until next update (preview mode is faster) + SetTickSize(((rand() % 4) + 1) * (fIsPreview ? 300000 : 1000000)); +} +