PCFFont.h
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:3k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: PCFFont.h,v 1.2 2007/11/24 00:45:47 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1994-1996 Sam Leffler
  4.  * Copyright (c) 1994-1996 Silicon Graphics, Inc.
  5.  * HylaFAX is a trademark of Silicon Graphics
  6.  *
  7.  * Permission to use, copy, modify, distribute, and sell this software and 
  8.  * its documentation for any purpose is hereby granted without fee, provided
  9.  * that (i) the above copyright notices and this permission notice appear in
  10.  * all copies of the software and related documentation, and (ii) the names of
  11.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  12.  * publicity relating to the software without the specific, prior written
  13.  * permission of Sam Leffler and Silicon Graphics.
  14.  * 
  15.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  18.  * 
  19.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  20.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  21.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  22.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  24.  * OF THIS SOFTWARE.
  25.  */
  26. #ifndef _PCFFont_
  27. #define _PCFFont_
  28. /*
  29.  * Portable Compiled Format (PCF) Font Support.
  30.  *
  31.  * This class is specifically designed to read a PCF font and use
  32.  * it to image text into a raster bitmap.  It does just enough to
  33.  * satisfy the needs of the fax software (for imaging tag lines).
  34.  */
  35. #include "FaxFont.h"
  36. struct PCFTableRec;
  37. struct charInfo;
  38. class PCFFont : public FaxFont {
  39. private:
  40.     u_short firstCol; // index of first encoded glyph column
  41.     u_short lastCol; // index of last encoded glyph column
  42.     u_short firstRow; // index of first encoded glyph row
  43.     u_short lastRow; // index of last encoded glyph row
  44.     u_long numGlyphs; // count of glyphs with metrics+bitmaps
  45.     charInfo* metrics; // font metrics, including glyph pointers
  46.     u_char* bitmaps; // base of bitmaps, useful only to free
  47.     charInfo** encoding; // array of char info pointers
  48.     charInfo* cdef; // default character
  49. // input-specific state
  50.     FILE* file; // open file
  51.     const char* filename; // filename for error messages
  52.     u_long format; // format for current portion being read
  53.     PCFTableRec* toc; // table of contents
  54.     u_long tocSize; // number of entries in TOC
  55.     bool isBigEndian; // host byte order
  56.     void cleanup();
  57.     bool readTOC();
  58.     bool seekToTable(u_long type);
  59.     void getMetric(charInfo& metric);
  60.     void getCompressedMetric(charInfo& metric);
  61.     int repadBitmap(u_char* src, u_char* dst,
  62.     u_long srcPad, u_long dstPad, int width, int height);
  63.     u_long getLSB32();
  64.     u_long getINT32();
  65.     int getINT16();
  66.     int getINT8();
  67.     bool isFormat(u_long f) const;
  68.     u_int byteOrder() const;
  69.     u_int bitOrder() const;
  70.     u_int glyphPadIndex() const;
  71.     u_int glyphPad() const;
  72.     u_int scanUnit() const;
  73.     virtual void error(const char* fmt, ...);
  74. public:
  75.     PCFFont();
  76.     ~PCFFont();
  77.     bool read(const char* filename);
  78.     u_int charWidth(u_int) const;
  79.     void strWidth(const char* text, u_int& w, u_int& h) const;
  80.     u_int imageText(const char* text, bool isutf8,
  81.     u_short* bitmap, u_int w, u_int h,
  82.     u_int lm, u_int rm, u_int tm, u_int bm) const;
  83.     void print(FILE*) const;
  84. };
  85. #endif /* _PCFFont_ */