aboutsummaryrefslogtreecommitdiff
path: root/engines/cge/talk.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2011-07-10 14:51:22 +1000
committerPaul Gilbert2011-07-10 14:51:22 +1000
commit1870f09d3131ea6b9e2646343e5191cda614b49b (patch)
tree3d76e2b5836b8cfc263553d5db834978727e26b6 /engines/cge/talk.cpp
parentef83c248d386ec75b4e3ddf3d1178e82a38b6b76 (diff)
downloadscummvm-rg350-1870f09d3131ea6b9e2646343e5191cda614b49b.tar.gz
scummvm-rg350-1870f09d3131ea6b9e2646343e5191cda614b49b.tar.bz2
scummvm-rg350-1870f09d3131ea6b9e2646343e5191cda614b49b.zip
CGE: Fix several allocation mismatches and Valgrind issues
Diffstat (limited to 'engines/cge/talk.cpp')
-rw-r--r--engines/cge/talk.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp
index f41e31dce6..b6f276c452 100644
--- a/engines/cge/talk.cpp
+++ b/engines/cge/talk.cpp
@@ -99,7 +99,8 @@ void Font::save() {
Talk::Talk(CGEEngine *vm, const char *tx, TBOX_STYLE mode)
: Sprite(vm, NULL), _mode(mode), _vm(vm) {
- _ts[0] = _ts[1] = NULL;
+
+ _ts = NULL;
_flags._syst = true;
update(tx);
}
@@ -107,7 +108,7 @@ Talk::Talk(CGEEngine *vm, const char *tx, TBOX_STYLE mode)
Talk::Talk(CGEEngine *vm)
: Sprite(vm, NULL), _mode(PURE), _vm(vm) {
- _ts[0] = _ts[1] = NULL;
+ _ts = NULL;
_flags._syst = true;
}
@@ -141,7 +142,7 @@ void Talk::update(const char *tx) {
const char *p;
uint8 *m;
- if (!_ts[0]) {
+ if (!_ts) {
uint16 k = 2 * hmarg;
mh = 2 * vmarg + FONT_HIG;
for (p = tx; *p; p++) {
@@ -155,7 +156,10 @@ void Talk::update(const char *tx) {
}
if (k > mw)
mw = k;
+
+ _ts = new BMP_PTR[2];
_ts[0] = box(mw, mh);
+ _ts[1] = NULL;
}
m = _ts[0]->_m + ln * mw + hmarg;
@@ -286,6 +290,11 @@ void Talk::putLine(int line, const char *text) {
InfoLine::InfoLine(CGEEngine *vm, uint16 w) : Talk(vm), _oldTxt(NULL), _vm(vm) {
+ if (!_ts) {
+ _ts = new BMP_PTR[2];
+ _ts[1] = NULL;
+ }
+
_ts[0] = new Bitmap(w, FONT_HIG, TEXT_BG);
setShapeList(_ts);
}