mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Added a demo case for storing images
This commit is contained in:
		@@ -78,3 +78,4 @@ VDR Plugin 'osddemo' Revision History
 | 
			
		||||
- Now using cOsd::MaxPixmapSize().
 | 
			
		||||
- Fixed a vertical black line in the "TiledPixmaps" area on the rpihddevice OSD with
 | 
			
		||||
  1280x800 pixel (thanks to Thomas Reufer).
 | 
			
		||||
- Added a demo case for storing images (thanks to Thomas Reufer).
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
 *
 | 
			
		||||
 * See the README file for copyright information and how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: osddemo.c 4.2 2015/03/08 16:42:01 kls Exp $
 | 
			
		||||
 * $Id: osddemo.c 4.3 2015/04/12 09:35:21 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <vdr/osd.h>
 | 
			
		||||
@@ -90,6 +90,52 @@ void DrawSlopes(cOsd *Osd)
 | 
			
		||||
  Osd->Flush();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- DrawImages ------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
struct tOsdImageRef {
 | 
			
		||||
  int image;
 | 
			
		||||
  cSize size;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
#define NUMOSDIMAGES 16
 | 
			
		||||
#define NUMOSDIMAGEVARIANTS 8
 | 
			
		||||
 | 
			
		||||
void DrawImages(cOsd *Osd)
 | 
			
		||||
{
 | 
			
		||||
  // Create images:
 | 
			
		||||
  cImage *images[NUMOSDIMAGEVARIANTS];
 | 
			
		||||
  for (int i = 0; i < NUMOSDIMAGEVARIANTS; i++) {
 | 
			
		||||
      images[i] = new cImage(cSize(
 | 
			
		||||
        i == 0 || i == 1 ? Osd->MaxPixmapSize().Width() + 1 : rand() % Osd->Width(),
 | 
			
		||||
        i == 0 || i == 2 ? Osd->MaxPixmapSize().Height() + 1 : rand() % Osd->Height()));
 | 
			
		||||
      for (int x = 0; x < images[i]->Width(); x++) {
 | 
			
		||||
          for (int y = 0; y < images[i]->Height(); y++) {
 | 
			
		||||
              images[i]->SetPixel(cPoint(x, y),
 | 
			
		||||
                (!x || !y || x == images[i]->Width() - 1 || y == images[i]->Height() - 1) ? clrWhite :
 | 
			
		||||
                (x > images[i]->Width() / 2 ?
 | 
			
		||||
                  (y > images[i]->Height() / 2 ? clrBlue : clrGreen) :
 | 
			
		||||
                  (y > images[i]->Height() / 2 ? clrRed : clrYellow)));
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
  // Store images:
 | 
			
		||||
  tOsdImageRef osdImages[NUMOSDIMAGES];
 | 
			
		||||
  for (int i = 0; i < NUMOSDIMAGES; i++) {
 | 
			
		||||
      osdImages[i].image = cOsdProvider::StoreImage(*images[i % NUMOSDIMAGEVARIANTS]);
 | 
			
		||||
      osdImages[i].size.Set(images[i % NUMOSDIMAGEVARIANTS]->Size());
 | 
			
		||||
      }
 | 
			
		||||
  // Delete images:
 | 
			
		||||
  for (int i = 0; i < NUMOSDIMAGEVARIANTS; i++)
 | 
			
		||||
      delete images[i];
 | 
			
		||||
  // Draw images:
 | 
			
		||||
  for (int i = 0; i < NUMOSDIMAGES; i++)
 | 
			
		||||
      Osd->DrawImage(cPoint(rand() % (Osd->Width() + osdImages[i].size.Width()), rand() % (Osd->Height() + osdImages[i].size.Height())).Shifted(-osdImages[i].size.Width(), -osdImages[i].size.Height()), osdImages[i].image);
 | 
			
		||||
  // Drop image references:
 | 
			
		||||
  for (int i = 0; i < NUMOSDIMAGES; i++)
 | 
			
		||||
      cOsdProvider::DropImage(osdImages[i].image);
 | 
			
		||||
  Osd->Flush();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cLineGame -------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class cLineGame : public cOsdObject {
 | 
			
		||||
@@ -540,6 +586,10 @@ eOSState cTrueColorDemo::ProcessKey(eKeys Key)
 | 
			
		||||
                     SetArea();
 | 
			
		||||
                     DrawSlopes(osd);
 | 
			
		||||
                     break;
 | 
			
		||||
       case k3:      Cancel(3);
 | 
			
		||||
                     SetArea();
 | 
			
		||||
                     DrawImages(osd);
 | 
			
		||||
                     break;
 | 
			
		||||
       case kBack:
 | 
			
		||||
       case kOk:     return osEnd;
 | 
			
		||||
       default: return state;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user