ViewBackend::~ViewBackend() { if(input_handler) input_handler->deinitialize(); if(output_handler) output_handler->deinitialize(); if (compositor) { WstCompositorStop(compositor); WstCompositorDestroy(compositor); compositor = nullptr; } if(input_handler) delete input_handler; if(output_handler) delete output_handler; }
int main( int argc, char** argv) { int nRC= 0; struct sigaction sigint; const char *rendererModule= 0; const char *displayName= 0; const char *nestedDisplayName= 0; bool error= false; int len, value, width=-1, height=-1; AppCtx *appCtx= 0; WstCompositor *wctx; appCtx= initApp(); if ( !appCtx ) { printf("unable to initialize app infrastructure\n"); nRC= -1; goto exit; } wctx= WstCompositorCreate(); if ( !wctx ) { printf("unable to create compositor instance\n"); nRC= -1; goto exit; } if ( !WstCompositorSetTerminatedCallback( wctx, compositorTerminated, appCtx ) ) { error= true; goto exit; } if ( !WstCompositorSetInvalidateCallback( wctx, compositorInvalidate, appCtx ) ) { error= true; goto exit; } if ( !WstCompositorSetDispatchCallback( wctx, compositorDispatch, appCtx ) ) { error= true; goto exit; } for( int i= 1; i < argc; ++i ) { len= strlen(argv[i]); if ( (len == 10) && !strncmp( (const char*)argv[i], "--renderer", len) ) { if ( i < argc-1 ) { ++i; rendererModule= argv[i]; if ( !WstCompositorSetRendererModule( wctx, rendererModule) ) { error= true; break; } } } else if ( (len == 11) && !strncmp( (const char*)argv[i], "--framerate", len) ) { if ( i < argc-1 ) { int frameRate; ++i; frameRate= atoi(argv[i]); if ( frameRate > 0 ) { if ( !WstCompositorSetFrameRate( wctx, frameRate ) ) { error= true; break; } } } } else if ( (len == 9) && !strncmp( (const char*)argv[i], "--display", len) ) { if ( i < argc-1) { ++i; displayName= argv[i]; if ( !WstCompositorSetDisplayName( wctx, displayName) ) { error= true; break; } } } else if ( (len == 10) && !strncmp( (const char*)argv[i], "--embedded", len) ) { if ( !WstCompositorSetIsEmbedded( wctx, true) ) { error= true; break; } appCtx->isEmbedded= true; } else if ( (len == 10) && !strncmp( (const char*)argv[i], "--repeater", len) ) { if ( !WstCompositorSetIsRepeater( wctx, true) ) { error= true; break; } } else if ( (len == 8) && !strncmp( (const char*)argv[i], "--nested", len) ) { if ( !WstCompositorSetIsNested( wctx, true) ) { error= true; break; } } else if ( (len == 15) && !strncmp( (const char*)argv[i], "--nestedDisplay", len) ) { if ( i < argc-1) { ++i; nestedDisplayName= argv[i]; if ( !WstCompositorSetNestedDisplayName( wctx, nestedDisplayName) ) { error= true; break; } } } else if ( (len == 13) && !strncmp( (const char*)argv[i], "--nestedInput", len) ) { if ( !WstCompositorSetKeyboardNestedListener( wctx, &keyboardListener, NULL) ) { error= true; break; } if ( !WstCompositorSetPointerNestedListener( wctx, &pointerListener, NULL) ) { error= true; break; } } else if ( (len == 7) && !strncmp( argv[i], "--width", len) ) { if ( i+1 < argc ) { ++i; value= atoi(argv[i]); if ( value > 0 ) { width= value; } } } else if ( (len == 8) && !strncmp( argv[i], "--height", len) ) { if ( i+1 < argc ) { ++i; value= atoi(argv[i]); if ( value > 0 ) { height= value; } } } #if defined (WESTEROS_PLATFORM_EMBEDDED) else if ( (len == 14) && !strncmp( argv[i], "--enableCursor", len) ) { appCtx->showCursor= true; } #endif else if ( (len == 2) && !strncmp( (const char*)argv[i], "-?", len) ) { showUsage(); goto exit; } } if ( !error ) { #if defined (WESTEROS_PLATFORM_EMBEDDED) if ( !appCtx->showCursor ) { if ( !WstCompositorSetAllowCursorModification( wctx, true ) ) { error= true; goto exit; } } #endif if ( (width > 0) && (height > 0) ) { if ( !WstCompositorSetNestedSize( wctx, width, height) ) { error= true; goto exit; } } if ( !rendererModule ) { printf("missing renderer module: use --renderer <module>\n"); nRC= -1; goto exit; } if ( !error ) { if ( !startApp( appCtx, wctx ) ) { printf("error starting application infrastructure, continuing but expect trouble\n" ); } g_running= true; if ( !(error= !WstCompositorStart( wctx )) ) { sigint.sa_handler = signalHandler; sigemptyset(&sigint.sa_mask); sigint.sa_flags = SA_RESETHAND; sigaction(SIGINT, &sigint, NULL); while( g_running ) { usleep( 10000 ); } WstCompositorStop( wctx ); } } } exit: if ( appCtx ) { termApp( appCtx ); } if ( wctx ) { if ( error ) { const char *detail= WstCompositorGetLastErrorDetail( wctx ); printf("Compositor error: (%s)\n", detail ); } WstCompositorDestroy( wctx ); } return nRC; }