Changeset 406

Show
Ignore:
Timestamp:
07/21/08 15:25:56 (2 years ago)
Author:
odole
Message:

2008-07-21 Olivier DOLE <odole@pleyo.com>

Reviewed by Mario Bensi.
Fix huge leak in freetype font implementation.

  • WKAL/Concretizations/Fonts/Freetype/BCFontFreetype.cpp:
    (WKAL::Font::drawGlyphs):
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/BAL/ChangeLogOWB

    r405 r406  
     12008-07-21  Olivier DOLE  <odole@pleyo.com> 
     2 
     3        Reviewed by Mario Bensi. 
     4        Fix huge leak in freetype font implementation. 
     5 
     6        * WKAL/Concretizations/Fonts/Freetype/BCFontFreetype.cpp: 
     7        (WKAL::Font::drawGlyphs): 
     8 
    192008-07-21  Mario Bensi  <mbensi@pleyo.com> 
    210 
  • trunk/BAL/WKAL/Concretizations/Fonts/Freetype/BCFontFreetype.cpp

    r403 r406  
    197197        if (ftBitmapGlyph[0]->bitmap.pixel_mode == FT_PIXEL_MODE_MONO) { 
    198198            unsigned pixelColor = (penColor.alpha() << 24) | (penColor.red() << 16) | (penColor.green() << 8) | penColor.blue(); 
     199            unsigned char* bitmapAddr = ftBitmapGlyph[i]->bitmap.buffer; 
    199200            for (int j = 0; j < ftBitmapGlyph[i]->bitmap.rows; j++) { 
    200201                unsigned char *bufferAddr = ftBitmapGlyph[i]->bitmap.buffer; 
     
    205206                        (*glyphRGBABuffer)[(yOffset + j) * width + glyphBoxX[i].x() + k] = 0; 
    206207                    if (k > 0 && (k % 8) == 0) 
    207                         *ftBitmapGlyph[i]->bitmap.buffer++; 
     208                        *bitmapAddr++; 
    208209                } 
    209                 ftBitmapGlyph[i]->bitmap.buffer = bufferAddr + ftBitmapGlyph[i]->bitmap.pitch; 
     210                bitmapAddr = bufferAddr + ftBitmapGlyph[i]->bitmap.pitch; 
    210211            } 
    211212        } else { 
     213            unsigned char* bitmapAddr = ftBitmapGlyph[i]->bitmap.buffer; 
    212214            for (int j = 0; j < ftBitmapGlyph[i]->bitmap.rows; j++) { 
    213215                for (int k = 0; k < ftBitmapGlyph[i]->bitmap.width; k++) { 
    214                     (*glyphRGBABuffer)[(yOffset + j) * width + glyphBoxX[i].x() + k] = ((penColor.alpha()/255 * *ftBitmapGlyph[i]->bitmap.buffer++) << 24) | (penColor.red() << 16) | (penColor.green() << 8) | penColor.blue(); 
     216                    (*glyphRGBABuffer)[(yOffset + j) * width + glyphBoxX[i].x() + k] = ((penColor.alpha()/255 * *bitmapAddr++) << 24) | (penColor.red() << 16) | (penColor.green() << 8) | penColor.blue(); 
    215217                } 
    216218            } 
    217219        } 
     220        FT_Done_Glyph((FT_Glyph) ftBitmapGlyph[i]); 
    218221    } 
    219222    SDL_Surface* img;