1 /* 2 * This file is part of the DOM implementation for KDE. 3 * 4 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 5 * (C) 1999 Antti Koivisto (koivisto@kde.org) 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Library General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Library General Public License for more details. 16 * 17 * You should have received a copy of the GNU Library General Public License 18 * along with this library; see the file COPYING.LIB. If not, write to 19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20 * Boston, MA 02110-1301, USA. 21 * 22 */ 23 #ifndef HTML_IMAGEIMPL_H 24 #define HTML_IMAGEIMPL_H 25 26 #include "html/html_inlineimpl.h" 27 #include "misc/khtmllayout.h" 28 #include "misc/loader_client.h" 29 #include "rendering/render_object.h" 30 31 #include <QRegion> 32 33 namespace DOM 34 { 35 36 class DOMString; 37 class HTMLFormElementImpl; 38 class HTMLCollectionImpl; 39 40 class HTMLImageElementImpl 41 : public HTMLElementImpl, public khtml::CachedObjectClient 42 { 43 friend class HTMLFormElementImpl; 44 public: 45 HTMLImageElementImpl(DocumentImpl *doc, HTMLFormElementImpl *f = nullptr); 46 ~HTMLImageElementImpl(); 47 48 Id id() const override; 49 50 void parseAttribute(AttributeImpl *) override; 51 52 void attach() override; 53 void removedFromDocument() override; 54 void insertedIntoDocument() override; 55 void addId(const DOMString &id) override; 56 void removeId(const DOMString &id) override; 57 58 long width() const; 59 long height() const; 60 void setWidth(long width); 61 void setHeight(long height); 62 63 long x() const; 64 long y() const; 65 isServerMap()66 bool isServerMap() const 67 { 68 return (ismap && !usemap.length()); 69 } 70 /** Return the image for this element. 71 * This has to convert the pixmap into an image first. 72 * This will return undefined results if complete() is not true. 73 */ 74 QImage currentImage() const; 75 /** Return the pixmap for this element. 76 * This will return undefined results if complete() is not true. 77 */ 78 QPixmap currentPixmap() const; 79 80 DOMString altText() const; 81 imageMap()82 DOMString imageMap() const 83 { 84 return usemap; 85 } 86 /** See if the image has been completely downloaded. 87 * @return True if and only if the image is completely downloaded yet*/ 88 bool complete() const; 89 90 void notifyFinished(khtml::CachedObject *finishedObj) override; 91 void dispatchLoadEvent(); 92 image()93 khtml::CachedImage *image() 94 { 95 return m_image; 96 } 97 98 // This returns true if this image has (or ever had!) cross-domain data; which will make 99 // it unsafe to getImageData() it in canvas; isUnsafe()100 bool isUnsafe() const 101 { 102 return unsafe; 103 } 104 protected: 105 DOMString usemap; 106 bool ismap; 107 bool loadEventSent; 108 bool unsafe; 109 khtml::CachedImage *m_image; 110 HTMLFormElementImpl *m_form; 111 DOMString m_name; 112 }; 113 114 //------------------------------------------------------------------ 115 116 class HTMLAreaElementImpl : public HTMLAnchorElementImpl 117 { 118 public: 119 120 enum Shape { Default, Poly, Rect, Circle, Unknown }; 121 122 HTMLAreaElementImpl(DocumentImpl *doc); 123 ~HTMLAreaElementImpl(); 124 125 Id id() const override; 126 127 void parseAttribute(AttributeImpl *attr) override; 128 isDefault()129 bool isDefault() const 130 { 131 return shape == Default; 132 } 133 134 bool mapMouseEvent(int x_, int y_, int width_, int height_, 135 khtml::RenderObject::NodeInfo &info); 136 137 QRect getRect() const override; 138 cachedRegion()139 QRegion cachedRegion() const 140 { 141 return region; 142 } 143 144 protected: 145 QRegion getRegion(int width_, int height) const; 146 QRegion region; 147 khtml::Length *m_coords; 148 int m_coordsLen; 149 int lastw, lasth; 150 KDE_BF_ENUM(Shape) shape : 3; 151 bool nohref : 1; 152 }; 153 154 // ------------------------------------------------------------------------- 155 156 class HTMLMapElementImpl : public HTMLElementImpl 157 { 158 public: 159 HTMLMapElementImpl(DocumentImpl *doc); 160 161 ~HTMLMapElementImpl(); 162 163 Id id() const override; 164 getName()165 virtual DOMString getName() const 166 { 167 return name; 168 } 169 170 void parseAttribute(AttributeImpl *attr) override; 171 172 bool mapMouseEvent(int x_, int y_, int width_, int height_, 173 khtml::RenderObject::NodeInfo &info); 174 175 HTMLCollectionImpl *areas(); 176 private: 177 178 QString name; 179 }; 180 181 } //namespace 182 183 #endif 184