diff options
-rw-r--r-- | dxr3osd.c | 16 | ||||
-rw-r--r-- | dxr3osd.h | 1 |
2 files changed, 17 insertions, 0 deletions
@@ -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); } @@ -35,6 +35,7 @@ private: cTimeMs *last; tArea areas[MAXNUMWINDOWS]; int numAreas; + cBitmap *mergedBitmap; }; #endif /*_DXR3_OSD_H_*/ |