1 /* 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org) 5 * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Library General Public 10 * License as published by the Free Software Foundation; either 11 * version 2 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Library General Public License for more details. 17 * 18 * You should have received a copy of the GNU Library General Public License 19 * along with this library; see the file COPYING.LIB. If not, write to 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 * Boston, MA 02110-1301, USA. 22 * 23 */ 24 25 #ifndef ContentData_h 26 #define ContentData_h 27 28 #include "RenderStyleConstants.h" 29 #include <wtf/Noncopyable.h> 30 #include <wtf/PassRefPtr.h> 31 32 namespace WebCore { 33 34 class CounterContent; 35 class StringImpl; 36 class StyleImage; 37 38 struct ContentData : Noncopyable { 39 public: ContentDataContentData40 ContentData() 41 : m_type(CONTENT_NONE) 42 , m_next(0) 43 { 44 } 45 ~ContentDataContentData46 ~ContentData() 47 { 48 clear(); 49 } 50 51 void clear(); 52 isCounterContentData53 bool isCounter() const { return m_type == CONTENT_COUNTER; } isImageContentData54 bool isImage() const { return m_type == CONTENT_OBJECT; } isNoneContentData55 bool isNone() const { return m_type == CONTENT_NONE; } isTextContentData56 bool isText() const { return m_type == CONTENT_TEXT; } 57 typeContentData58 StyleContentType type() const { return m_type; } 59 60 bool dataEquivalent(const ContentData&) const; 61 imageContentData62 StyleImage* image() const { return m_content.m_image; } setImageContentData63 void setImage(PassRefPtr<StyleImage> image) 64 { 65 deleteContent(); 66 m_type = CONTENT_OBJECT; 67 m_content.m_image = image.releaseRef(); 68 } 69 textContentData70 StringImpl* text() const { return m_content.m_text; } setTextContentData71 void setText(PassRefPtr<StringImpl> text) 72 { 73 deleteContent(); 74 m_type = CONTENT_TEXT; 75 m_content.m_text = text.releaseRef(); 76 } 77 counterContentData78 CounterContent* counter() const { return m_content.m_counter; } setCounterContentData79 void setCounter(CounterContent* counter) 80 { 81 deleteContent(); 82 m_type = CONTENT_COUNTER; 83 m_content.m_counter = counter; 84 } 85 nextContentData86 ContentData* next() const { return m_next; } setNextContentData87 void setNext(ContentData* next) 88 { 89 m_next = next; 90 } 91 92 private: 93 void deleteContent(); 94 95 StyleContentType m_type; 96 union { 97 StyleImage* m_image; 98 StringImpl* m_text; 99 CounterContent* m_counter; 100 } m_content; 101 ContentData* m_next; 102 }; 103 104 } // namespace WebCore 105 106 #endif // ContentData_h 107