165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 32fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved. 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef DrawingAreaProxy_h 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define DrawingAreaProxy_h 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DrawingAreaInfo.h" 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <stdint.h> 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/IntSize.h> 3381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/Noncopyable.h> 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(QT) 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass QPainter; 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#elif PLATFORM(GTK) 382fc2651226baac27029e38c9d6ef883fa32084dbSteve Blocktypedef struct _cairo cairo_t; 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace CoreIPC { 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch class ArgumentDecoder; 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch class Connection; 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch class MessageID; 4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace WebCore { 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch class IntRect; 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 532fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass LayerTreeContext; 542fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass UpdateInfo; 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass WebPageProxy; 562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef CGContextRef PlatformDrawingContext; 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#elif PLATFORM(WIN) 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef HDC PlatformDrawingContext; 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#elif PLATFORM(QT) 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochtypedef QPainter* PlatformDrawingContext; 632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#elif PLATFORM(GTK) 642fc2651226baac27029e38c9d6ef883fa32084dbSteve Blocktypedef cairo_t* PlatformDrawingContext; 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochclass DrawingAreaProxy { 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WTF_MAKE_NONCOPYABLE(DrawingAreaProxy); 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochpublic: 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual ~DrawingAreaProxy(); 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch DrawingAreaType type() const { return m_type; } 7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if PLATFORM(MAC) || PLATFORM(WIN) 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void didReceiveDrawingAreaProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*); 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) = 0; 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Returns true if painting was successful, false otherwise. 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual bool paint(const WebCore::IntRect&, PlatformDrawingContext) = 0; 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void sizeDidChange() = 0; 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: These should be pure virtual. 87ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void visibilityDidChange() { } 882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void setBackingStoreIsDiscardable(bool) { } 892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void setPageIsVisible(bool isVisible) = 0; 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const WebCore::IntSize& size() const { return m_size; } 932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block void setSize(const WebCore::IntSize&, const WebCore::IntSize& scrollOffset); 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprotected: 9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch explicit DrawingAreaProxy(DrawingAreaType, WebPageProxy*); 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch DrawingAreaType m_type; 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebPageProxy* m_webPageProxy; 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebCore::IntSize m_size; 1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WebCore::IntSize m_scrollOffset; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochprivate: 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // CoreIPC message handlers. 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: These should be pure virtual. 10781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void update(uint64_t backingStoreStateID, const UpdateInfo&) { } 10881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void didUpdateBackingStoreState(uint64_t backingStoreStateID, const UpdateInfo&, const LayerTreeContext&) { } 1092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if USE(ACCELERATED_COMPOSITING) 11081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void enterAcceleratedCompositingMode(uint64_t backingStoreStateID, const LayerTreeContext&) { } 11181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void exitAcceleratedCompositingMode(uint64_t backingStoreStateID, const UpdateInfo&) { } 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}; 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // DrawingAreaProxy_h 118