blob: f5475da92991670b70a0f2437fcdb22a2ae9b810 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>FTGL: FTPixmapGlyph.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.6 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
<h1>FTPixmapGlyph.cpp</h1><a href="FTPixmapGlyph_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="preprocessor">#include "<a class="code" href="FTPixmapGlyph_8h.html">FTPixmapGlyph.h</a>"</span>
00002
<a name="l00003"></a><a class="code" href="classFTPixmapGlyph.html#a0">00003</a> <a class="code" href="classFTPixmapGlyph.html#a0">FTPixmapGlyph::FTPixmapGlyph</a>( FT_GlyphSlot glyph)
00004 : <a class="code" href="classFTGlyph.html">FTGlyph</a>( glyph),
00005 destWidth(0),
00006 destHeight(0),
00007 data(0)
00008 {
00009 err = FT_Render_Glyph( glyph, <a class="code" href="FTGL_8h.html#a2">FT_RENDER_MODE_NORMAL</a>);
00010 <span class="keywordflow">if</span>( err || ft_glyph_format_bitmap != glyph-&gt;format)
00011 {
00012 <span class="keywordflow">return</span>;
00013 }
00014
00015 FT_Bitmap bitmap = glyph-&gt;bitmap;
00016
00017 <span class="comment">//check the pixel mode</span>
00018 <span class="comment">//ft_pixel_mode_grays</span>
00019
00020 <span class="keywordtype">int</span> srcWidth = bitmap.width;
00021 <span class="keywordtype">int</span> srcHeight = bitmap.rows;
00022
00023 <span class="comment">// FIXME What about dest alignment?</span>
00024 destWidth = srcWidth;
00025 destHeight = srcHeight;
00026
00027 <span class="keywordflow">if</span>( destWidth &amp;&amp; destHeight)
00028 {
00029 data = <span class="keyword">new</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>[destWidth * destHeight * 4];
00030
00031 <span class="comment">// Get the current glColor.</span>
00032 <span class="keywordtype">float</span> ftglColour[4];
00033 glGetFloatv( GL_CURRENT_COLOR, ftglColour);
00034
00035 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> redComponent = static_cast&lt;unsigned char&gt;( ftglColour[0] * 255.0f);
00036 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> greenComponent = static_cast&lt;unsigned char&gt;( ftglColour[1] * 255.0f);
00037 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> blueComponent = static_cast&lt;unsigned char&gt;( ftglColour[2] * 255.0f);
00038
00039 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* src = bitmap.buffer;
00040
00041 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* dest = data + ((destHeight - 1) * destWidth) * 4;
00042 size_t destStep = destWidth * 4 * 2;
00043
00044 <span class="keywordflow">if</span>( ftglColour[3] == 1.0f)
00045 {
00046 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> y = 0; y &lt; srcHeight; ++y)
00047 {
00048 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> x = 0; x &lt; srcWidth; ++x)
00049 {
00050 *dest++ = redComponent;
00051 *dest++ = greenComponent;
00052 *dest++ = blueComponent;
00053 *dest++ = *src++;
00054 }
00055 dest -= destStep;
00056 }
00057 }
00058 <span class="keywordflow">else</span>
00059 {
00060 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> y = 0; y &lt; srcHeight; ++y)
00061 {
00062 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> x = 0; x &lt; srcWidth; ++x)
00063 {
00064 *dest++ = redComponent;
00065 *dest++ = greenComponent;
00066 *dest++ = blueComponent;
00067 *dest++ = static_cast&lt;unsigned char&gt;(ftglColour[3] * *src++);
00068 }
00069 dest -= destStep;
00070 }
00071 }
00072 destHeight = srcHeight;
00073 }
00074
00075 pos.<a class="code" href="classFTPoint.html#a7">X</a>( glyph-&gt;bitmap_left);
00076 pos.<a class="code" href="classFTPoint.html#a8">Y</a>( srcHeight - glyph-&gt;bitmap_top);
00077 }
00078
00079
<a name="l00080"></a><a class="code" href="classFTPixmapGlyph.html#a1">00080</a> <a class="code" href="classFTPixmapGlyph.html#a1">FTPixmapGlyph::~FTPixmapGlyph</a>()
00081 {
00082 <span class="keyword">delete</span> [] data;
00083 }
00084
00085
<a name="l00086"></a><a class="code" href="classFTPixmapGlyph.html#a2">00086</a> <span class="keyword">const</span> <a class="code" href="classFTPoint.html">FTPoint</a>&amp; <a class="code" href="classFTPixmapGlyph.html#a2">FTPixmapGlyph::Render</a>( <span class="keyword">const</span> <a class="code" href="classFTPoint.html">FTPoint</a>&amp; pen)
00087 {
00088 glBitmap( 0, 0, 0.0f, 0.0f, pen.<a class="code" href="classFTPoint.html#a7">X</a>() + pos.<a class="code" href="classFTPoint.html#a7">X</a>(), pen.<a class="code" href="classFTPoint.html#a8">Y</a>() - pos.<a class="code" href="classFTPoint.html#a8">Y</a>(), (<span class="keyword">const</span> GLubyte*)0);
00089
00090 <span class="keywordflow">if</span>( data)
00091 {
00092 glPixelStorei( GL_UNPACK_ROW_LENGTH, 0);
00093 glDrawPixels( destWidth, destHeight, GL_RGBA, GL_UNSIGNED_BYTE, (<span class="keyword">const</span> GLvoid*)data);
00094 }
00095
00096 glBitmap( 0, 0, 0.0f, 0.0f, -pos.<a class="code" href="classFTPoint.html#a7">X</a>(), pos.<a class="code" href="classFTPoint.html#a8">Y</a>(), (<span class="keyword">const</span> GLubyte*)0);
00097
00098 <span class="keywordflow">return</span> advance;
00099 }
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Dec 5 22:24:06 2004 for FTGL by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
</a>1.3.6 </small></address>
</body>
</html>