diff options
Diffstat (limited to 'Build/source/libs/freetype/freetype-1.5/test/blitter.c')
-rw-r--r-- | Build/source/libs/freetype/freetype-1.5/test/blitter.c | 492 |
1 files changed, 0 insertions, 492 deletions
diff --git a/Build/source/libs/freetype/freetype-1.5/test/blitter.c b/Build/source/libs/freetype/freetype-1.5/test/blitter.c deleted file mode 100644 index 66926e1ee46..00000000000 --- a/Build/source/libs/freetype/freetype-1.5/test/blitter.c +++ /dev/null @@ -1,492 +0,0 @@ -/****************************************************************************/ -/* */ -/* The FreeType project -- a free and portable quality TrueType renderer. */ -/* */ -/* Copyright 1996-2000 by */ -/* D. Turner, R.Wilhelm, and W. Lemberg */ -/* */ -/* blitter.c: Support for blitting of bitmaps with various depth. */ -/* */ -/****************************************************************************/ - -#include "blitter.h" - - - typedef struct TBlitter_ - { - int width; /* width in pixels of the written area */ - int height; /* height in pixels of the written area */ - - int xread; /* x position of start point in read area */ - int yread; /* y position of start point in read area */ - - int xwrite; /* x position of start point in write area */ - int ywrite; /* y position of start point in write area */ - - int right_clip; /* amount of right clip */ - - char* read; /* top left corner of source map */ - char* write; /* top left corner of target map */ - - int read_line; /* byte increment to go down one row in read area */ - int write_line; /* byte increment to go down one row in write area */ - - TT_Raster_Map source; - TT_Raster_Map target; - - int source_depth; - int target_depth; - - } TBlitter; - - - static - int compute_clips( TBlitter* blit, - int x_offset, - int y_offset ) - { - int xmin, ymin, xmax, ymax, width, height, target_width; - - - /* perform clipping and setup variables */ - width = blit->source.width; - height = blit->source.rows; - - switch ( blit->source_depth ) - { - case 1: - width = (width + 7) & -8; - break; - - case 4: - width = (width + 1) & -2; - break; - } - - xmin = x_offset; - ymin = y_offset; - xmax = xmin + width-1; - ymax = ymin + height-1; - - /* clip if necessary */ - if ( width == 0 || height == 0 || - xmax < 0 || xmin >= blit->target.width || - ymax < 0 || ymin >= blit->target.rows ) - return 1; - - /* set up clipping and cursors */ - blit->yread = 0; - if ( ymin < 0 ) - { - blit->yread -= ymin; - height += ymin; - blit->ywrite = 0; - } - else - blit->ywrite = ymin; - - if ( ymax >= blit->target.rows ) - height -= ymax - blit->target.rows + 1; - - blit->xread = 0; - if ( xmin < 0 ) - { - blit->xread -= xmin; - width += xmin; - blit->xwrite = 0; - } - else - blit->xwrite = xmin; - - target_width = blit->target.width; - - switch ( blit->target_depth ) - { - case 1: - target_width = (target_width + 7) & -8; - break; - case 4: - target_width = (target_width + 1) & -2; - break; - } - - blit->right_clip = xmax - target_width + 1; - if ( blit->right_clip > 0 ) - width -= blit->right_clip; - else - blit->right_clip = 0; - - blit->width = width; - blit->height = height; - - /* set read and write to the top-left corner of the the read */ - /* and write area before clipping. */ - - blit->read = (char*)blit->source.bitmap; - blit->write = (char*)blit->target.bitmap; - - if ( blit->source.flow == TT_Flow_Up ) - { - blit->read_line = -blit->source.cols; - blit->read += (blit->source.rows-1) * blit->source.cols; - } - else - blit->read_line = blit->source.cols; - - if ( blit->target.flow == TT_Flow_Up ) - { - blit->write_line = -blit->target.cols; - blit->write += (blit->target.rows-1) * blit->target.cols; - } - else - blit->write_line = blit->target.cols; - - /* now go to the start line. Note that we do not move the */ - /* x position yet, as this is dependent on the pixel format */ - blit->read += blit->yread * blit->read_line; - blit->write += blit->ywrite * blit->write_line; - - return 0; - } - - -/**************************************************************************/ -/* */ -/* <Function> blit_bitmap_to_bitmap */ -/* */ -/**************************************************************************/ - - static - void blit_bitmap_to_bitmap( TBlitter* blit ) - { - int shift, left_clip, x, y; - unsigned char* read; - unsigned char* write; - - - left_clip = ( blit->xread > 0 ); - shift = ( blit->xwrite - blit->xread ) & 7; - - read = (unsigned char*)blit->read + (blit->xread >> 3); - write = (unsigned char*)blit->write + (blit->xwrite >> 3); - - if ( shift == 0 ) - { - y = blit->height; - do - { - unsigned char* _read = read; - unsigned char* _write = write; - - - x = blit->width; - - do - { - *_write++ |= *_read++; - x -= 8; - } while ( x > 0 ); - - read += blit->read_line; - write += blit->write_line; - y--; - } while ( y > 0 ); - } - else - { - int first, last, count; - - - first = blit->xwrite >> 3; - last = (blit->xwrite + blit->width-1) >> 3; - - count = last - first; - - if ( blit->right_clip ) - count++; - - y = blit->height; - - do - { - unsigned char* _read = read; - unsigned char* _write = write; - unsigned char old; - int shift2 = (8-shift); - - - if ( left_clip ) - old = (*_read++) << shift2; - else - old = 0; - - x = count; - while ( x > 0 ) - { - unsigned char val; - - - val = *_read++; - *_write++ |= ( (val >> shift) | old ); - old = val << shift2; - x--; - } - - if ( !blit->right_clip ) - *_write |= old; - - read += blit->read_line; - write += blit->write_line; - y--; - - } while ( y > 0 ); - } - } - - -/**************************************************************************/ -/* */ -/* <Function> blit_bitmap_to_pixmap8 */ -/* */ -/**************************************************************************/ - - static - void blit_bitmap_to_pixmap8( TBlitter* blit, - unsigned char color ) - { - int x, y; - unsigned int left_mask; - unsigned char* read; - unsigned char* write; - - - read = (unsigned char*)blit->read + (blit->xread >> 3); - write = (unsigned char*)blit->write + blit->xwrite; - - left_mask = 0x80 >> (blit->xread & 7); - - y = blit->height; - do - { - unsigned char* _read = read; - unsigned char* _write = write; - unsigned int mask = left_mask; - unsigned int val = 0; - - - x = blit->width; - do - { - if ( mask == 0x80 ) - val = *_read++; - - if ( val & mask ) - *_write = (unsigned char)color; - - mask >>= 1; - if ( mask == 0 ) - mask = 0x80; - - _write++; - x--; - } while ( x > 0 ); - - read += blit->read_line; - write += blit->write_line; - y--; - } while ( y > 0 ); - } - - -/**************************************************************************/ -/* */ -/* <Function> blit_bitmap_to_pixmap4 */ -/* */ -/**************************************************************************/ - - static - void blit_bitmap_to_pixmap4( TBlitter* blit, - unsigned char color ) - { - int x, y, phase; - unsigned int left_mask; - unsigned char* read; - unsigned char* write; - - - color = color & 15; - - read = (unsigned char*)blit->read + (blit->xread >> 3); - write = (unsigned char*)blit->write + (blit->xwrite >> 1); - - /* now begin blit */ - left_mask = 0x80 >> (blit->xread & 7); - phase = blit->xwrite & 1; - - y = blit->height; - do - { - unsigned char* _read = read; - unsigned char* _write = write; - unsigned int mask = left_mask; - int _phase = phase; - unsigned int val = 0; - - x = blit->width; - do - { - if ( mask == 0x80 ) - val = *_read++; - - if ( val & mask ) - { - if ( _phase ) - *_write = (*_write & 0xF0) | color; - else - *_write = (*_write & 0x0F) | (color << 4); - } - - mask >>= 1; - if ( mask == 0 ) - mask = 0x80; - - _write += _phase; - _phase ^= 1; - x--; - } while ( x > 0 ); - - read += blit->read_line; - write += blit->write_line; - y--; - } while ( y > 0 ); - } - - -/**************************************************************************/ -/* */ -/* <Function> blit_bitmap_to_pixmap16 */ -/* */ -/**************************************************************************/ - - static - void blit_bitmap_to_pixmap16( TBlitter* blit, - unsigned short color ) - { - int x, y; - unsigned int left_mask; - unsigned char* read; - unsigned short* write; - - - read = (unsigned char*)blit->read + (blit->xread >> 3); - write = (unsigned short*)(blit->write + blit->xwrite*2); - - left_mask = 0x80 >> (blit->xread & 7); - - y = blit->height; - do - { - unsigned char* _read = read; - unsigned short* _write = write; - unsigned int mask = left_mask; - unsigned int val = 0; - - x = blit->width; - do - { - if ( mask == 0x80 ) - val = *_read++; - - if ( val & mask ) - *_write = color; - - mask >>= 1; - if ( mask == 0 ) - mask = 0x80; - - _write++; - x--; - } while ( x > 0 ); - - read += blit->read_line; - write += blit->write_line; - y--; - } while ( y > 0 ); - } - - - /* <Function> */ - /* Blit_Bitmap */ - /* */ - /* <Description> */ - /* blit a source bitmap to a target bitmap or pixmap */ - /* */ - /* <Input> */ - /* target :: target bitmap or pixmap */ - /* source :: source bitmap (depth must be 1) */ - /* target_depth :: pixel bit depth of target map */ - /* x_offset :: horizontal offset of source in target */ - /* y_offset :: vertical offset of source in target */ - /* color :: color to use when blitting to color pixmap */ - /* */ - /* <Return> */ - /* error code. 0 means success */ - /* */ - /* <Note> */ - /* an error occurs when the target bit depth isn't supported, or */ - /* if the source's bit depth isn't 1. */ - /* */ - /* the offsets are relative to the top-left corner of the target */ - /* map. Positive y are downwards. */ - /* */ - extern - int Blit_Bitmap( TT_Raster_Map* target, - TT_Raster_Map* source, - int target_depth, - int x_offset, - int y_offset, - int color ) - { - TBlitter blit; - - - if ( !target || !source ) - return -1; - - blit.source = *source; - blit.target = *target; - blit.source_depth = 1; - blit.target_depth = target_depth; - - /* set up blitter and compute clipping. Return immediately if needed */ - if ( compute_clips( &blit, x_offset, y_offset ) ) - return 0; - - /* now perform the blit */ - switch ( target_depth ) - { - case 1: - blit_bitmap_to_bitmap( &blit ); - break; - - case 4: - blit_bitmap_to_pixmap4( &blit, (unsigned char)color ); - break; - - case 8: - blit_bitmap_to_pixmap8( &blit, (unsigned char)color ); - break; - - case 16: - blit_bitmap_to_pixmap16( &blit, (unsigned short)color ); - break; - - default: - return -2; - } - - return 0; - } - - -/* End */ |