diff --git a/library/Core.cpp b/library/Core.cpp index 3dbd6fc36..33ffbc450 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -679,7 +679,7 @@ bool Core::Init() HotkeyCond = new condition_variable(); thread * HK = new thread(fHKthread, (void *) temp); screen_window = new Windows::top_level_window(); - screen_window->addChild(new Windows::dfhack_dummy(0,0)); + screen_window->addChild(new Windows::dfhack_dummy(5,10)); started = true; cerr << "DFHack is running.\n"; return true; diff --git a/library/include/modules/Windows.h b/library/include/modules/Windows.h index e8309562a..314b6e292 100644 --- a/library/include/modules/Windows.h +++ b/library/include/modules/Windows.h @@ -23,6 +23,7 @@ distribution. */ #pragma once +#include "Export.h" #include namespace DFHack @@ -67,14 +68,6 @@ namespace Windows class df_window; struct df_tilebuf { - df_tilebuf(unsigned int width, unsigned int height):width(width),height(height) - { - data = new df_screentile[width*height]; - } - ~df_tilebuf() - { - delete data; - } df_screentile * data; unsigned int width; unsigned int height; @@ -193,7 +186,7 @@ namespace Windows virtual painter * lock(); bool unlock (painter * painter); virtual bool addChild(df_window *); - virtual df_screentile * getBuffer() = 0; + virtual df_tilebuf getBuffer() = 0; public: df_screentile* buffer; unsigned int width; @@ -215,7 +208,7 @@ namespace Windows virtual bool move (int left_, int top_, unsigned int width_, unsigned int height_); virtual void paint (); virtual painter * lock(); - virtual df_screentile * getBuffer(); + virtual df_tilebuf getBuffer(); }; class DFHACK_EXPORT buffered_window : public df_window { @@ -230,24 +223,26 @@ namespace Windows } virtual void blit_to_parent () { - df_screentile * parbuf = parent->getBuffer(); - int parent_width = parent->width; - int parent_height = parent->height; + df_tilebuf par = parent->getBuffer(); for(int xi = 0; xi < width; xi++) { for(int yi = 0; yi < height; yi++) { int parx = left + xi; int pary = top + yi; - if(pary >= parent_height) continue; - if(parx >= parent_width) continue; - parbuf[parx * parent_height + pary] = buffer[xi * height + yi]; + if(pary >= par.height) continue; + if(parx >= par.width) continue; + par.data[parx * par.height + pary] = buffer[xi * height + yi]; } } } - virtual df_screentile* getBuffer() + virtual df_tilebuf getBuffer() { - return buffer; + df_tilebuf buf; + buf.data = buffer; + buf.width = width; + buf.height = height; + return buf; }; }; class DFHACK_EXPORT dfhack_dummy : public buffered_window diff --git a/library/modules/Windows.cpp b/library/modules/Windows.cpp index 18149e61e..6fbe37125 100644 --- a/library/modules/Windows.cpp +++ b/library/modules/Windows.cpp @@ -108,7 +108,11 @@ void Windows::top_level_window::paint () } }; -Windows::df_screentile * Windows::top_level_window::getBuffer() +Windows::df_tilebuf Windows::top_level_window::getBuffer() { - return getScreenBuffer(); + df_tilebuf buf; + buf.data = getScreenBuffer(); + buf.height = df::global::gps->dimy; + buf.width = df::global::gps->dimx; + return buf; } \ No newline at end of file