18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSCanvasValue.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ImageBuffer.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderObject.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCSSCanvasValue::~CSSCanvasValue() 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_element) 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_element->setObserver(0); 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString CSSCanvasValue::cssText() const 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String result = "-webkit-canvas("; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result += m_name + ")"; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid CSSCanvasValue::canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect) 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect imageChangeRect = enclosingIntRect(changedRect); 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RenderObjectSizeCountMap::const_iterator end = m_clients.end(); 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (RenderObjectSizeCountMap::const_iterator curr = m_clients.begin(); curr != end; ++curr) 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project curr->first->imageChanged(static_cast<WrappedImagePtr>(this), &imageChangeRect); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid CSSCanvasValue::canvasResized(HTMLCanvasElement*) 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RenderObjectSizeCountMap::const_iterator end = m_clients.end(); 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (RenderObjectSizeCountMap::const_iterator curr = m_clients.begin(); curr != end; ++curr) 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project curr->first->imageChanged(static_cast<WrappedImagePtr>(this)); 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid CSSCanvasValue::canvasDestroyed(HTMLCanvasElement* element) 635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian ASSERT(element == m_element); 655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (element == m_element) 665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian m_element = 0; 675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntSize CSSCanvasValue::fixedSize(const RenderObject* renderer) 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (HTMLCanvasElement* elt = element(renderer->document())) 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntSize(elt->width(), elt->height()); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntSize(); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHTMLCanvasElement* CSSCanvasValue::element(Document* document) 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_element) { 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_element = document->getCSSCanvasElement(m_name); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_element) 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_element->setObserver(this); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_element; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectImage* CSSCanvasValue::image(RenderObject* renderer, const IntSize& /*size*/) 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(m_clients.contains(renderer)); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLCanvasElement* elt = element(renderer->document()); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!elt || !elt->buffer()) 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return elt->buffer()->image(); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 97