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.

This commit is contained in:
jacob1 2013-03-09 16:50:36 -05:00
parent c66d4c72f5
commit e6f6eedd13
3 changed files with 16 additions and 4 deletions

View File

@ -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++)

View File

@ -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();
}

View File

@ -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++)
{