From 7544c9f03bac7721d31a89edba0c627d859f5777 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 11 Apr 2005 20:15:43 +0000 Subject: [PATCH] Implemented DumpToFile() from AccelerantDriver so that screenshots can be taken. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12296 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../app/drawing/DisplayDriverPainter.cpp | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/servers/app/drawing/DisplayDriverPainter.cpp b/src/servers/app/drawing/DisplayDriverPainter.cpp index c6265e7dda..a49c01970c 100644 --- a/src/servers/app/drawing/DisplayDriverPainter.cpp +++ b/src/servers/app/drawing/DisplayDriverPainter.cpp @@ -1081,7 +1081,35 @@ DisplayDriverPainter::SetMode(const display_mode &mode) bool DisplayDriverPainter::DumpToFile(const char *path) { - return false; +#if 0 + // TODO: find out why this does not work + SaveToPNG( path, + BRect(0, 0, fDisplayMode.virtual_width - 1, fDisplayMode.virtual_height - 1), + (color_space)fDisplayMode.space, + mFrameBufferConfig.frame_buffer, + fDisplayMode.virtual_height * mFrameBufferConfig.bytes_per_row, + mFrameBufferConfig.bytes_per_row);*/ +#else + // TODO: remove this when SaveToPNG works properly + + // this does dump each line at a time to ensure that everything + // gets written even if we crash somewhere. + // it's a bit overkill, but works for now. + FILE *output = fopen(path, "w"); + if (!output) + return false; + + RenderingBuffer *back_buffer = fGraphicsCard->BackBuffer(); + uint32 row = back_buffer->BytesPerRow() / 4; + for (int i = 0; i < fDisplayMode.virtual_height; i++) { + fwrite((uint32 *)back_buffer->Bits() + i * row, 4, row, output); + sync(); + } + fclose(output); + sync(); +#endif + + return true; } // DumpToBitmap