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

传真(Fax)编程

开发平台:

C/C++

  1. /* $Id: PageSize.h,v 1.1.1.1 2005/11/11 21:32:03 faxguy Exp $ */
  2. /*
  3.  * Copyright (c) 1993-1996 Sam Leffler
  4.  * Copyright (c) 1993-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 _PAGESIZE_
  27. #define _PAGESIZE_
  28. /*
  29.  * Page size information.
  30.  */
  31. #if defined(c_plusplus) || defined(__cplusplus)
  32. #include "Str.h"
  33. class PageInfoArray;
  34. typedef u_int BMU; // ISO basic measurement unit
  35. struct PageInfo {
  36.     const char* name; // page size name
  37.     const char* abbr; // abbreviated name
  38.     BMU w, h; // nominal page width & height
  39.     BMU grw, grh; // guaranteed reproducible width & height
  40.     BMU top; // top margin for grh
  41.     BMU left; // bottom margin for grw
  42. };
  43. class PageSizeInfo {
  44. private:
  45.     const PageInfo* info;
  46.     friend class PageSizeInfoIter;
  47.     PageSizeInfo(const PageInfo&);
  48.     static PageInfoArray* pageInfo;
  49.     static const PageInfo* getPageInfoByName(const char* name);
  50.     static PageInfoArray* readPageInfoFile();
  51.     static bool skipws(char*& cp,
  52. const char* file, const char* item, u_int lineno);
  53.     static float toMM(BMU v) { return (v/1200.)*25.4; }
  54.     static BMU fromMM(float v) { return BMU((v/25.4)*1200); }
  55. public:
  56.     PageSizeInfo();
  57.     ~PageSizeInfo();
  58.     static PageSizeInfo* getPageSizeByName(const char*);
  59.     static PageSizeInfo* getPageSizeBySize(float w, float h);
  60.     const char* name() const; // fully qualified page size name
  61.     const char* abbrev() const; // abbreviated name
  62.     float width() const; // nominal page width (mm)
  63.     float height() const; // nominal page height (mm)
  64.     float guarWidth() const; // guaranteed reproducible width (mm)
  65.     float guarHeight() const; // guaranteed reproducible height (mm)
  66.     float topMargin() const; // top margin for GRA (mm)
  67.     float leftMargin() const; // left margin for GRA (mm)
  68. };
  69. inline const char* PageSizeInfo::name() const { return info->name; }
  70. inline const char* PageSizeInfo::abbrev() const { return info->abbr; }
  71. inline float PageSizeInfo::width() const { return toMM(info->w); }
  72. inline float PageSizeInfo::height() const { return toMM(info->h); }
  73. inline float PageSizeInfo::guarHeight() const { return toMM(info->grh); }
  74. inline float PageSizeInfo::guarWidth() const { return toMM(info->grw); }
  75. inline float PageSizeInfo::topMargin() const { return toMM(info->top); }
  76. inline float PageSizeInfo::leftMargin() const { return toMM(info->left); }
  77. /*
  78.  * For iterating over the available page sizes.
  79.  */
  80. class PageSizeInfoIter {
  81. private:
  82.     PageSizeInfo pi;
  83.     u_int i;
  84. public:
  85.     PageSizeInfoIter();
  86.     ~PageSizeInfoIter();
  87.     void operator++();
  88.     void operator++(int);
  89.     operator const PageSizeInfo&();
  90.     bool notDone();
  91. };
  92. #else
  93. /*
  94.  * C interface to get at information...
  95.  */
  96. struct pageSizeInfo; /* opaque handle */
  97. extern struct pageSizeInfo* getPageSize(const char* name);
  98. extern struct pageSizeInfo* closestPageSize(float w, float h);
  99. extern void delPageSize(struct pageSizeInfo*);
  100. extern const char* getPageName(const struct pageSizeInfo*);
  101. extern const char* getPageAbbrev(const struct pageSizeInfo*);
  102. extern float getPageWidth(const struct pageSizeInfo*);
  103. extern float getPageHeight(const struct pageSizeInfo*);
  104. extern float getPageGuarHeight(const struct pageSizeInfo*);
  105. extern float getPageGuarWidth(const struct pageSizeInfo*);
  106. extern float getPageTopMargin(const struct pageSizeInfo*);
  107. extern float getPageLeftMargin(const struct pageSizeInfo*);
  108. #endif
  109. #endif /* _PAGESIZE_ */