123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- * Copyright (C) 2009, 2010, 2011, 2012 Research In Motion Limited. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #ifndef BackingStoreTile_h
- #define BackingStoreTile_h
- #include "BlackBerryPlatformIntRectRegion.h"
- #include "BlackBerryPlatformMisc.h"
- #include "BlackBerryPlatformPrimitives.h"
- #include <wtf/PassRefPtr.h>
- #include <wtf/RefCounted.h>
- #include <wtf/RefPtr.h>
- namespace BlackBerry {
- namespace Platform {
- namespace Graphics {
- struct Buffer;
- }
- }
- namespace WebKit {
- // Represents a fence that has been inserted into the command stream. You can wait on the corresponding platform sync
- // object to make sure that previous commands have been completed.
- // There is no reason to wait twice on the same platform sync object, so the only mechanism provided to access the sync
- // object will also clear it to prevent anyone from waiting again.
- // Fence is only refcounted on the compositing thread, so RefCounted will suffice, we don't need ThreadSafeRefCounted.
- class Fence : public RefCounted<Fence> {
- public:
- static PassRefPtr<Fence> create(void* platformSync = 0)
- {
- return adoptRef(new Fence(platformSync));
- }
- // Returns 0 if this fence is stale (someone already waited on it)
- // Otherwise returns the platform sync object and clears the sync
- // object so no-one waits again.
- void* takePlatformSync()
- {
- void* tmp = m_platformSync;
- m_platformSync = 0;
- return tmp;
- }
- ~Fence();
- private:
- Fence(void* platformSync)
- : m_platformSync(platformSync)
- {
- }
- void* m_platformSync;
- };
- class TileBuffer {
- public:
- TileBuffer(const Platform::IntSize&);
- ~TileBuffer();
- Platform::IntSize size() const;
- Platform::IntRect surfaceRect() const;
- Platform::IntRect pixelContentsRect() const;
- Platform::IntPoint lastRenderOrigin() const { return m_lastRenderOrigin; }
- void setLastRenderOrigin(const Platform::IntPoint& origin) { m_lastRenderOrigin = origin; }
- double lastRenderScale() const { return m_lastRenderScale; }
- void setLastRenderScale(double scale) { m_lastRenderScale = scale; }
- bool isRendered(double scale) const;
- bool isRendered(const Platform::IntRectRegion& pixelContentsRegion, double scale) const;
- void clearRenderedRegion();
- void clearRenderedRegion(const Platform::IntRectRegion&);
- void addRenderedRegion(const Platform::IntRectRegion&);
- Platform::IntRectRegion renderedRegion() const;
- Platform::IntRectRegion notRenderedRegion() const;
- Platform::Graphics::Buffer* nativeBuffer() const;
- bool wasNativeBufferCreated() const;
- bool backgroundPainted() const { return m_backgroundPainted; }
- void paintBackground();
- Fence* fence() const { return m_fence.get(); }
- void setFence(PassRefPtr<Fence> fence) { m_fence = fence; }
- private:
- Platform::IntPoint m_lastRenderOrigin;
- Platform::IntSize m_size;
- Platform::IntRectRegion m_renderedRegion;
- RefPtr<Fence> m_fence;
- mutable Platform::Graphics::Buffer* m_nativeBuffer;
- double m_lastRenderScale;
- bool m_backgroundPainted;
- DISABLE_COPY(TileBuffer)
- };
- } // namespace WebKit
- } // namespace BlackBerry
- #endif // BackingStoreTile_h
|