10b4c5624SAlexander von Gluck IV /* 20b4c5624SAlexander von Gluck IV * Copyright 2012, Haiku, Inc. 30b4c5624SAlexander von Gluck IV * Distributed under the terms of the MIT License. 40b4c5624SAlexander von Gluck IV * 50b4c5624SAlexander von Gluck IV * Authors: 60b4c5624SAlexander von Gluck IV * Aaron Hill <serac@hillvisions.com> 70b4c5624SAlexander von Gluck IV */ 80b4c5624SAlexander von Gluck IV 90b4c5624SAlexander von Gluck IV 100b4c5624SAlexander von Gluck IV #include <stdio.h> 110b4c5624SAlexander von Gluck IV #include <stdlib.h> 120b4c5624SAlexander von Gluck IV #include <GLView.h> 130b4c5624SAlexander von Gluck IV #include <ScreenSaver.h> 140b4c5624SAlexander von Gluck IV #include <View.h> 150b4c5624SAlexander von Gluck IV 16*3c94b5cbSAlexander von Gluck IV #include "GLifeGrid.h" 17*3c94b5cbSAlexander von Gluck IV #include "GLifeState.h" 18*3c94b5cbSAlexander von Gluck IV #include "GLifeConfig.h" 19*3c94b5cbSAlexander von Gluck IV #include "GLifeView.h" 20*3c94b5cbSAlexander von Gluck IV #include "GLifeSaver.h" 210b4c5624SAlexander von Gluck IV 220b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 230b4c5624SAlexander von Gluck IV // GLifeSaver Class Constructor Definition 240b4c5624SAlexander von Gluck IV GLifeSaver::GLifeSaver( BMessage* pbmPrefs, image_id iidImage ) 250b4c5624SAlexander von Gluck IV : BScreenSaver( pbmPrefs, iidImage ) 260b4c5624SAlexander von Gluck IV { 270b4c5624SAlexander von Gluck IV // Check for preferences 280b4c5624SAlexander von Gluck IV if ( !( pbmPrefs->IsEmpty() ) ) 290b4c5624SAlexander von Gluck IV RestoreState( pbmPrefs ); 300b4c5624SAlexander von Gluck IV 310b4c5624SAlexander von Gluck IV // Seed random number generator 320b4c5624SAlexander von Gluck IV srandom( system_time() ); 330b4c5624SAlexander von Gluck IV } 340b4c5624SAlexander von Gluck IV 350b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 360b4c5624SAlexander von Gluck IV // GLifeSaver Class SaveState Definition 370b4c5624SAlexander von Gluck IV status_t GLifeSaver::SaveState( BMessage* pbmPrefs ) const 380b4c5624SAlexander von Gluck IV { 390b4c5624SAlexander von Gluck IV return m_glsState.SaveState( pbmPrefs ); 400b4c5624SAlexander von Gluck IV } 410b4c5624SAlexander von Gluck IV 420b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 430b4c5624SAlexander von Gluck IV // GLifeSaver Class RestoreState Definition 440b4c5624SAlexander von Gluck IV void GLifeSaver::RestoreState( BMessage* pbmPrefs ) 450b4c5624SAlexander von Gluck IV { 460b4c5624SAlexander von Gluck IV m_glsState.RestoreState( pbmPrefs ); 470b4c5624SAlexander von Gluck IV } 480b4c5624SAlexander von Gluck IV 490b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 500b4c5624SAlexander von Gluck IV // GLifeSaver Class StartConfig Definition 510b4c5624SAlexander von Gluck IV void GLifeSaver::StartConfig( BView* pbvView ) 520b4c5624SAlexander von Gluck IV { 530b4c5624SAlexander von Gluck IV // Setup the "config" class 540b4c5624SAlexander von Gluck IV GLifeConfig* pglcConfig = new GLifeConfig( pbvView->Bounds(), 550b4c5624SAlexander von Gluck IV &m_glsState ); 560b4c5624SAlexander von Gluck IV pbvView->AddChild( pglcConfig ); 570b4c5624SAlexander von Gluck IV } 580b4c5624SAlexander von Gluck IV 590b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 600b4c5624SAlexander von Gluck IV // GLifeSaver Class StartSaver Definition 610b4c5624SAlexander von Gluck IV status_t GLifeSaver::StartSaver( BView* pbvView, bool bPreview ) 620b4c5624SAlexander von Gluck IV { 630b4c5624SAlexander von Gluck IV if ( bPreview ) 640b4c5624SAlexander von Gluck IV { 650b4c5624SAlexander von Gluck IV // We do not use the preview option 660b4c5624SAlexander von Gluck IV m_pglvViewport = 0; 670b4c5624SAlexander von Gluck IV return B_ERROR; 680b4c5624SAlexander von Gluck IV } 690b4c5624SAlexander von Gluck IV else 700b4c5624SAlexander von Gluck IV { 710b4c5624SAlexander von Gluck IV SetTickSize( c_iTickSize ); 720b4c5624SAlexander von Gluck IV 730b4c5624SAlexander von Gluck IV m_pglvViewport = new GLifeView( pbvView->Bounds(), 740b4c5624SAlexander von Gluck IV "GLifeView", 750b4c5624SAlexander von Gluck IV B_FOLLOW_NONE, 760b4c5624SAlexander von Gluck IV BGL_RGB | BGL_DEPTH | BGL_DOUBLE, 770b4c5624SAlexander von Gluck IV &m_glsState ); 780b4c5624SAlexander von Gluck IV pbvView->AddChild( m_pglvViewport ); 790b4c5624SAlexander von Gluck IV 800b4c5624SAlexander von Gluck IV return B_OK; 810b4c5624SAlexander von Gluck IV } 820b4c5624SAlexander von Gluck IV } 830b4c5624SAlexander von Gluck IV 840b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 850b4c5624SAlexander von Gluck IV // GLifeSaver Class StopSaver Definition 860b4c5624SAlexander von Gluck IV void GLifeSaver::StopSaver( void ) 870b4c5624SAlexander von Gluck IV { 880b4c5624SAlexander von Gluck IV if ( m_pglvViewport ) 890b4c5624SAlexander von Gluck IV m_pglvViewport->EnableDirectMode( false ); 900b4c5624SAlexander von Gluck IV } 910b4c5624SAlexander von Gluck IV 920b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 930b4c5624SAlexander von Gluck IV // GLifeSaver Class DirectConnected Definition 940b4c5624SAlexander von Gluck IV void GLifeSaver::DirectConnected( direct_buffer_info* pdbiInfo ) 950b4c5624SAlexander von Gluck IV { 960b4c5624SAlexander von Gluck IV m_pglvViewport->DirectConnected( pdbiInfo ); 970b4c5624SAlexander von Gluck IV m_pglvViewport->EnableDirectMode( true ); 980b4c5624SAlexander von Gluck IV } 990b4c5624SAlexander von Gluck IV 1000b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 1010b4c5624SAlexander von Gluck IV // GLifeSaver Class DirectDraw Definition 1020b4c5624SAlexander von Gluck IV void GLifeSaver::DirectDraw( int32 iFrame ) 1030b4c5624SAlexander von Gluck IV { 1040b4c5624SAlexander von Gluck IV m_pglvViewport->Advance(); 1050b4c5624SAlexander von Gluck IV } 1060b4c5624SAlexander von Gluck IV 1070b4c5624SAlexander von Gluck IV // ------------------------------------------------------ 1080b4c5624SAlexander von Gluck IV // Main Instantiation Function 1090b4c5624SAlexander von Gluck IV extern "C" _EXPORT BScreenSaver* 1100b4c5624SAlexander von Gluck IV instantiate_screen_saver( BMessage* pbmPrefs, image_id iidImage ) 1110b4c5624SAlexander von Gluck IV { 1120b4c5624SAlexander von Gluck IV return new GLifeSaver( pbmPrefs, iidImage ); 1130b4c5624SAlexander von Gluck IV } 114