1/*
2 Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB.  If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18 */
19
20#ifndef Tile_h
21#define Tile_h
22
23#if ENABLE(TILED_BACKING_STORE)
24
25#include "IntPoint.h"
26#include "IntPointHash.h"
27#include "IntRect.h"
28#include <wtf/PassRefPtr.h>
29#include <wtf/RefCounted.h>
30
31#if PLATFORM(QT)
32QT_BEGIN_NAMESPACE
33class QPixmap;
34class QRegion;
35QT_END_NAMESPACE
36#endif
37
38namespace WebCore {
39
40class GraphicsContext;
41class TiledBackingStore;
42
43class Tile : public RefCounted<Tile> {
44public:
45    typedef IntPoint Coordinate;
46
47    static PassRefPtr<Tile> create(TiledBackingStore* backingStore, const Coordinate& tileCoordinate) { return adoptRef(new Tile(backingStore, tileCoordinate)); }
48    ~Tile();
49
50    bool isDirty() const;
51    void invalidate(const IntRect&);
52    Vector<IntRect> updateBackBuffer();
53    void swapBackBufferToFront();
54    bool isReadyToPaint() const;
55    void paint(GraphicsContext*, const IntRect&);
56
57    const Tile::Coordinate& coordinate() const { return m_coordinate; }
58    const IntRect& rect() const { return m_rect; }
59
60    static void paintCheckerPattern(GraphicsContext*, const FloatRect&);
61
62private:
63    Tile(TiledBackingStore*, const Coordinate&);
64
65    TiledBackingStore* m_backingStore;
66    Coordinate m_coordinate;
67    IntRect m_rect;
68
69#if PLATFORM(QT)
70    QPixmap* m_buffer;
71    QPixmap* m_backBuffer;
72    QRegion* m_dirtyRegion;
73#endif
74};
75
76}
77#endif
78#endif
79