1d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik/* 2d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * Copyright 2011, The Android Open Source Project 3d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * 4d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * Redistribution and use in source and binary forms, with or without 5d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * modification, are permitted provided that the following conditions 6d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * are met: 7d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * * Redistributions of source code must retain the above copyright 8d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * notice, this list of conditions and the following disclaimer. 9d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * * Redistributions in binary form must reproduce the above copyright 10d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * notice, this list of conditions and the following disclaimer in the 11d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * documentation and/or other materials provided with the distribution. 12d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * 13d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 14d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 17d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik */ 25d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 26d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik#define LOG_TAG "InspectorCanvas" 27d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik#define LOG_NDEBUG 1 28d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik 29d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik#include "config.h" 30d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik#include "InspectorCanvas.h" 31d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 32d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik#include "AndroidLog.h" 33d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik#include "SkPicture.h" 34d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 35d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craiknamespace WebCore { 36d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 37d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 38d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::setHasText() 39d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 40d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik m_hasText = true; 41d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 42d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 43d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 44d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::setHasContent() 45d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 46d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik m_hasContent = true; 47d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik if (m_hasText) { 48d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // has text. Have to paint properly, so no further 49d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // information is useful 50d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik m_picture->abortPlayback(); 51d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik } 52d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 53d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 54d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::setIsBackground(const SkPaint& paint) 55d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 56d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // TODO: if the paint is a solid color, opaque, and the last instruction in 57d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // the picture, replace the picture with simple draw rect info 58d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 59d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 60d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 61d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::commonDrawBitmap(const SkBitmap& bitmap, 62d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkIRect* rect, 63d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkMatrix&, 64d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPaint&) 65d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 66d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 67d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 68d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 69d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawPaint(const SkPaint& paint) 70d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 71d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 72d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 73d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 74d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawPath(const SkPath&, const SkPaint& paint) 75d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 76d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 77d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 78d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawPoints(PointMode, size_t, 79d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPoint [], const SkPaint& paint) 80d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 81d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 82d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 83d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 84d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawRect(const SkRect& rect, const SkPaint& paint) 85d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 86d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik if (rect.fLeft == 0 87d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik && rect.fTop == 0 88d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik && rect.width() >= m_picture->width() 89d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik && rect.height() >= m_picture->height()) { 90d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // rect same size as canvas, treat layer as a single color rect until 91d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // more content is drawn 92d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setIsBackground(paint); 93d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik } else { 94d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik // regular rect drawing path 95d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 96d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik } 97d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik ALOGV("draw rect at %f %f, size %f %f, picture size %d %d", 98d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik rect.fLeft, rect.fTop, rect.width(), rect.height(), 99d487c56b47c747d3e331ee1892e4c0473363afd2Chris Craik m_picture->width(), m_picture->height()); 100d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 101d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawSprite(const SkBitmap& , int , int , 102d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPaint* paint) 103d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 104d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasContent(); 105d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 106d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 107d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawText(const void*, size_t byteLength, SkScalar, 108d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik SkScalar, const SkPaint& paint) 109d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 110d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasText(); 111d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 112d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 113d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawPosText(const void* , size_t byteLength, 114d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPoint [], const SkPaint& paint) 115d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 116d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasText(); 117d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 118d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 119d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawPosTextH(const void*, size_t byteLength, 120d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkScalar [], SkScalar, 121d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPaint& paint) 122d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 123d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasText(); 124d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 125d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 126d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craikvoid InspectorCanvas::drawTextOnPath(const void*, size_t byteLength, 127d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPath&, const SkMatrix*, 128d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik const SkPaint& paint) 129d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik{ 130d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik setHasText(); 131d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} 132d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik 133d0fb9fc8829373b88adf55224fde0e456a9d8665Chris Craik} // namespace WebCore 134