From 7fe60435bce6595a9c58a9bfd8244d74b5320e96 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 15 Jan 2013 08:46:13 +0100 Subject: Import DirectFB141_2k11R3_beta5 --- Source/++DFB/examples/dfbapp.cpp | 173 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100755 Source/++DFB/examples/dfbapp.cpp (limited to 'Source/++DFB/examples/dfbapp.cpp') diff --git a/Source/++DFB/examples/dfbapp.cpp b/Source/++DFB/examples/dfbapp.cpp new file mode 100755 index 0000000..6f05df9 --- /dev/null +++ b/Source/++DFB/examples/dfbapp.cpp @@ -0,0 +1,173 @@ +/* + (c) Copyright 2000-2002 convergence integrated media GmbH. + All rights reserved. + + Written by Denis Oliver Kropp , + Andreas Hundt and + Sven Neumann + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include + +#include "dfbapp.h" + +DFBApp::DFBApp() +{ + m_width = 0; + m_height = 0; + m_flipping = true; +} + +DFBApp::~DFBApp() +{ +} + +bool +DFBApp::Init( int argc, char *argv[] ) +{ + DFBSurfaceDescription dsc; + + /* parse application arguments */ + if (!ParseArgs( argc, argv )) + return false; + + /* create super interface */ + m_dfb = DirectFB::Create(); + + try { + /* try fullscreen mode */ + m_dfb.SetCooperativeLevel( DFSCL_FULLSCREEN ); + } + catch (DFBException *ex) { + if (ex->GetResultCode() == DFB_ACCESSDENIED) + std::cerr << "Warning: " << ex << std::endl; + else + throw; + } + + /* fill surface description */ + dsc.flags = DSDESC_CAPS; + dsc.caps = DSCAPS_PRIMARY; + + if (m_flipping) + DFB_ADD_SURFACE_CAPS( dsc.caps, DSCAPS_DOUBLE ); + + if (m_width) { + DFB_ADD_SURFACE_DESC( dsc.flags, DSDESC_WIDTH ); + dsc.width = m_width; + } + + if (m_height) { + DFB_ADD_SURFACE_DESC( dsc.flags, DSDESC_HEIGHT ); + dsc.height = m_height; + } + + /* create the primary surface */ + m_primary = m_dfb.CreateSurface( dsc ); + + /* create an event buffer with all devices attached */ + m_events = m_dfb.CreateInputEventBuffer( DICAPS_ALL ); + + + /* get the screen resolution */ + int width; + int height; + + m_primary.GetSize( &width, &height ); + + /* call setup method */ + return Setup( width, height ); +} + +void +DFBApp::Run() +{ + while (true) { + DFBInputEvent event; + + /* render to the screen */ + Render( m_primary ); + + /* flip the screen */ + if (m_flipping) + m_primary.Flip(); + + /* wait for an event if Update() returns true */ + if (Update()) + m_events.WaitForEvent(); + + /* handle all events, exit if HandleEvent() returns true */ + while (m_events.GetEvent( DFB_EVENT(&event) )) + if (HandleEvent( event )) + return; + } +} + +void +DFBApp::SetMode( int width, int height ) +{ + m_width = width; + m_height = height; +} + +void +DFBApp::SetFlipping( bool flipping ) +{ + m_flipping = flipping; +} + +bool +DFBApp::ParseArgs( int argc, char *argv[] ) +{ + return true; +} + +bool +DFBApp::Setup( int width, int height ) +{ + return true; +} + +void +DFBApp::Render( IDirectFBSurface &surface ) +{ + surface.Clear(); +} + +bool +DFBApp::Update() +{ + return true; +} + +bool +DFBApp::HandleEvent( DFBInputEvent &event ) +{ + switch (event.type) { + case DIET_KEYPRESS: + if (event.key_symbol == DIKS_ESCAPE) + return true; + break; + + default: + break; + } + + return false; +} + -- cgit