/*************************************************************** -*- c++ -*- * * * display.h - Actual implementation of OSD display variants and * * Display:: namespace that encapsulates a single cDisplay. * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * Changelog: * * 2005-03 initial version (c) Udo Richter * * * ***************************************************************************/ #ifndef OSDTELETEXT_DISPLAY_H_ #define OSDTELETEXT_DISPLAY_H_ #include "displaybase.h" #include namespace Display { // The Display:: namespace mainly encapsulates a cDisplay *display variable // and allows NULL-safe access to display members. // Additionally, selects via mode the actually used instance for *display. enum Mode { Full, HalfUpper, HalfLower }; // Full mode: 2BPP or 4BPP full screen display, depending on memory constrains // HalfUpper: 4BPP display of upper half, drop lower half if out of memory // HalfLower: 4BPP display of lower half, drop upper half if out of memory extern Mode mode; extern cDisplay *display; // Access to display mode: void SetMode(Display::Mode mode); inline void Delete() { if (display) { DELETENULL(display); } } void ShowUpperHalf(); // Make sure the upper half of screen is visible // eg. for entering numbers etc. // Wrapper calls for various *display members: inline bool GetBlink() { if (display) return display->GetBlink(); else return false; } inline bool SetBlink(bool blink) { if (display) display->SetBlink(blink); else return false; } inline bool GetConceal() { if (display) return display->GetConceal(); else return false; } inline bool SetConceal(bool conceal) { if (display) display->SetConceal(conceal); else return false; } inline cDisplay::enumZoom GetZoom() { if (display) return display->GetZoom(); else return cDisplay::Zoom_Off; } inline void SetZoom(cDisplay::enumZoom zoom) { if (display) display->SetZoom(zoom); } inline void SetBackgroundColor(tColor c) { if (display) display->SetBackgroundColor(c); } inline tColor GetBackgroundColor() { if (display) return display->GetBackgroundColor(); else return 0; } inline void HoldFlush() { if (display) display->HoldFlush(); } inline void ReleaseFlush() { if (display) display->ReleaseFlush(); } inline void RenderTeletextCode(unsigned char *PageCode) { if (display) display->RenderTeletextCode(PageCode); } inline void DrawClock() { if (display) display->DrawClock(); } inline void DrawPageId(const char *text) { if (display) display->DrawPageId(text); } inline void DrawMessage(const char *txt) { if (display) display->DrawMessage(txt); } inline void ClearMessage() { if (display) display->ClearMessage(); } } class cDisplay32BPP : public cDisplay { // True Color OSD display // No need for color mapping // Uses cPixmap instead of cBitmap public: cDisplay32BPP(int x0, int y0, int width, int height); }; class cDisplay32BPPHalf : public cDisplay { // 32BPP (true color) OSD display with auto size reduction on memory constrains // Automatically tries to make visible area as big as possible // No need for color mapping bool Upper; // Prefer to show upper half or lower half? int OsdX0,OsdY0; // Needed to re-initialize osd public: cDisplay32BPPHalf(int x0, int y0, int width, int height, bool upper); bool GetUpper() { return Upper; } void SetUpper(bool upper) { if (Upper!=upper) { Upper=upper; InitOSD(); } } protected: void InitOSD(); }; #endif