summaryrefslogtreecommitdiff
path: root/src/search/Thumbnail.cpp
blob: 2fcd34a65fd541d63ee3a2ad94dd0c1493ab48dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
 * Thumbnail.cpp
 *
 *  Created on: Apr 3, 2012
 *      Author: Simon
 */

#include "Thumbnail.h"
#include "simulation/Simulation.h"
#include "simulation/SaveLoader.h"
#include "Renderer.h"

Thumbnail::Thumbnail(const Thumbnail & thumb):
	ID(thumb.ID),
	Datestamp(thumb.Datestamp),
	Data(thumb.Data),
	Size(thumb.Size)
{
	//Ensure the actual thumbnail data is copied
	if(thumb.Data)
	{
		Data = (pixel *)malloc((thumb.Size.X*thumb.Size.Y) * PIXELSIZE);
		memcpy(Data, thumb.Data, (thumb.Size.X*thumb.Size.Y) * PIXELSIZE);
	}
	else
	{
		Data = NULL;
	}
}

Thumbnail::Thumbnail(int _id, int _datestamp, pixel * _data, ui::Point _size):
	ID(_id),
	Datestamp(_datestamp),
	Data(_data),
	Size(_size)
{
}

Thumbnail::Thumbnail(Save * save):
	ID(0),
	Datestamp(0),
	Data(NULL),
	Size(XRES+BARSIZE, YRES+MENUSIZE)
{
	Graphics * g = new Graphics();
	Simulation * sim = new Simulation();
	Renderer * ren = new Renderer(g, sim);
	sim->Load(save->GetData(), save->GetDataLength());
	ren->render_parts();

	int width, height;

	pixel * dst;
	pixel * src = g->vid;

	if(SaveLoader::Info(save->GetData(), save->GetDataLength(), width, height))
		goto fail;

	dst = Data = (pixel *)malloc(PIXELSIZE * ((width*CELL)*(height*CELL)));

	for(int i = 0; i < height*CELL; i++)
	{
		memcpy(dst, src, (width*CELL)*PIXELSIZE);
		dst+=(width*CELL);///PIXELSIZE;
		src+=XRES+BARSIZE;
	}

	Size = ui::Point(width*CELL, height*CELL);
fail:
	delete ren;
	delete sim;
	delete g;
}

Thumbnail::~Thumbnail()
{
	if(Data)
	{
		free(Data);
	}
}