2 * Copyright (C) 2007 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef UniscribeController_h
30 #define UniscribeController_h
33 #include "GlyphBuffer.h"
39 class UniscribeController {
41 UniscribeController(const Font*, const TextRun&);
43 // Advance and measure/place up to the specified character.
44 void advance(unsigned to, GlyphBuffer* = 0);
46 // Compute the character offset for a given x coordinate.
47 int offsetForPosition(int x, bool includePartialGlyphs);
49 // Returns the width of everything we've consumed so far.
50 float runWidthSoFar() const { return m_runWidthSoFar; }
53 void resetControlAndState();
55 void itemizeShapeAndPlace(const UChar*, unsigned length, bool smallCaps, GlyphBuffer* glyphBuffer);
56 bool shapeAndPlaceItem(const UChar*, unsigned index, bool smallCaps, GlyphBuffer*);
57 bool shape(const UChar* str, int len, SCRIPT_ITEM item, const FontData* fontData,
58 Vector<WORD>& glyphs, Vector<WORD>& clusters,
59 Vector<SCRIPT_VISATTR>& visualAttributes);
64 SCRIPT_CONTROL m_control;
66 Vector<SCRIPT_ITEM> m_items;
68 unsigned m_currentCharacter;
71 float m_runWidthSoFar;
75 bool m_computingOffsetPosition;
76 bool m_includePartialGlyphs;