RendererList& m_rendererList = *(executor->getRendererList());
bool status = false;
+ unsigned int layer_id = 0;
LOG_INFO("LayerManager","making screenshot, output file: " << m_filename);
break;
case ScreenshotOfLayer:
- status = scene.getLayer(m_id);
+ if (scene.getLayer(m_id))
+ {
+ LayerListConstIterator iter = scene.getCurrentRenderOrder().begin();
+ LayerListConstIterator iterEnd = scene.getCurrentRenderOrder().end();
+ for (; iter != iterEnd; ++iter)
+ {
+ if ((*iter)->getID() == m_id)
+ {
+ status = true;
+ break;
+ }
+ }
+ if (!status)
+ {
+ LOG_WARNING("LayerManager","Requested layer: " << m_id << " does not belong to the current render order");
+ }
+ }
break;
case ScreenshotOfSurface:
- status = scene.getSurface(m_id);
+ if (scene.getSurface(m_id))
+ {
+ LayerListConstIterator iter = scene.getCurrentRenderOrder().begin();
+ LayerListConstIterator iterEnd = scene.getCurrentRenderOrder().end();
+ for (; iter != iterEnd; ++iter)
+ {
+ SurfaceListConstIterator s_iter = (*iter)->getAllSurfaces().begin();
+ SurfaceListConstIterator s_iterEnd = (*iter)->getAllSurfaces().end();
+ for (; s_iter != s_iterEnd; ++s_iter)
+ {
+ if ((*s_iter)->getID() == m_id)
+ {
+ layer_id = (*iter)->getID();
+ status = true;
+ break;
+ }
+ }
+ if (status)
+ {
+ break;
+ }
+ }
+ if (!status)
+ {
+ LOG_WARNING("LayerManager","Requested surface: " << m_id << " does not belong to a layer which is part of the current render order");
+ }
+ }
break;
case ScreenShotNone:
case ScreenshotOfSurface:
{
- renderer->doScreenShotOfSurface(m_filename, m_id);
+ renderer->doScreenShotOfSurface(m_filename, m_id, layer_id);
break;
}
virtual void allocatePlatformSurface(Surface *surface) = 0;
virtual void doScreenShot(std::string fileName) = 0;
virtual void doScreenShotOfLayer(std::string fileName, const uint id) = 0;
- virtual void doScreenShotOfSurface(std::string fileName, const uint id) = 0;
+ virtual void doScreenShotOfSurface(std::string fileName, const uint id, const uint layer_id) = 0;
protected:
Scene* m_pScene;
virtual void allocatePlatformSurface(Surface *surface);
void doScreenShot(std::string fileName);
void doScreenShotOfLayer(std::string fileName, const uint id);
- void doScreenShotOfSurface(std::string fileName, const uint id);
+ void doScreenShotOfSurface(std::string fileName, const uint id, const uint layer_id);
private:
ScreenShotType takeScreenshot;
std::string screenShotFile;
- uint screenShotID;
+ uint screenShotSurfaceID;
+ uint screenShotLayerID;
const char* displayname;
GetVisualInfoFunction getVisualFunc;
BaseGraphicSystem<Display*, Window>* graphicSystem;
RedrawAllLayers();
}else if(takeScreenshot==ScreenshotOfLayer){
LOG_DEBUG("X11WindowSystem", "Taking screenshot of layer");
- Layer* currentLayer = m_pScene->getLayer(screenShotID);
+ Layer* currentLayer = m_pScene->getLayer(screenShotLayerID);
if (currentLayer!=NULL){
graphicSystem->beginLayer(currentLayer);
graphicSystem->renderLayer();
}
}else if(takeScreenshot==ScreenshotOfSurface){
LOG_DEBUG("X11WindowSystem", "Taking screenshot of surface");
- Surface* currentSurface = m_pScene->getSurface(screenShotID);
- if (NULL!=currentSurface){
- Layer* l = m_pScene->createLayer(GraphicalObject::INVALID_ID);
- l->OriginalSourceWidth = windowWidth;
- l->OriginalSourceHeight = windowHeight;
- l->setOpacity(1.0);
- l->setDestinationRegion(Rectangle(0,0,windowWidth,windowHeight));
- l->setSourceRegion(Rectangle(0,0,windowWidth,windowHeight));
- graphicSystem->beginLayer(l);
- graphicSystem->renderSurface(currentSurface);
- graphicSystem->endLayer();
- m_pScene->removeLayer(l);
- // layer is deleted in removeLayer.
- }else{
- LOG_ERROR("X11WindowSystem", "Could not take screenshot of non existing surface");
- }
+ Layer* currentLayer = m_pScene->getLayer(screenShotLayerID);
+ Surface* currentSurface = m_pScene->getSurface(screenShotSurfaceID);
+ if (currentLayer!=NULL && currentSurface!=NULL){
+ graphicSystem->beginLayer(currentLayer);
+ graphicSystem->renderSurface(currentSurface);
+ graphicSystem->endLayer();
+ }
}
graphicSystem->saveScreenShotOfFramebuffer(screenShotFile);
{
takeScreenshot = ScreenshotOfLayer;
screenShotFile = fileName;
- screenShotID = id;
+ screenShotLayerID = id;
}
-void X11WindowSystem::doScreenShotOfSurface(std::string fileName, const uint id)
+void X11WindowSystem::doScreenShotOfSurface(std::string fileName, const uint id, const uint layer_id)
{
takeScreenshot = ScreenshotOfSurface;
screenShotFile = fileName;
- screenShotID = id;
+ screenShotSurfaceID = id;
+ screenShotLayerID = layer_id;
}
virtual ~X11GLXRenderer();
void doScreenShot(std::string fileToSave);
void doScreenShotOfLayer(std::string fileToSave, uint id);
- void doScreenShotOfSurface(std::string fileToSave, uint id);
+ void doScreenShotOfSurface(std::string fileToSave, uint id, uint layer_id);
uint getNumberOfHardwareLayers(uint screenID);
uint* getScreenResolution(uint screenID);
uint* getScreenIDs(uint* length);
m_pWindowSystem->doScreenShotOfLayer(fileToSave,id);
}
-void X11GLXRenderer::doScreenShotOfSurface(std::string fileToSave, uint id){
- m_pWindowSystem->doScreenShotOfSurface(fileToSave,id);
+void X11GLXRenderer::doScreenShotOfSurface(std::string fileToSave, uint id, uint layer_id){
+ m_pWindowSystem->doScreenShotOfSurface(fileToSave,id,layer_id);
}
uint X11GLXRenderer::getNumberOfHardwareLayers(uint screenID)
void stop();
void doScreenShot(std::string fileToSave);
void doScreenShotOfLayer(std::string fileToSave, uint id);
- void doScreenShotOfSurface(std::string fileToSave, uint id);
+ void doScreenShotOfSurface(std::string fileToSave, uint id, uint layer_id);
uint getNumberOfHardwareLayers(uint screenID);
uint* getScreenResolution(uint screenID);
uint* getScreenIDs(uint* length);
m_pWindowSystem->doScreenShotOfLayer(fileToSave,id);
}
-void X11GLESRenderer::doScreenShotOfSurface(std::string fileToSave, uint id)
+void X11GLESRenderer::doScreenShotOfSurface(std::string fileToSave, uint id, uint layer_id)
{
- m_pWindowSystem->doScreenShotOfSurface(fileToSave,id);
+ m_pWindowSystem->doScreenShotOfSurface(fileToSave,id,layer_id);
}
uint X11GLESRenderer::getNumberOfHardwareLayers(uint screenID)
virtual void doScreenShot(std::string fileToSave) = 0;
virtual void doScreenShotOfLayer(std::string fileToSave, const unsigned int id) = 0;
- virtual void doScreenShotOfSurface(std::string fileToSave, const unsigned int id) = 0;
+ virtual void doScreenShotOfSurface(std::string fileToSave, const unsigned int id, const unsigned int layer_id) = 0;
virtual unsigned int getLayerTypeCapabilities(LayerType layertype) = 0;