summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-03-09 21:50:36 (GMT)
committer jacob1 <jfu614@gmail.com>2013-03-09 21:50:36 (GMT)
commite6f6eedd1364fd3792d6ca7aa3ac2d0c97911f70 (patch)
tree52dfba69783bc6538cb11550b14684801b476952 /src
parentc66d4c72f5470a46564174ebf7a75c597b275731 (diff)
downloadpowder-e6f6eedd1364fd3792d6ca7aa3ac2d0c97911f70.zip
powder-e6f6eedd1364fd3792d6ca7aa3ac2d0c97911f70.tar.gz
fix empty signs being created when shifting them out of bounds, draw parts of images when it goes partway off the top of the screen.
Diffstat (limited to 'src')
-rw-r--r--src/graphics/RasterDrawMethods.inl6
-rw-r--r--src/preview/PreviewModel.cpp3
-rw-r--r--src/simulation/Simulation.cpp11
3 files changed, 16 insertions, 4 deletions
diff --git a/src/graphics/RasterDrawMethods.inl b/src/graphics/RasterDrawMethods.inl
index dec15f1..07b8257 100644
--- a/src/graphics/RasterDrawMethods.inl
+++ b/src/graphics/RasterDrawMethods.inl
@@ -362,6 +362,12 @@ void PIXELMETHODS_CLASS::draw_image(pixel *img, int x, int y, int w, int h, int
int i, j, r, g, b;
if (!img) return;
if(y + h > VIDYRES) h = ((VIDYRES)-y)-1; //Adjust height to prevent drawing off the bottom
+ if (y < 0 && -y < h)
+ {
+ img += -y*w;
+ h += y;
+ y = 0;
+ }
if(!h || y < 0) return;
if(a >= 255)
for (j=0; j<h; j++)
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp
index 8a0ff59..5144db1 100644
--- a/src/preview/PreviewModel.cpp
+++ b/src/preview/PreviewModel.cpp
@@ -101,6 +101,7 @@ void PreviewModel::UpdateSave(int saveID, int saveDate)
for(int i = 0; i < saveComments->size(); i++)
delete saveComments->at(i);
saveComments->clear();
+ delete saveComments;
saveComments = NULL;
}
notifySaveChanged();
@@ -166,6 +167,7 @@ void PreviewModel::UpdateComments(int pageNumber)
{
for(int i = 0; i < saveComments->size(); i++)
delete saveComments->at(i);
+ saveComments->clear();
delete saveComments;
saveComments = NULL;
}
@@ -314,6 +316,7 @@ PreviewModel::~PreviewModel() {
for(int i = 0; i < saveComments->size(); i++)
delete saveComments->at(i);
saveComments->clear();
+ delete saveComments;
}
saveDataBuffer.clear();
}
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp
index b6f4f84..3acf413 100644
--- a/src/simulation/Simulation.cpp
+++ b/src/simulation/Simulation.cpp
@@ -146,10 +146,13 @@ int Simulation::Load(int fullX, int fullY, GameSave * save)
Element_PPIP::ppip_changed = 1;
for(int i = 0; i < save->signs.size() && signs.size() < MAXSIGNS; i++)
{
- sign tempSign = save->signs[i];
- tempSign.x += fullX;
- tempSign.y += fullY;
- signs.push_back(tempSign);
+ if (save->signs[i].text[0])
+ {
+ sign tempSign = save->signs[i];
+ tempSign.x += fullX;
+ tempSign.y += fullY;
+ signs.push_back(tempSign);
+ }
}
for(int saveBlockX = 0; saveBlockX < save->blockWidth; saveBlockX++)
{