mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Added demos of the DrawEllipse() and DrawSlope() function to the 'osddemo' plugin
This commit is contained in:
parent
b6b9a148c6
commit
764308667d
2
HISTORY
2
HISTORY
@ -7607,3 +7607,5 @@ Video Disk Recorder Revision History
|
|||||||
for the Quadrants parameter are not implemented).
|
for the Quadrants parameter are not implemented).
|
||||||
- Made cOsd::DestroyPixmap() "NULL proof".
|
- Made cOsd::DestroyPixmap() "NULL proof".
|
||||||
- Now deleting any previously allocated pixmaps in cOsd::SetAreas().
|
- Now deleting any previously allocated pixmaps in cOsd::SetAreas().
|
||||||
|
- Added demos of the DrawEllipse() and DrawSlope() function to the 'osddemo'
|
||||||
|
plugin (press '1' or '2', respectively).
|
||||||
|
@ -46,3 +46,8 @@ VDR Plugin 'osddemo' Revision History
|
|||||||
2013-01-12: Version 0.2.5
|
2013-01-12: Version 0.2.5
|
||||||
|
|
||||||
- Adapted Makefile to changes introduced in recent VDR versions.
|
- Adapted Makefile to changes introduced in recent VDR versions.
|
||||||
|
|
||||||
|
2013-02-13: Version 0.3.0
|
||||||
|
|
||||||
|
- Added demos of the DrawEllipse() and DrawSlope() function (press '1' or '2',
|
||||||
|
respectively).
|
||||||
|
@ -26,4 +26,9 @@ pixmap is displayed, it can be moved around with the Up, Down, Left
|
|||||||
and Right buttons. The Red button turns off the "Tiled Pixmaps"
|
and Right buttons. The Red button turns off the "Tiled Pixmaps"
|
||||||
display, and the Green button toggles the color display.
|
display, and the Green button toggles the color display.
|
||||||
|
|
||||||
|
In both variants of the demo, pressing the '1' key displays all
|
||||||
|
possible ellipses that can be drawn with the DrawEllipse() function,
|
||||||
|
while pressing the '2' key shows all possible slopes the DrawSlope()
|
||||||
|
function can draw.
|
||||||
|
|
||||||
Press Ok to close the window.
|
Press Ok to close the window.
|
||||||
|
@ -3,16 +3,93 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osddemo.c 2.8 2013/01/12 14:12:23 kls Exp $
|
* $Id: osddemo.c 2.9 2013/02/13 13:46:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <vdr/osd.h>
|
#include <vdr/osd.h>
|
||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
|
|
||||||
static const char *VERSION = "0.2.5";
|
static const char *VERSION = "0.3.0";
|
||||||
static const char *DESCRIPTION = "Demo of arbitrary OSD setup";
|
static const char *DESCRIPTION = "Demo of arbitrary OSD setup";
|
||||||
static const char *MAINMENUENTRY = "Osd Demo";
|
static const char *MAINMENUENTRY = "Osd Demo";
|
||||||
|
|
||||||
|
// --- DrawEllipses ----------------------------------------------------------
|
||||||
|
|
||||||
|
void DrawEllipse(cOsd *Osd, int x1, int y1, int x2, int y2, int Quadrants)
|
||||||
|
{
|
||||||
|
Osd->DrawRectangle(x1 + 2, y1 + 2, x2 - 2, y2 - 2, clrGreen);
|
||||||
|
Osd->DrawEllipse(x1 + 3, y1 + 3, x2 - 3, y2 - 3, clrRed, Quadrants);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawEllipses(cOsd *Osd)
|
||||||
|
{
|
||||||
|
int xa = 0;
|
||||||
|
int ya = 0;
|
||||||
|
int xb = Osd->Width() - 1;
|
||||||
|
int yb = Osd->Height() - 1;
|
||||||
|
int x0 = xa;
|
||||||
|
int x5 = xb;
|
||||||
|
int x1 = x0 + (xb - xa) / 5;
|
||||||
|
int x2 = x0 + (xb - xa) * 2 / 5;
|
||||||
|
int x3 = x0 + (xb - xa) * 3 / 5;
|
||||||
|
int x4 = x0 + (xb - xa) * 4 / 5;
|
||||||
|
int y0 = ya;
|
||||||
|
int y4 = yb;
|
||||||
|
int y2 = (y0 + y4) / 2;
|
||||||
|
int y1 = (y0 + y2) / 2;
|
||||||
|
int y3 = (y2 + y4) / 2;
|
||||||
|
Osd->DrawRectangle(xa, ya, xb, yb, clrGray50);
|
||||||
|
DrawEllipse(Osd, x4, y0, x5, y4, 0);
|
||||||
|
DrawEllipse(Osd, x2, y1, x3, y2, 1);
|
||||||
|
DrawEllipse(Osd, x1, y1, x2, y2, 2);
|
||||||
|
DrawEllipse(Osd, x1, y2, x2, y3, 3);
|
||||||
|
DrawEllipse(Osd, x2, y2, x3, y3, 4);
|
||||||
|
DrawEllipse(Osd, x3, y1, x4, y3, 5);
|
||||||
|
DrawEllipse(Osd, x1, y0, x3, y1, 6);
|
||||||
|
DrawEllipse(Osd, x0, y1, x1, y3, 7);
|
||||||
|
DrawEllipse(Osd, x1, y3, x3, y4, 8);
|
||||||
|
DrawEllipse(Osd, x3, y0, x4, y1, -1);
|
||||||
|
DrawEllipse(Osd, x0, y0, x1, y1, -2);
|
||||||
|
DrawEllipse(Osd, x0, y3, x1, y4, -3);
|
||||||
|
DrawEllipse(Osd, x3, y3, x4, y4, -4);
|
||||||
|
Osd->Flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- DrawSlopes ------------------------------------------------------------
|
||||||
|
|
||||||
|
void DrawSlope(cOsd *Osd, int x1, int y1, int x2, int y2, int Type)
|
||||||
|
{
|
||||||
|
Osd->DrawRectangle(x1 + 2, y1 + 2, x2 - 2, y2 - 2, clrGreen);
|
||||||
|
Osd->DrawSlope(x1 + 3, y1 + 3, x2 - 3, y2 - 3, clrRed, Type);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawSlopes(cOsd *Osd)
|
||||||
|
{
|
||||||
|
int xa = 0;
|
||||||
|
int ya = 0;
|
||||||
|
int xb = Osd->Width() - 1;
|
||||||
|
int yb = Osd->Height() - 1;
|
||||||
|
int x0 = xa;
|
||||||
|
int x4 = xb;
|
||||||
|
int x2 = (x0 + x4) / 2;
|
||||||
|
int x1 = (x0 + x2) / 2;
|
||||||
|
int x3 = (x2 + x4) / 2;
|
||||||
|
int y0 = ya;
|
||||||
|
int y3 = yb;
|
||||||
|
int y2 = (y0 + y3) / 2;
|
||||||
|
int y1 = (y0 + y2) / 2;
|
||||||
|
Osd->DrawRectangle(xa, ya, xb, yb, clrGray50);
|
||||||
|
DrawSlope(Osd, x0, y0, x2, y1, 0);
|
||||||
|
DrawSlope(Osd, x2, y0, x4, y1, 1);
|
||||||
|
DrawSlope(Osd, x0, y1, x2, y2, 2);
|
||||||
|
DrawSlope(Osd, x2, y1, x4, y2, 3);
|
||||||
|
DrawSlope(Osd, x0, y2, x1, y3, 4);
|
||||||
|
DrawSlope(Osd, x1, y2, x2, y3, 5);
|
||||||
|
DrawSlope(Osd, x2, y2, x3, y3, 6);
|
||||||
|
DrawSlope(Osd, x3, y2, x4, y3, 7);
|
||||||
|
Osd->Flush();
|
||||||
|
}
|
||||||
|
|
||||||
// --- cLineGame -------------------------------------------------------------
|
// --- cLineGame -------------------------------------------------------------
|
||||||
|
|
||||||
class cLineGame : public cOsdObject {
|
class cLineGame : public cOsdObject {
|
||||||
@ -31,7 +108,7 @@ public:
|
|||||||
cLineGame::cLineGame(void)
|
cLineGame::cLineGame(void)
|
||||||
{
|
{
|
||||||
osd = NULL;
|
osd = NULL;
|
||||||
x = y = 50;
|
x = y = 0;
|
||||||
color = clrRed;
|
color = clrRed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,12 +119,23 @@ cLineGame::~cLineGame()
|
|||||||
|
|
||||||
void cLineGame::Show(void)
|
void cLineGame::Show(void)
|
||||||
{
|
{
|
||||||
osd = cOsdProvider::NewOsd(100, 50, 50);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop(), 50);
|
||||||
if (osd) {
|
if (osd) {
|
||||||
tArea Area = { 0, 0, 99, 199, 4 };
|
int x1 = cOsd::OsdWidth() - 1;
|
||||||
|
int y1 = cOsd::OsdHeight() - 1;
|
||||||
|
while (x1 > 0 && y1 > 0) {
|
||||||
|
tArea Area = { 0, 0, x1, y1, 4 };
|
||||||
|
if (osd->CanHandleAreas(&Area, 1) == oeOk) {
|
||||||
osd->SetAreas(&Area, 1);
|
osd->SetAreas(&Area, 1);
|
||||||
osd->DrawRectangle(0, 0, 99, 199, clrGray50);
|
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, clrGray50);
|
||||||
osd->Flush();
|
osd->Flush();
|
||||||
|
x = osd->Width() / 2;
|
||||||
|
y = osd->Height() / 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
x1 = x1 * 9 / 10;
|
||||||
|
y1 = y1 * 9 / 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,19 +143,24 @@ eOSState cLineGame::ProcessKey(eKeys Key)
|
|||||||
{
|
{
|
||||||
eOSState state = cOsdObject::ProcessKey(Key);
|
eOSState state = cOsdObject::ProcessKey(Key);
|
||||||
if (state == osUnknown) {
|
if (state == osUnknown) {
|
||||||
|
const int d = 4;
|
||||||
switch (Key & ~k_Repeat) {
|
switch (Key & ~k_Repeat) {
|
||||||
case kUp: if (y > 0) y--; break;
|
case kUp: y = max(0, y - d); break;
|
||||||
case kDown: if (y < 196) y++; break;
|
case kDown: y = min(osd->Height() - d, y + d); break;
|
||||||
case kLeft: if (x > 0) x--; break;
|
case kLeft: x = max(0, x - d); break;
|
||||||
case kRight: if (x < 96) x++; break;
|
case kRight: x = min(osd->Width() - d, x + d); break;
|
||||||
case kRed: color = clrRed; break;
|
case kRed: color = clrRed; break;
|
||||||
case kGreen: color = clrGreen; break;
|
case kGreen: color = clrGreen; break;
|
||||||
case kYellow: color = clrYellow; break;
|
case kYellow: color = clrYellow; break;
|
||||||
case kBlue: color = clrBlue; break;
|
case kBlue: color = clrBlue; break;
|
||||||
|
case k1: DrawEllipses(osd);
|
||||||
|
return osContinue;
|
||||||
|
case k2: DrawSlopes(osd);
|
||||||
|
return osContinue;
|
||||||
case kOk: return osEnd;
|
case kOk: return osEnd;
|
||||||
default: return state;
|
default: return state;
|
||||||
}
|
}
|
||||||
osd->DrawRectangle(x, y, x + 3, y + 3, color);
|
osd->DrawRectangle(x, y, x + d - 1, y + d - 1, color);
|
||||||
osd->Flush();
|
osd->Flush();
|
||||||
state = osContinue;
|
state = osContinue;
|
||||||
}
|
}
|
||||||
@ -84,6 +177,7 @@ private:
|
|||||||
bool clockwise;
|
bool clockwise;
|
||||||
cPixmap *destroyablePixmap;
|
cPixmap *destroyablePixmap;
|
||||||
cPixmap *toggleablePixmap;
|
cPixmap *toggleablePixmap;
|
||||||
|
bool SetArea(void);
|
||||||
virtual void Action(void);
|
virtual void Action(void);
|
||||||
cPixmap *CreateTextPixmap(const char *s, int Line, int Layer, tColor ColorFg, tColor ColorBg, const cFont *Font);
|
cPixmap *CreateTextPixmap(const char *s, int Line, int Layer, tColor ColorFg, tColor ColorBg, const cFont *Font);
|
||||||
public:
|
public:
|
||||||
@ -390,12 +484,20 @@ void cTrueColorDemo::Action(void)
|
|||||||
delete LrgFont;
|
delete LrgFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cTrueColorDemo::SetArea(void)
|
||||||
|
{
|
||||||
|
if (osd) {
|
||||||
|
tArea Area = { 0, 0, cOsd::OsdWidth() - 1, cOsd::OsdHeight() - 1, 32 };
|
||||||
|
return osd->SetAreas(&Area, 1) == oeOk;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void cTrueColorDemo::Show(void)
|
void cTrueColorDemo::Show(void)
|
||||||
{
|
{
|
||||||
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop(), 50);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop(), 50);
|
||||||
if (osd) {
|
if (osd) {
|
||||||
tArea Area = { 0, 0, cOsd::OsdWidth() - 1, cOsd::OsdHeight() - 1, 32 };
|
if (SetArea()) {
|
||||||
if (osd->SetAreas(&Area, 1) == oeOk) {
|
|
||||||
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, clrGray50);
|
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, clrGray50);
|
||||||
osd->Flush();
|
osd->Flush();
|
||||||
Start();
|
Start();
|
||||||
@ -423,6 +525,14 @@ eOSState cTrueColorDemo::ProcessKey(eKeys Key)
|
|||||||
case kGreen: if (toggleablePixmap)
|
case kGreen: if (toggleablePixmap)
|
||||||
toggleablePixmap->SetLayer(-toggleablePixmap->Layer());
|
toggleablePixmap->SetLayer(-toggleablePixmap->Layer());
|
||||||
break;
|
break;
|
||||||
|
case k1: Cancel(3);
|
||||||
|
SetArea();
|
||||||
|
DrawEllipses(osd);
|
||||||
|
break;
|
||||||
|
case k2: Cancel(3);
|
||||||
|
SetArea();
|
||||||
|
DrawSlopes(osd);
|
||||||
|
break;
|
||||||
case kOk: return osEnd;
|
case kOk: return osEnd;
|
||||||
default: return state;
|
default: return state;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user