summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMohamed Waheed <mohamedwaheedmohamed@gmail.com>2014-06-24 20:27:31 +0300
committerMohamed Waheed <mohamedwaheedmohamed@gmail.com>2014-06-24 20:27:31 +0300
commitb7125a5b24bc6d2581bec0d3f792ba948e0e7edd (patch)
tree4770e1157e82b584611560b4f43a506571a88397 /src
parent613e1d74c47cf3a756af9aff75575c7567699381 (diff)
downloadcolobot-b7125a5b24bc6d2581bec0d3f792ba948e0e7edd.tar.gz
colobot-b7125a5b24bc6d2581bec0d3f792ba948e0e7edd.tar.bz2
colobot-b7125a5b24bc6d2581bec0d3f792ba948e0e7edd.zip
formatting and enhancements for savefile screenshot feature
Diffstat (limited to 'src')
-rw-r--r--src/common/image.cpp33
-rw-r--r--src/common/image.h2
-rw-r--r--src/graphics/engine/engine.cpp2
-rw-r--r--src/graphics/opengl/gldevice.cpp10
-rw-r--r--src/ui/maindialog.cpp4
5 files changed, 24 insertions, 27 deletions
diff --git a/src/common/image.cpp b/src/common/image.cpp
index ff5e42c..e3d1ef7 100644
--- a/src/common/image.cpp
+++ b/src/common/image.cpp
@@ -420,26 +420,27 @@ bool CImage::SavePNG(const std::string& fileName)
void CImage::SetDataPixels(void *pixels){
- if (m_data != nullptr){
-
- if (m_data->surface != nullptr)
- {
- if ( m_data->surface->pixels != nullptr ){
- unsigned int* pixels = static_cast<unsigned int*>(m_data->surface->pixels);
- delete [] pixels;
- m_data->surface->pixels = nullptr;
- }
- }
+ Uint8* srcPixels = static_cast<Uint8*> (pixels);
+ Uint8* resultPixels = static_cast<Uint8*> (m_data->surface->pixels);
+
+ Uint32 pitch = m_data->surface->pitch;
+
+ for(int line = 0; line < m_data->surface->h; ++line) {
+ Uint32 pos = line * pitch;
+ memcpy(&resultPixels[pos], &srcPixels[pos], pitch);
}
-
- m_data->surface->pixels = pixels;
}
-void CImage::flipVertical(){
+void CImage::flipVertically(){
- SDL_Surface* result = SDL_CreateRGBSurface(m_data->surface->flags, m_data->surface->w, m_data->surface->h,
- m_data->surface->format->BytesPerPixel * 8, m_data->surface->format->Rmask, m_data->surface->format->Gmask,
- m_data->surface->format->Bmask, m_data->surface->format->Amask);
+ SDL_Surface* result = SDL_CreateRGBSurface( m_data->surface->flags,
+ m_data->surface->w,
+ m_data->surface->h,
+ m_data->surface->format->BytesPerPixel * 8,
+ m_data->surface->format->Rmask,
+ m_data->surface->format->Gmask,
+ m_data->surface->format->Bmask,
+ m_data->surface->format->Amask);
assert(result != nullptr);
diff --git a/src/common/image.h b/src/common/image.h
index afbebc2..b93f2f9 100644
--- a/src/common/image.h
+++ b/src/common/image.h
@@ -110,7 +110,7 @@ public:
std::string GetError();
//! Flips the image vertically
- void flipVertical();
+ void flipVertically();
//! sets/replaces the pixels from the surface
void SetDataPixels(void *pixels);
diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp
index 9216fb0..e0861d2 100644
--- a/src/graphics/engine/engine.cpp
+++ b/src/graphics/engine/engine.cpp
@@ -428,7 +428,7 @@ bool CEngine::WriteScreenShot(const std::string& fileName, int width, int height
CImage img({width,height});
img.SetDataPixels(pixels);
- img.flipVertical();
+ img.flipVertically();
if ( img.SavePNG(fileName.c_str()) ){
GetLogger()->Info("Save SceenShot Saved Successfully!\n");
diff --git a/src/graphics/opengl/gldevice.cpp b/src/graphics/opengl/gldevice.cpp
index 57738a6..b42f29d 100644
--- a/src/graphics/opengl/gldevice.cpp
+++ b/src/graphics/opengl/gldevice.cpp
@@ -1793,17 +1793,13 @@ FillMode CGLDevice::GetFillMode()
void* CGLDevice::GetFrameBufferPixels()const{
- SDL_Surface* surface = SDL_GetVideoSurface();
-
- assert(surface != nullptr);
-
- GLubyte* pixels = new GLubyte [4 * surface->h * surface->w];
+ GLubyte* pixels = new GLubyte [4 * m_config.size.x * m_config.size.y];
- glReadPixels(0,0,surface->w,surface->h,GL_RGBA,GL_UNSIGNED_BYTE,pixels);
+ glReadPixels(0, 0, m_config.size.x, m_config.size.y, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
unsigned int* p = static_cast<unsigned int*> ( static_cast<void*>(pixels) );
- for (int i = 0; i < surface->h * surface->w; ++i)
+ for (int i = 0; i < m_config.size.x * m_config.size.y; ++i)
p[i] |= 0xFF000000;
return static_cast<void*>(p);
diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp
index 784cd59..fc5bb30 100644
--- a/src/ui/maindialog.cpp
+++ b/src/ui/maindialog.cpp
@@ -2076,9 +2076,9 @@ bool CMainDialog::EventProcess(const Event &event)
m_shotDelay --;
if ( m_shotDelay == 0 )
{
- Math::IntPoint screenSize = m_app->GetVideoConfig().size;
+ Math::IntPoint windowSize = m_engine->GetWindowSize();
- m_engine->WriteScreenShot(m_shotName, screenSize.x, screenSize.y);
+ m_engine->WriteScreenShot(m_shotName, windowSize.x, windowSize.y);
}
}