https://bugs.webkit.org/show_bug.cgi?id=67431
[WebKit-https.git] / Source / WebCore / rendering / style / NinePieceImage.h
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  *
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
24 #ifndef NinePieceImage_h
25 #define NinePieceImage_h
26
27 #include "LengthBox.h"
28 #include "StyleImage.h"
29
30 namespace WebCore {
31
32 enum ENinePieceImageRule {
33     StretchImageRule, RoundImageRule, SpaceImageRule, RepeatImageRule
34 };
35
36 class NinePieceImage {
37 public:
38     NinePieceImage()
39         : m_image(0)
40         , m_slices(Length(100, Percent), Length(100, Percent), Length(100, Percent), Length(100, Percent))
41         , m_fill(false)
42         , m_horizontalRule(StretchImageRule)
43         , m_verticalRule(StretchImageRule)
44     {
45     }
46
47     NinePieceImage(StyleImage* image, LengthBox slices, bool fill, ENinePieceImageRule h, ENinePieceImageRule v) 
48       : m_image(image)
49       , m_slices(slices)
50       , m_fill(fill)
51       , m_horizontalRule(h)
52       , m_verticalRule(v)
53     {
54     }
55
56     bool operator==(const NinePieceImage& o) const;
57     bool operator!=(const NinePieceImage& o) const { return !(*this == o); }
58
59     bool hasImage() const { return m_image != 0; }
60     StyleImage* image() const { return m_image.get(); }
61     void setImage(PassRefPtr<StyleImage> image) { m_image = image; }
62     
63     const LengthBox& slices() const { return m_slices; }
64     void setSlices(const LengthBox& l) { m_slices = l; }
65
66     bool fill() const { return m_fill; }
67     void setFill(bool fill) { m_fill = fill; }
68
69     ENinePieceImageRule horizontalRule() const { return static_cast<ENinePieceImageRule>(m_horizontalRule); }
70     void setHorizontalRule(ENinePieceImageRule rule) { m_horizontalRule = rule; }
71     
72     ENinePieceImageRule verticalRule() const { return static_cast<ENinePieceImageRule>(m_verticalRule); }
73     void setVerticalRule(ENinePieceImageRule rule) { m_verticalRule = rule; }
74
75     void copySlicesFrom(const NinePieceImage& other)
76     {
77         m_slices = other.m_slices;
78         m_fill = other.m_fill;
79     }
80
81     void copyRepeatFrom(const NinePieceImage& other)
82     {
83         m_horizontalRule = other.m_horizontalRule;
84         m_verticalRule = other.m_verticalRule;
85     }
86
87 private:
88     RefPtr<StyleImage> m_image;
89     LengthBox m_slices;
90     bool m_fill : 1;
91     unsigned m_horizontalRule : 2; // ENinePieceImageRule
92     unsigned m_verticalRule : 2; // ENinePieceImageRule
93 };
94
95 } // namespace WebCore
96
97 #endif // NinePieceImage_h