textured pixmap cache fix
This commit is contained in:
parent
b9049cefad
commit
a5be2ef67d
2 changed files with 29 additions and 20 deletions
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: ImageControl.cc,v 1.7 2004/01/02 13:28:00 fluxgen Exp $
|
||||
// $Id: ImageControl.cc,v 1.8 2004/01/02 22:19:39 fluxgen Exp $
|
||||
|
||||
#include "ImageControl.hh"
|
||||
|
||||
|
@ -150,15 +150,27 @@ ImageControl::~ImageControl() {
|
|||
|
||||
|
||||
Pixmap ImageControl::searchCache(unsigned int width, unsigned int height,
|
||||
unsigned long texture_type,
|
||||
const FbTk::Color &color, const FbTk::Color &color_to) const {
|
||||
const Texture &text) const {
|
||||
|
||||
if (text.pixmap().drawable() != None) {
|
||||
// do comparsion with width/height and texture_pixmap
|
||||
CacheList::iterator it = cache.begin();
|
||||
CacheList::iterator it_end = cache.end();
|
||||
for (; it != it_end; ++it) {
|
||||
if ((*it)->texture_pixmap = text.pixmap().drawable() &&
|
||||
(*it)->width == width && (*it)->height == height)
|
||||
return (*it)->pixmap;
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
Cache tmp;
|
||||
tmp.texture_pixmap = text.pixmap().drawable();
|
||||
tmp.width = width;
|
||||
tmp.height = height;
|
||||
tmp.texture = texture_type;
|
||||
tmp.pixel1 = color.pixel();
|
||||
tmp.pixel2 = color_to.pixel();
|
||||
tmp.texture = text.type();
|
||||
tmp.pixel1 = text.color().pixel();
|
||||
tmp.pixel2 = text.colorTo().pixel();
|
||||
CacheList::iterator it = cache.find(&tmp);
|
||||
if (it == cache.end()) {
|
||||
return None;
|
||||
|
@ -179,10 +191,10 @@ Pixmap ImageControl::renderImage(unsigned int width, unsigned int height,
|
|||
return ParentRelative;
|
||||
|
||||
// search cache first
|
||||
Pixmap pixmap = searchCache(width, height, texture.type(),
|
||||
texture.color(), texture.colorTo());
|
||||
if (pixmap)
|
||||
Pixmap pixmap = searchCache(width, height, texture);
|
||||
if (pixmap) {
|
||||
return pixmap; // return cache item
|
||||
}
|
||||
|
||||
// render new image
|
||||
TextureRender image(*this, width, height, m_colors, m_num_colors);
|
||||
|
@ -194,6 +206,7 @@ Pixmap ImageControl::renderImage(unsigned int width, unsigned int height,
|
|||
Cache *tmp = new Cache;
|
||||
|
||||
tmp->pixmap = pixmap;
|
||||
tmp->texture_pixmap = texture.pixmap().drawable();
|
||||
tmp->width = width;
|
||||
tmp->height = height;
|
||||
tmp->count = 1;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
// $Id: ImageControl.hh,v 1.7 2004/01/02 13:27:29 fluxgen Exp $
|
||||
// $Id: ImageControl.hh,v 1.8 2004/01/02 22:19:39 fluxgen Exp $
|
||||
|
||||
#ifndef FBTK_IMAGECONTROL_HH
|
||||
#define FBTK_IMAGECONTROL_HH
|
||||
|
@ -79,8 +79,7 @@ private:
|
|||
Search cache for a specific pixmap
|
||||
@return None if no cache was found
|
||||
*/
|
||||
Pixmap searchCache(unsigned int width, unsigned int height, unsigned long texture_type,
|
||||
const FbTk::Color &color, const FbTk::Color &color_to) const;
|
||||
Pixmap searchCache(unsigned int width, unsigned int height, const Texture &text) const;
|
||||
|
||||
void createColorTable();
|
||||
bool m_dither;
|
||||
|
@ -109,17 +108,14 @@ private:
|
|||
|
||||
typedef struct Cache {
|
||||
Pixmap pixmap;
|
||||
|
||||
Pixmap texture_pixmap;
|
||||
unsigned int count, width, height;
|
||||
unsigned long pixel1, pixel2, texture;
|
||||
} Cache;
|
||||
|
||||
struct ltCacheEntry
|
||||
{
|
||||
bool operator()(const Cache* s1, const Cache* s2) const
|
||||
{
|
||||
return
|
||||
(s1->width < s2->width || s1->width == s2->width &&
|
||||
struct ltCacheEntry {
|
||||
bool operator()(const Cache* s1, const Cache* s2) const {
|
||||
return (s1->width < s2->width || s1->width == s2->width &&
|
||||
(s1->height < s2->height || s1->height == s2->height &&
|
||||
(s1->texture < s2->texture || s1->texture == s2->texture &&
|
||||
s1->pixel1 < s2->pixel1 || s1->pixel1 == s2->pixel1 &&
|
||||
|
|
Loading…
Reference in a new issue