1 /* 2 * Copyright (C) 2006, 2009, 2011 Apple Inc. All rights reserved. 3 * Copyright (C) 2007-2008 Torch Mobile Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 15 * its contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef GlyphBuffer_h 31 #define GlyphBuffer_h 32 33 #include "platform/fonts/Glyph.h" 34 #include "platform/geometry/FloatSize.h" 35 #include "wtf/Vector.h" 36 37 namespace WebCore { 38 39 class SimpleFontData; 40 41 class GlyphBuffer { 42 public: isEmpty()43 bool isEmpty() const { return m_fontData.isEmpty(); } size()44 unsigned size() const { return m_fontData.size(); } 45 clear()46 void clear() 47 { 48 m_fontData.clear(); 49 m_glyphs.clear(); 50 m_advances.clear(); 51 } 52 glyphs(unsigned from)53 Glyph* glyphs(unsigned from) { return m_glyphs.data() + from; } advances(unsigned from)54 FloatSize* advances(unsigned from) { return m_advances.data() + from; } glyphs(unsigned from)55 const Glyph* glyphs(unsigned from) const { return m_glyphs.data() + from; } advances(unsigned from)56 const FloatSize* advances(unsigned from) const { return m_advances.data() + from; } 57 fontDataAt(unsigned index)58 const SimpleFontData* fontDataAt(unsigned index) const { return m_fontData[index]; } 59 glyphAt(unsigned index)60 Glyph glyphAt(unsigned index) const 61 { 62 return m_glyphs[index]; 63 } 64 advanceAt(unsigned index)65 FloatSize advanceAt(unsigned index) const 66 { 67 return m_advances[index]; 68 } 69 add(Glyph glyph,const SimpleFontData * font,float width)70 void add(Glyph glyph, const SimpleFontData* font, float width) 71 { 72 add(glyph, font, FloatSize(width, 0)); 73 } 74 add(Glyph glyph,const SimpleFontData * font,const FloatSize & advance)75 void add(Glyph glyph, const SimpleFontData* font, const FloatSize& advance) 76 { 77 m_fontData.append(font); 78 m_glyphs.append(glyph); 79 m_advances.append(advance); 80 } 81 reverse()82 void reverse() 83 { 84 m_fontData.reverse(); 85 m_glyphs.reverse(); 86 m_advances.reverse(); 87 } 88 expandLastAdvance(float width)89 void expandLastAdvance(float width) 90 { 91 ASSERT(!isEmpty()); 92 FloatSize& lastAdvance = m_advances.last(); 93 lastAdvance.setWidth(lastAdvance.width() + width); 94 } 95 96 private: 97 Vector<const SimpleFontData*, 2048> m_fontData; 98 Vector<Glyph, 2048> m_glyphs; 99 Vector<FloatSize, 2048> m_advances; 100 }; 101 102 } 103 #endif 104