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 /libcore | |
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.
Diffstat (limited to 'libcore')
-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 |
4 files changed, 2 insertions, 272 deletions
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 |