/* * Seven Kingdoms: Ancient Adversaries * * Copyright 1997,1998 Enlight Software Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ //Filename : OIMGES.CPP //Description : Object ImageRes #include #include #include #include #include //--------- Format of RES file ------------// // // In the resource file, contain many compressed images, each image // has the following data // // = the name of the image // = the widht of the image // = the height of the image // = the bitmap of the image // //--------------------------------------------// //------- Start of function ImageRes::ImageRes -------// // // resName = name of the resource file (e.g. "GIF.RES") // [int] readAll = whether read all data into the buffer or read one each time // (default:0) // [int] useCommonBuf = whether use the sys common buffer to store the data or not // (default:0) // ImageRes::ImageRes(char* resFile, int readAll, int useCommonBuf) : ResourceIdx(resFile, readAll, useCommonBuf) { } //--------- End of function ImageRes::ImageRes -------// //-------- Start of function ImageRes::put_front --------// // // int x,y = the location of the image // char* imageName = name of the image // [int] compressFlag = compress flag // (default: 0) // void ImageRes::put_front(int x, int y, char* imageName, int compressFlag) { char* bitmapPtr = ResourceIdx::read(imageName); if(!bitmapPtr) return; mouse.hide_area( x, y, x+*((short*)bitmapPtr)-1, y+*(((short*)bitmapPtr)+1)-1 ); if( compressFlag ) vga_front.put_bitmap_trans_decompress( x, y, bitmapPtr ); else vga_front.put_bitmap_trans( x, y, bitmapPtr ); mouse.show_area(); } //---------- End of function ImageRes::put_front --------// //-------- Start of function ImageRes::put_back --------// // // int x,y = the location of the image // char* imageName = name of the image // [int] compressFlag = compress flag // (default: 0) // void ImageRes::put_back(int x, int y, char* imageName, int compressFlag) { char* bitmapPtr = ResourceIdx::read(imageName); if( bitmapPtr ) { if( compressFlag ) vga_back.put_bitmap_trans_decompress( x, y, bitmapPtr ); else vga_back.put_bitmap_trans( x, y, bitmapPtr ); } } //---------- End of function ImageRes::put_back --------// //-------- Start of function ImageRes::put_front --------// // // int x,y = the location of the image // int bitmapId = id. of the bitmap // [int] compressFlag = compress flag // (default: 0) // void ImageRes::put_front(int x, int y, int bitmapId, int compressFlag) { char* bitmapPtr = ResourceIdx::get_data(bitmapId); if( !bitmapPtr ) return; mouse.hide_area( x, y, x+*((short*)bitmapPtr)-1, y+*(((short*)bitmapPtr)+1)-1 ); if( compressFlag ) vga_front.put_bitmap_trans_decompress( x, y, bitmapPtr ); else vga_front.put_bitmap_trans( x, y, bitmapPtr ); mouse.show_area(); } //---------- End of function ImageRes::put_front --------// //-------- Start of function ImageRes::put_back --------// // // int ,y = the location of the image // int bitmapId = id. of the bitmap // [int] compressFlag = compress flag // (default: 0) // void ImageRes::put_back(int x, int y, int bitmapId, int compressFlag) { char* bitmapPtr = ResourceIdx::get_data(bitmapId); if( bitmapPtr ) { if( compressFlag ) vga_back.put_bitmap_trans_decompress( x, y, bitmapPtr ); else vga_back.put_bitmap_trans( x, y, bitmapPtr ); } } //---------- End of function ImageRes::put_back --------// //-------- Start of function ImageRes::put_join --------// // // int x,y = the location of the image // char* imageName = name of the image // void ImageRes::put_join(int x, int y, char* imageName) { char* bitmapPtr = ResourceIdx::read(imageName); if( !bitmapPtr ) return; mouse.hide_area( x, y, x+*((short*)bitmapPtr)-1, y+*(((short*)bitmapPtr)+1)-1 ); if( bitmapPtr ) IMGjoinTrans( vga_front.buf_ptr(), vga_front.buf_pitch(), vga_back.buf_ptr(), vga_back.buf_pitch(), x, y, bitmapPtr ); mouse.show_area(); } //---------- End of function ImageRes::put_join --------// //-------- Start of function ImageRes::put_large --------// // // When a picture file is > 64K, which cannot be read into a single // memory buffer. // // It will call vga.put_pict() which will continously read the file // and put to the screen until completion. // // vgaBuf = the vga buffer for display // x,y = the location of the image // imageName = name of the image // void ImageRes::put_large(VgaBuf* vgaBuf, int x, int y, char* imageName) { int dataSize; vgaBuf->put_large_bitmap( x, y, ResourceIdx::get_file(imageName, dataSize) ); } //---------- End of function ImageRes::put_large --------// //-------- Start of function ImageRes::put_large --------// // // When a picture file is > 64K, which cannot be read into a single // memory buffer. // // It will call vga.put_pict() which will continously read the file // and put to the screen until completion. // // vgaBuf = the vga buffer for display // x,y = the location of the image // bitmapId = id. of the bitmap in the bitmap resource file. // void ImageRes::put_large(VgaBuf* vgaBuf, int x, int y, int bitmapId) { int dataSize; vgaBuf->put_large_bitmap( x, y, ResourceIdx::get_file(bitmapId, dataSize) ); } //---------- End of function ImageRes::put_large --------// //-------- Start of function ImageRes::put_to_buf --------// // // Put the image to the specified Vga buffer. // // vgaBufPtr = the pointer to the Vga buffer // imageName = name of the image // void ImageRes::put_to_buf(VgaBuf* vgaBufPtr, char* imageName) { set_user_buf( vgaBufPtr->buf_ptr(), vgaBufPtr->buf_size(), 4 ); // 4-by pass the width and height info of the source data, only read the bitmap into the buffer read(imageName); reset_user_buf(); // ---------- move data if buf_pitch() > buf_width() ---------// if( vgaBufPtr->buf_pitch() > vgaBufPtr->buf_width() ) { int y = vgaBufPtr->buf_height()-1; int p = vgaBufPtr->buf_pitch(); int w = vgaBufPtr->buf_width(); char *srcPtr = vgaBufPtr->buf_ptr() + w * y; char *destPtr = vgaBufPtr->buf_ptr() + p * y; for( ; y > 0; --y, srcPtr -= w, destPtr -= p ) // no need to move the first line memmove( destPtr, srcPtr, w ); } } //---------- End of function ImageRes::put_to_buf --------// //-------- Start of function ImageRes::put_to_buf --------// // // Put the image to the specified Vga buffer. // // vgaBufPtr = the pointer to the Vga buffer // bitmapId = id. of the bitmap in the resource file. // void ImageRes::put_to_buf(VgaBuf* vgaBufPtr, int bitmapId) { set_user_buf( vgaBufPtr->buf_ptr(), vgaBufPtr->buf_size(), 4 ); // 4-by pass the width and height info of the source data, only read the bitmap into the buffer get_data(bitmapId); reset_user_buf(); // ---------- move data if buf_pitch() > buf_width() ---------// if( vgaBufPtr->buf_pitch() > vgaBufPtr->buf_width() ) { int y = vgaBufPtr->buf_height()-1; int p = vgaBufPtr->buf_pitch(); int w = vgaBufPtr->buf_width(); char *srcPtr = vgaBufPtr->buf_ptr() + w * y; char *destPtr = vgaBufPtr->buf_ptr() + p * y; for( ; y > 0; --y, srcPtr -= w, destPtr -= p ) // no need to move the first line memmove( destPtr, srcPtr, w ); } } //---------- End of function ImageRes::put_to_buf --------//