#include "config.h" #include "PictureLayerContent.h" #include "InspectorCanvas.h" #include "SkPicture.h" namespace WebCore { PictureLayerContent::PictureLayerContent(SkPicture* picture) : m_picture(picture) , m_checkedContent(false) , m_hasText(true) { SkSafeRef(m_picture); } PictureLayerContent::PictureLayerContent(const PictureLayerContent& content) : m_picture(content.m_picture) , m_checkedContent(content.m_checkedContent) , m_hasText(content.m_hasText) { SkSafeRef(m_picture); } PictureLayerContent::~PictureLayerContent() { SkSafeUnref(m_picture); } int PictureLayerContent::width() { if (!m_picture) return 0; return m_picture->width(); } int PictureLayerContent::height() { if (!m_picture) return 0; return m_picture->height(); } bool PictureLayerContent::isEmpty() { if (!m_picture) return true; if (m_picture->width() == 0 || m_picture->height() == 0) return true; return false; } void PictureLayerContent::checkForOptimisations() { if (!m_checkedContent) hasText(); // for now only check the presence of text } bool PictureLayerContent::hasText() { if (m_checkedContent) return m_hasText; // Let's check if we have text or not. If we don't, we can limit // ourselves to scale 1! InspectorBounder inspectorBounder; InspectorCanvas checker(&inspectorBounder, m_picture); SkBitmap bitmap; bitmap.setConfig(SkBitmap::kARGB_8888_Config, m_picture->width(), m_picture->height()); checker.setBitmapDevice(bitmap); checker.drawPicture(*m_picture); m_hasText = checker.hasText(); if (!checker.hasContent()) { // no content to draw, discard picture so UI / tile generation // doesn't bother with it SkSafeUnref(m_picture); m_picture = 0; } m_checkedContent = true; return m_hasText; } void PictureLayerContent::draw(SkCanvas* canvas) { if (!m_picture) return; canvas->drawPicture(*m_picture); } void PictureLayerContent::serialize(SkWStream* stream) { if (!m_picture) return; m_picture->serialize(stream); } } // namespace WebCore