Home | History | Annotate | Download | only in layout
      1 
      2 /*
      3  *******************************************************************************
      4  *
      5  *   Copyright (C) 1999-2003, International Business Machines
      6  *   Corporation and others.  All Rights Reserved.
      7  *
      8  *******************************************************************************
      9  *   file name:  GDIFontInstance.h
     10  *
     11  *   created on: 08/09/2000
     12  *   created by: Eric R. Mader
     13  */
     14 
     15 #ifndef __GDIFONTINSTANCE_H
     16 #define __GDIFONTINSTANCE_H
     17 
     18 #include <windows.h>
     19 
     20 #include "layout/LETypes.h"
     21 #include "layout/LEFontInstance.h"
     22 #include "RenderingSurface.h"
     23 #include "FontTableCache.h"
     24 #include "cmaps.h"
     25 
     26 class GDIFontInstance;
     27 
     28 class GDISurface : public RenderingSurface
     29 {
     30 public:
     31     GDISurface(HDC theHDC);
     32     virtual ~GDISurface();
     33 
     34     virtual void drawGlyphs(const LEFontInstance *font, const LEGlyphID *glyphs, le_int32 count,
     35         const float *positions, le_int32 x, le_int32 y, le_int32 width, le_int32 height);
     36 
     37     void setFont(const GDIFontInstance *font);
     38     HDC  getHDC() const;
     39     void setHDC(HDC theHDC);
     40 
     41 private:
     42     HDC fHdc;
     43     const GDIFontInstance *fCurrentFont;
     44 };
     45 
     46 inline HDC GDISurface::getHDC() const
     47 {
     48     return fHdc;
     49 }
     50 
     51 class GDIFontInstance : public LEFontInstance, protected FontTableCache
     52 {
     53 protected:
     54     GDISurface *fSurface;
     55     HFONT fFont;
     56 
     57     le_int32 fPointSize;
     58     le_int32 fUnitsPerEM;
     59     le_int32 fAscent;
     60     le_int32 fDescent;
     61     le_int32 fLeading;
     62 
     63     float fDeviceScaleX;
     64     float fDeviceScaleY;
     65 
     66     CMAPMapper *fMapper;
     67 
     68     virtual const void *readFontTable(LETag tableTag) const;
     69 
     70     virtual LEErrorCode initMapper();
     71 
     72 public:
     73     GDIFontInstance(GDISurface *surface, TCHAR *faceName, le_int16 pointSize, LEErrorCode &status);
     74     GDIFontInstance(GDISurface *surface, const char *faceName, le_int16 pointSize, LEErrorCode &status);
     75     //GDIFontInstance(GDISurface *surface, le_int16 pointSize);
     76 
     77     virtual ~GDIFontInstance();
     78 
     79     HFONT getFont() const;
     80 
     81     virtual const void *getFontTable(LETag tableTag) const;
     82 
     83     virtual le_int32 getUnitsPerEM() const;
     84 
     85     virtual le_int32 getAscent() const;
     86 
     87     virtual le_int32 getDescent() const;
     88 
     89     virtual le_int32 getLeading() const;
     90 
     91     virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
     92 
     93     virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
     94 
     95     virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
     96 
     97     float getXPixelsPerEm() const;
     98 
     99     float getYPixelsPerEm() const;
    100 
    101     float getScaleFactorX() const;
    102 
    103     float getScaleFactorY() const;
    104 };
    105 
    106 inline HFONT GDIFontInstance::getFont() const
    107 {
    108     return fFont;
    109 }
    110 
    111 inline le_int32 GDIFontInstance::getUnitsPerEM() const
    112 {
    113     return fUnitsPerEM;
    114 }
    115 
    116 inline le_int32 GDIFontInstance::getAscent() const
    117 {
    118     return fAscent;
    119 }
    120 
    121 inline le_int32 GDIFontInstance::getDescent() const
    122 {
    123     return fDescent;
    124 }
    125 
    126 inline le_int32 GDIFontInstance::getLeading() const
    127 {
    128     return fLeading;
    129 }
    130 
    131 inline LEGlyphID GDIFontInstance::mapCharToGlyph(LEUnicode32 ch) const
    132 {
    133     return fMapper->unicodeToGlyph(ch);
    134 }
    135 
    136 inline float GDIFontInstance::getXPixelsPerEm() const
    137 {
    138     return (float) fPointSize;
    139 }
    140 
    141 inline float GDIFontInstance::getYPixelsPerEm() const
    142 {
    143     return  (float) fPointSize;
    144 }
    145 
    146 inline float GDIFontInstance::getScaleFactorX() const
    147 {
    148     return fDeviceScaleX;
    149 }
    150 
    151 inline float GDIFontInstance::getScaleFactorY() const
    152 {
    153     return fDeviceScaleY;
    154 }
    155 
    156 #endif
    157