1d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2010 Apple Inc. All rights reserved. 3d0825bca7fe65beaee391d30da42e937db621564Steve Block * 4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without 5d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions 6d0825bca7fe65beaee391d30da42e937db621564Steve Block * are met: 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * 1. Redistributions of source code must retain the above copyright 8d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer. 9d0825bca7fe65beaee391d30da42e937db621564Steve Block * 2. Redistributions in binary form must reproduce the above copyright 10d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer in the 11d0825bca7fe65beaee391d30da42e937db621564Steve Block * documentation and/or other materials provided with the distribution. 12d0825bca7fe65beaee391d30da42e937db621564Steve Block * 13d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14d0825bca7fe65beaee391d30da42e937db621564Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15d0825bca7fe65beaee391d30da42e937db621564Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16d0825bca7fe65beaee391d30da42e937db621564Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17d0825bca7fe65beaee391d30da42e937db621564Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19d0825bca7fe65beaee391d30da42e937db621564Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20d0825bca7fe65beaee391d30da42e937db621564Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21d0825bca7fe65beaee391d30da42e937db621564Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22d0825bca7fe65beaee391d30da42e937db621564Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23d0825bca7fe65beaee391d30da42e937db621564Steve Block * THE POSSIBILITY OF SUCH DAMAGE. 24d0825bca7fe65beaee391d30da42e937db621564Steve Block */ 25d0825bca7fe65beaee391d30da42e937db621564Steve Block 266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#ifndef VerticalPositionCache_h 276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#define VerticalPositionCache_h 28d0825bca7fe65beaee391d30da42e937db621564Steve Block 296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "FontBaseline.h" 306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include <wtf/HashMap.h> 31d0825bca7fe65beaee391d30da42e937db621564Steve Block 32d0825bca7fe65beaee391d30da42e937db621564Steve Blocknamespace WebCore { 33d0825bca7fe65beaee391d30da42e937db621564Steve Block 346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerclass RenderObject; 35d0825bca7fe65beaee391d30da42e937db621564Steve Block 366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner// Values for vertical alignment. 376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerconst int PositionUndefined = 0x80000000; 38d0825bca7fe65beaee391d30da42e937db621564Steve Block 39ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass VerticalPositionCache { 40ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(VerticalPositionCache); 416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerpublic: 426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner VerticalPositionCache() 436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { } 446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner int get(RenderObject* renderer, FontBaseline baselineType) const 466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner const HashMap<RenderObject*, int>& mapToCheck = baselineType == AlphabeticBaseline ? m_alphabeticPositions : m_ideographicPositions; 486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner const HashMap<RenderObject*, int>::const_iterator it = mapToCheck.find(renderer); 496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (it == mapToCheck.end()) 506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return PositionUndefined; 516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return it->second; 526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void set(RenderObject* renderer, FontBaseline baselineType, int position) 556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner { 566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (baselineType == AlphabeticBaseline) 576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_alphabeticPositions.set(renderer, position); 586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else 596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_ideographicPositions.set(renderer, position); 606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 61d0825bca7fe65beaee391d30da42e937db621564Steve Block 62d0825bca7fe65beaee391d30da42e937db621564Steve Blockprivate: 636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner HashMap<RenderObject*, int> m_alphabeticPositions; 646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner HashMap<RenderObject*, int> m_ideographicPositions; 65d0825bca7fe65beaee391d30da42e937db621564Steve Block}; 66d0825bca7fe65beaee391d30da42e937db621564Steve Block 676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} // namespace WebCore 686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 696b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif // VerticalPositionCache_h 70