summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dxr3osd.c16
-rw-r--r--dxr3osd.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/dxr3osd.c b/dxr3osd.c
index 6ece3c9..f9bed42 100644
--- a/dxr3osd.c
+++ b/dxr3osd.c
@@ -67,6 +67,7 @@ public:
cDxr3Osd::cDxr3Osd(int Left, int Top, uint Level)
: cOsd(Left, Top, Level)
{
+ mergedBitmap = NULL;
shown = false;
Palette = new cPalette(4);
last = new cTimeMs();
@@ -80,6 +81,9 @@ cDxr3Osd::~cDxr3Osd()
SetActive(false);
delete Palette;
delete last;
+
+ if (mergedBitmap)
+ delete mergedBitmap;
}
// ==================================
@@ -142,6 +146,18 @@ eOsdError cDxr3Osd::SetAreas(const tArea *Areas, int NumAreas)
memcpy(areas, Areas, sizeof(tArea) * NumAreas);
numAreas = NumAreas;
+ // allocate a new bitmap, which will contain all areas
+ if (numAreas > 1) {
+
+ int w = areas[numAreas - 1].x2;
+ int h = areas[numAreas - 1].y2;
+
+ if (mergedBitmap)
+ delete mergedBitmap;
+
+ mergedBitmap = new cBitmap(w, h, 4, 0, 0);
+ }
+
return cOsd::SetAreas(Areas, NumAreas);
}
diff --git a/dxr3osd.h b/dxr3osd.h
index e4bfa2e..42cc8c6 100644
--- a/dxr3osd.h
+++ b/dxr3osd.h
@@ -35,6 +35,7 @@ private:
cTimeMs *last;
tArea areas[MAXNUMWINDOWS];
int numAreas;
+ cBitmap *mergedBitmap;
};
#endif /*_DXR3_OSD_H_*/