diff options
author | louis <louis.braun@gmx.de> | 2014-12-06 10:15:25 +0100 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2014-12-06 10:15:25 +0100 |
commit | 997ab6c06c5cc06f2778a7a609a4268660ae4a51 (patch) | |
tree | 72d58f21af30170c65d269bc1f9d7c640b13dbe7 | |
parent | 974ca74366af7ab022c1fb79c4d36e1e0b4e4d14 (diff) | |
download | vdr-plugin-skindesigner-997ab6c06c5cc06f2778a7a609a4268660ae4a51.tar.gz vdr-plugin-skindesigner-997ab6c06c5cc06f2778a7a609a4268660ae4a51.tar.bz2 |
Revert "drawing ellipses antialiased with Cairo"
This reverts commit 7ce445025e10bf4eb0c4066907e588039c09f1ad.
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | libcore/imagecache.c | 42 | ||||
-rw-r--r-- | libcore/imagecache.h | 4 | ||||
-rw-r--r-- | libcore/imagecreator.c | 202 | ||||
-rw-r--r-- | libcore/imagecreator.h | 26 | ||||
-rw-r--r-- | libtemplate/template.c | 11 | ||||
-rw-r--r-- | libtemplate/template.h | 1 | ||||
-rw-r--r-- | libtemplate/templatefunction.c | 5 | ||||
-rw-r--r-- | libtemplate/templatefunction.h | 4 | ||||
-rw-r--r-- | skins/nopacity/xmlfiles/displaymenu.xml | 12 | ||||
-rw-r--r-- | views/view.c | 7 |
12 files changed, 15 insertions, 304 deletions
@@ -103,5 +103,3 @@ Version 0.0.7 - fixed bug that global double vars are not working Version 0.0.8 - -- drawing ellipses antialiased with Cairo
\ No newline at end of file @@ -66,9 +66,8 @@ OBJS = $(PLUGIN).o \ libcore/pixmapcontainer.o \ libcore/fontmanager.o \ libcore/imagecache.o \ - libcore/imageloader.o \ - libcore/imagecreator.o \ libcore/helpers.o \ + libcore/imageloader.o \ libcore/recfolderinfo.o \ libcore/extrecinfo.o \ libcore/timers.o \ diff --git a/libcore/imagecache.c b/libcore/imagecache.c index 4d68722..cfaf255 100644 --- a/libcore/imagecache.c +++ b/libcore/imagecache.c @@ -3,10 +3,9 @@ #include <map> #include <fstream> #include <sys/stat.h> -#include "imagecreator.h" +#include "imagecache.h" #include "../config.h" #include "helpers.h" -#include "imagecache.h" cMutex cImageCache::mutex; @@ -301,37 +300,6 @@ cImage *cImageCache::GetSkinpart(string name, int width, int height) { return NULL; } -void cImageCache::CacheEllipse(int id, int width, int height, tColor color, int quadrant) { - esyslog("skindesigner: caching ellipse %d, w %d, h %d, color %x, quadrant %d", id, width, height, color, quadrant); - GetEllipse(id, width, height, color, quadrant); -} - -cImage *cImageCache::GetEllipse(int id, int width, int height, tColor color, int quadrant) { - if (width < 1 || width > 1920 || height < 1 || height > 1080) - return NULL; - cMutexLock MutexLock(&mutex); - map<int, cImage*>::iterator hit = cairoImageCache.find(id); - if (hit != cairoImageCache.end()) { - return (cImage*)hit->second; - } else { - cImageCreator ic; - if (!ic.InitCairoImage(width, height)) - return NULL; - ic.DrawEllipse(color, quadrant); - cImage *ellipse = ic.GetImage(); - cairoImageCache.insert(pair<int, cImage*>(id, ellipse)); - hit = cairoImageCache.find(id); - if (hit != cairoImageCache.end()) { - return (cImage*)hit->second; - } - } - return NULL; -} - -/**************************************************************************************** -* PRIVATE FUNCTIONS -****************************************************************************************/ - bool cImageCache::LoadIcon(eImageType type, string name) { cString subdir(""); if (type == itMenuIcon) @@ -393,17 +361,11 @@ void cImageCache::Clear(void) { } channelLogoCache.clear(); - for(map<string, cImage*>::const_iterator it = skinPartsCache.begin(); it != skinPartsCache.end(); it++) { + for(map<std::string, cImage*>::const_iterator it = skinPartsCache.begin(); it != skinPartsCache.end(); it++) { cImage *img = (cImage*)it->second; delete img; } skinPartsCache.clear(); - - for(map<int, cImage*>::const_iterator it = cairoImageCache.begin(); it != cairoImageCache.end(); it++) { - cImage *img = (cImage*)it->second; - delete img; - } - cairoImageCache.clear(); } void cImageCache::Debug(bool full) { diff --git a/libcore/imagecache.h b/libcore/imagecache.h index 4a26710..95148b2 100644 --- a/libcore/imagecache.h +++ b/libcore/imagecache.h @@ -30,9 +30,6 @@ public: //skinparts void CacheSkinpart(string path, int width, int height); cImage *GetSkinpart(string name, int width, int height); - //Cairo Images - void CacheEllipse(int id, int width, int height, tColor color, int quadrant); - cImage *GetEllipse(int id, int width, int height, tColor color, int quadrant); //helpers void Clear(void); void Debug(bool full); @@ -49,7 +46,6 @@ private: map<string, cImage*> iconCache; map<string, cImage*> channelLogoCache; map<string, cImage*> skinPartsCache; - map<int, cImage*> cairoImageCache; bool LoadIcon(eImageType type, string name); bool LoadLogo(const cChannel *channel); bool LoadSeparatorLogo(string name); diff --git a/libcore/imagecreator.c b/libcore/imagecreator.c deleted file mode 100644 index 65eea04..0000000 --- a/libcore/imagecreator.c +++ /dev/null @@ -1,202 +0,0 @@ -#include "imagecreator.h" - -cImageCreator::cImageCreator(void) { - surface = NULL; - cr = NULL; -} - -cImageCreator::~cImageCreator() { - if (cr) - cairo_destroy (cr); - if (surface) - cairo_surface_destroy (surface); -} - -bool cImageCreator::InitCairoImage(int width, int height) { - this->width = width; - this->height = height; - if (width < 1 || height < 1 || width > 1920 || height > 1080) - return false; - surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); - cr = cairo_create(surface); - cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST); - return true; -} - -/********************************************************************************** -* Public Functions -**********************************************************************************/ - -///< 0 draws the entire ellipse -///< 1..4 draws only the first, second, third or fourth quadrant, respectively -///< 5..8 draws the right, top, left or bottom half, respectively -///< -1..-4 draws the inverted part of the given quadrant -///< If Quadrants is not 0, the coordinates are those of the actual area, not -///< the full circle! -void cImageCreator::DrawEllipse(tColor color, int quadrants) { - if (!cr || !surface) - return; - //center of the ellipse - double x, y; - //radius - double radius; - //start and stop angle (radian) - double arcStart, arcStop; - //scaling factors - double scaleX, scaleY; - //draw inverted ellipse - bool inverted; - - scaleX = width; - scaleY = height; - inverted = false; - - switch (quadrants) { - case 0: - x = 0.5; - y = 0.5; - radius = 0.5; - arcStart = 0.0; - arcStop = 2 * M_PI; - break; - case 1: - x = 0.0; - y = 1.0; - radius = 1.0; - arcStart = M_PI; - arcStop = 2 * M_PI; - break; - case 2: - x = 1.0; - y = 1.0; - radius = 1.0; - arcStart = M_PI; - arcStop = 2 * M_PI; - break; - case 3: - x = 1.0; - y = 0.0; - radius = 1.0; - arcStart = 0; - arcStop = M_PI; - break; - case 4: - x = 0.0; - y = 0.0; - radius = 1.0; - arcStart = 0; - arcStop = M_PI; - break; - case 5: - scaleX = 2 * width; - x = 0.0; - y = 0.5; - radius = 0.5; - arcStart = 0; - arcStop = 2* M_PI; - break; - case 6: - scaleY = 2 * height; - x = 0.5; - y = 0.5; - radius = 0.5; - arcStart = 0; - arcStop = 2* M_PI; - break; - case 7: - scaleX = 2 * width; - x = 0.5; - y = 0.5; - radius = 0.5; - arcStart = 0; - arcStop = 2* M_PI; - break; - case 8: - scaleY = 2 * height; - x = 0.5; - y = 0.0; - radius = 0.5; - arcStart = 0; - arcStop = 2* M_PI; - break; - case -1: - x = 0.0; - y = 1.0; - radius = 1.0; - arcStart = M_PI; - arcStop = 2* M_PI; - inverted = true; - break; - case -2: - x = 1.0; - y = 1.0; - radius = 1.0; - arcStart = M_PI; - arcStop = 2 * M_PI; - inverted = true; - break; - case -3: - x = 1.0; - y = 0.0; - radius = 1.0; - arcStart = 0; - arcStop = M_PI; - inverted = true; - break; - case -4: - x = 0.0; - y = 0.0; - radius = 1.0; - arcStart = 0; - arcStop = M_PI; - inverted = true; - break; - default: - x = 0.5; - y = 0.5; - radius = 0.5; - arcStart = 0.0; - arcStop = 2 * M_PI; - break; - } - - SetColor(color); - //Draw Background for inverted ellipses - if (inverted) { - cairo_rectangle(cr, 0.0, 0.0, width, height); - cairo_fill (cr); - cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR); - } - //Draw Ellipse - cairo_scale(cr, scaleX, scaleY); - cairo_arc(cr, x, y, radius, arcStart, arcStop); - cairo_fill(cr); -} - -cImage *cImageCreator::GetImage(void) { - if (!cr || !surface) - NULL; - unsigned char *data = cairo_image_surface_get_data(surface); - cImage *image = new cImage(cSize(width, height), (tColor*)data); - return image; -} - -/********************************************************************************** -* Private Functions -**********************************************************************************/ - -void cImageCreator::SetColor(tColor color) { - if (!cr || !surface) - return; - tIndex tAlpha = (color & 0xFF000000) >> 24; - tIndex tRed = (color & 0x00FF0000) >> 16; - tIndex tGreen = (color & 0x0000FF00) >> 8; - tIndex tBlue = (color & 0x000000FF); - - double a = (int)tAlpha / (double)255; - double r = (int)tRed / (double)255; - double g = (int)tGreen / (double)255; - double b = (int)tBlue / (double)255; - - cairo_set_source_rgba(cr, r, g, b, a); -} diff --git a/libcore/imagecreator.h b/libcore/imagecreator.h deleted file mode 100644 index b877a3f..0000000 --- a/libcore/imagecreator.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __IMAGECREATOR_H -#define __IMAGECREATOR_H - -#include <cairo.h> -#include <vdr/osd.h> -#include <string> -#include <sstream> - -using namespace std; - -class cImageCreator { -private: - int width; - int height; - cairo_surface_t *surface; - cairo_t *cr; - void SetColor(tColor color); -public: - cImageCreator(void); - virtual ~cImageCreator(); - bool InitCairoImage(int width, int height); - void DrawEllipse(tColor color, int quadrants = 0); - cImage *GetImage(void); -}; - -#endif //__IMAGECREATOR_H diff --git a/libtemplate/template.c b/libtemplate/template.c index e6141f2..ef7d677 100644 --- a/libtemplate/template.c +++ b/libtemplate/template.c @@ -250,8 +250,6 @@ void cTemplate::CachePixmapImages(cTemplatePixmap *pix) { while(func = pix->GetNextFunction()) { if (func->GetType() == ftDrawImage) { CacheImage(func); - } else if (func->GetType() == ftDrawEllipse) { - CacheEllipse(func); } } } @@ -281,12 +279,3 @@ void cTemplate::CacheImage(cTemplateFunction *func) { break; } } - -void cTemplate::CacheEllipse(cTemplateFunction *func) { - int id = func->GetId(); - int w = func->GetNumericParameter(ptWidth); - int h = func->GetNumericParameter(ptHeight); - tColor clr = func->GetColorParameter(ptColor); - int quadrant = func->GetNumericParameter(ptQuadrant); - imgCache->CacheEllipse(id, w, h, clr, quadrant); -} diff --git a/libtemplate/template.h b/libtemplate/template.h index e0a8066..2c1cfb2 100644 --- a/libtemplate/template.h +++ b/libtemplate/template.h @@ -34,7 +34,6 @@ private: eViewType viewType; void CachePixmapImages(cTemplatePixmap *pix); void CacheImage(cTemplateFunction *func); - void CacheEllipse(cTemplateFunction *func); protected: cGlobals *globals; cTemplateView *rootView; diff --git a/libtemplate/templatefunction.c b/libtemplate/templatefunction.c index 1ddf297..8465961 100644 --- a/libtemplate/templatefunction.c +++ b/libtemplate/templatefunction.c @@ -6,10 +6,7 @@ using namespace std; // --- cTemplateFunction -------------------------------------------------------------
-int cTemplateFunction::nextId = 0;
-
-cTemplateFunction::cTemplateFunction(eFuncType type) {
- id = nextId++;
+cTemplateFunction::cTemplateFunction(eFuncType type) {
this->type = type;
debug = false;
containerX = 0;
diff --git a/libtemplate/templatefunction.h b/libtemplate/templatefunction.h index 59d6002..f7af25c 100644 --- a/libtemplate/templatefunction.h +++ b/libtemplate/templatefunction.h @@ -102,10 +102,7 @@ enum eOverflowType { }; class cTemplateFunction { -private: - static int nextId; protected: - int id; eFuncType type; bool debug; int containerX; //X of parent container @@ -188,7 +185,6 @@ public: //Parse parameters with dynamically set Tokens bool ParseParameters(void); //Getter Functions - int GetId(void) { return id; }; eFuncType GetType(void) { return type; }; bool DoDebug(void) { return debug; }; string GetParameter(eParamType type); diff --git a/skins/nopacity/xmlfiles/displaymenu.xml b/skins/nopacity/xmlfiles/displaymenu.xml index de48380..f6040f6 100644 --- a/skins/nopacity/xmlfiles/displaymenu.xml +++ b/skins/nopacity/xmlfiles/displaymenu.xml @@ -22,13 +22,19 @@ <area x="0" y="0" width="100%" height="100%" layer="1"> <!-- top bar --> <drawrectangle x="0" y="0" width="{areawidth}" height="10%" color="{clrBackground}" /> - <drawrectangle x="29%" y="10%" width="71%" height="1" color="{clrBorder}" /> + <drawrectangle x="30%" y="{areaheight}*0.1 - 1" width="71%" height="1" color="{clrBorder}" /> <!-- menu bar --> <drawrectangle x="0" y="10%" width="{areawidth}*29/100" height="81%" color="{clrBackground}" /> - <drawrectangle x="29%" y="10%" width="1" height="81%" color="{clrBorder}" /> + <drawrectangle x="{areawidth}*29/100 - 1" y="12%" width="1" height="76%" color="{clrBorder}" /> <!-- bottom bar --> <drawrectangle x="0" y="90%" width="{areawidth}" height="10%" color="{clrBackground}" /> - <drawrectangle x="29%" y="90%" width="71%" height="1" color="{clrBorder}" /> + <drawrectangle x="30%" y="{areaheight}*0.9 - 1" width="71%" height="1" color="{clrBorder}" /> + <!-- upper corner --> + <drawellipse x="{areawidth}*29/100" y="{areaheight}/10" width="{areawidth}*2/100" height="{areawidth}*2/100" quadrant="-2" color="{clrBorder}" /> + <drawellipse x="{areawidth}*29/100 - 1" y="{areaheight}/10 - 1" width="{areawidth}*2/100" height="{areawidth}*2/100" quadrant="-2" color="{clrBackground}" /> + <!-- lower corner --> + <drawellipse x="{areawidth}*29/100" y="{areaheight}*90/100 - {areawidth}*2/100" width="{areawidth}*2/100" height="{areawidth}*2/100" quadrant="-3" color="{clrBorder}" /> + <drawellipse x="{areawidth}*29/100 - 1" y="{areaheight}*90/100 - {areawidth}*2/100 + 1" width="{areawidth}*2/100" height="{areawidth}*2/100" quadrant="-3" color="{clrBackground}" /> </area> <area x="0" y="0" width="100%" height="10%" layer="2"> <drawimage imagetype="skinpart" path="headertop" x="0" y="0" width="100%" height="100%"/> diff --git a/views/view.c b/views/view.c index d8c37a0..2b9c4bf 100644 --- a/views/view.c +++ b/views/view.c @@ -636,17 +636,14 @@ void cView::DoDrawEllipse(int num, cTemplateFunction *func, int x0, int y0) { y += y0;
int w = func->GetNumericParameter(ptWidth);
int h = func->GetNumericParameter(ptHeight);
+ cRect size(x, y, w, h);
tColor clr = func->GetColorParameter(ptColor);
int quadrant = func->GetNumericParameter(ptQuadrant);
if (quadrant < -4 || quadrant > 8) {
esyslog("skindesigner: wrong quadrant %d for drawellipse, allowed values are from -4 to 8", quadrant);
quadrant = 0;
}
- cImage *ellipse = imgCache->GetEllipse(func->GetId(), w, h, clr, quadrant);
- if (ellipse) {
- const cPoint point(x, y);
- DrawImage(num, point, *ellipse);
- }
+ DrawEllipse(num, size, clr, quadrant);
}
void cView::DoDrawSlope(int num, cTemplateFunction *func, int x0, int y0) {
|