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