18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2007-2008 Torch Mobile Inc. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef GlyphBuffer_h 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define GlyphBuffer_h 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatSize.h" 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <wtf/UnusedParam.h> 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <wtf/Vector.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CG) 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <ApplicationServices/ApplicationServices.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if PLATFORM(CAIRO) || (PLATFORM(WX) && defined(__WXGTK__)) 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <cairo.h> 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef unsigned short Glyph; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SimpleFontData; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CAIRO) 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: Why does Cairo use such a huge struct instead of just an offset into an array? 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef cairo_glyph_t GlyphBufferGlyph; 53d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif OS(WINCE) 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef wchar_t GlyphBufferGlyph; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef Glyph GlyphBufferGlyph; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// CG uses CGSize instead of FloatSize so that the result of advances() 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// can be passed directly to CGContextShowGlyphsWithAdvances in FontMac.mm 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CG) 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef CGSize GlyphBufferAdvance; 63d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif OS(WINCE) 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// There is no cross-platform code that uses the height of GlyphBufferAdvance, 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// so we can save memory space on embedded devices by storing only the width 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochtypedef float GlyphBufferAdvance; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef FloatSize GlyphBufferAdvance; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass GlyphBuffer { 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isEmpty() const { return m_fontData.isEmpty(); } 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int size() const { return m_fontData.size(); } 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void clear() 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData.clear(); 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs.clear(); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_advances.clear(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_offsets.clear(); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GlyphBufferGlyph* glyphs(int from) { return m_glyphs.data() + from; } 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GlyphBufferAdvance* advances(int from) { return m_advances.data() + from; } 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const GlyphBufferGlyph* glyphs(int from) const { return m_glyphs.data() + from; } 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const GlyphBufferAdvance* advances(int from) const { return m_advances.data() + from; } 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const SimpleFontData* fontDataAt(int index) const { return m_fontData[index]; } 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void swap(int index1, int index2) 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const SimpleFontData* f = m_fontData[index1]; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData[index1] = m_fontData[index2]; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData[index2] = f; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GlyphBufferGlyph g = m_glyphs[index1]; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs[index1] = m_glyphs[index2]; 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs[index2] = g; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GlyphBufferAdvance s = m_advances[index1]; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_advances[index1] = m_advances[index2]; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_advances[index2] = s; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatSize offset = m_offsets[index1]; 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_offsets[index1] = m_offsets[index2]; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_offsets[index2] = offset; 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Glyph glyphAt(int index) const 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CAIRO) 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_glyphs[index].index; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_glyphs[index]; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float advanceAt(int index) const 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CG) 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_advances[index].width; 127d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif OS(WINCE) 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return m_advances[index]; 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_advances[index].width(); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatSize offsetAt(int index) const 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_offsets[index]; 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project UNUSED_PARAM(index); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FloatSize(); 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void add(Glyph glyph, const SimpleFontData* font, float width, const FloatSize* offset = 0) 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData.append(font); 147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CAIRO) 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cairo_glyph_t cairoGlyph; 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cairoGlyph.index = glyph; 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs.append(cairoGlyph); 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs.append(glyph); 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CG) 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CGSize advance = { width, 0 }; 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_advances.append(advance); 159d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif OS(WINCE) 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_advances.append(width); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_advances.append(FloatSize(width, 0)); 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (offset) 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_offsets.append(*offset); 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_offsets.append(FloatSize()); 170635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else 171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project UNUSED_PARAM(offset); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 175d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !OS(WINCE) 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void add(Glyph glyph, const SimpleFontData* font, GlyphBufferAdvance advance) 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_fontData.append(font); 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(CAIRO) 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cairo_glyph_t cairoGlyph; 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cairoGlyph.index = glyph; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs.append(cairoGlyph); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_glyphs.append(glyph); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_advances.append(advance); 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<const SimpleFontData*, 2048> m_fontData; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<GlyphBufferGlyph, 2048> m_glyphs; 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<GlyphBufferAdvance, 2048> m_advances; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<FloatSize, 2048> m_offsets; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 202