aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/PlatWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/PlatWin.cxx')
-rw-r--r--win32/PlatWin.cxx24
1 files changed, 20 insertions, 4 deletions
diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx
index 4ad7e5cab..f9b05fce6 100644
--- a/win32/PlatWin.cxx
+++ b/win32/PlatWin.cxx
@@ -85,10 +85,14 @@ Palette::Palette() {
used = 0;
allowRealization = false;
hpal = 0;
+ size = 100;
+ entries = new ColourPair[size];
}
Palette::~Palette() {
Release();
+ delete []entries;
+ entries = 0;
}
void Palette::Release() {
@@ -96,6 +100,9 @@ void Palette::Release() {
if (hpal)
::DeleteObject(hpal);
hpal = 0;
+ delete []entries;
+ size = 100;
+ entries = new ColourPair[size];
}
/**
@@ -110,11 +117,20 @@ void Palette::WantFind(ColourPair &cp, bool want) {
return;
}
- if (used < numEntries) {
- entries[used].desired = cp.desired;
- entries[used].allocated.Set(cp.desired.AsLong());
- used++;
+ if (used >= size) {
+ int sizeNew = size * 2;
+ ColourPair *entriesNew = new ColourPair[sizeNew];
+ for (int j=0; j<size; j++) {
+ entriesNew[j] = entries[j];
+ }
+ delete []entries;
+ entries = entriesNew;
+ size = sizeNew;
}
+
+ entries[used].desired = cp.desired;
+ entries[used].allocated.Set(cp.desired.AsLong());
+ used++;
} else {
for (int i=0; i < used; i++) {
if (entries[i].desired == cp.desired) {