15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll <knoll@kde.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Antti Koivisto <koivisto@kde.org> 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2000 Dirk Mueller <mueller@kde.org> 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Allan Sandfeld Jensen <kde@carewolf.com> 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderImageResource.h" 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/rendering/RenderImage.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RenderImageResource::RenderImageResource() 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_renderer(0) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_cachedImage(0) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RenderImageResource::~RenderImageResource() 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderImageResource::initialize(RenderObject* renderer) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_renderer); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(renderer); 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_renderer = renderer; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderImageResource::shutdown() 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_renderer); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_cachedImage) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_cachedImage->removeClient(m_renderer); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 613c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochvoid RenderImageResource::setImageResource(ImageResource* newImage) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_renderer); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_cachedImage == newImage) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_cachedImage) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_cachedImage->removeClient(m_renderer); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_cachedImage = newImage; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_cachedImage) { 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_cachedImage->addClient(m_renderer); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_cachedImage->errorOccurred()) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_renderer->imageChanged(m_cachedImage.get()); 75f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } else { 76f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) m_renderer->imageChanged(m_cachedImage.get()); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderImageResource::resetAnimation() 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_renderer); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_cachedImage) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) image()->resetAnimation(); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 899e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_renderer->setShouldDoFullPaintInvalidation(true); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void RenderImageResource::setContainerSizeForRenderer(const IntSize& imageContainerSize) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_renderer); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_cachedImage) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_cachedImage->setContainerSizeForRenderer(m_renderer, imageContainerSize, m_renderer->style()->effectiveZoom()); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)LayoutSize RenderImageResource::getImageSize(float multiplier, ImageResource::SizeType type) const 1001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 1011e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (!m_cachedImage) 1021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return LayoutSize(); 1031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) LayoutSize size = m_cachedImage->imageSizeForRenderer(m_renderer, multiplier, type); 1041e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (m_renderer && m_renderer->isRenderImage()) 1051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) size.scale(toRenderImage(m_renderer)->imageDevicePixelRatio()); 1061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return size; 1071e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 1081e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 109c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 110