Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / rendering / style / NinePieceImage.cpp
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, 2013 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 #include "config.h"
25 #include "core/rendering/style/NinePieceImage.h"
26
27 namespace WebCore {
28
29 static DataRef<NinePieceImageData>& defaultData()
30 {
31     static DataRef<NinePieceImageData>* data = new DataRef<NinePieceImageData>;
32     if (!data->get())
33         data->init();
34     return *data;
35 }
36
37 NinePieceImage::NinePieceImage()
38     : m_data(defaultData())
39 {
40 }
41
42 NinePieceImage::NinePieceImage(PassRefPtr<StyleImage> image, LengthBox imageSlices, bool fill, const BorderImageLengthBox& borderSlices, const BorderImageLengthBox& outset, ENinePieceImageRule horizontalRule, ENinePieceImageRule verticalRule)
43 {
44     m_data.init();
45     m_data.access()->image = image;
46     m_data.access()->imageSlices = imageSlices;
47     m_data.access()->borderSlices = borderSlices;
48     m_data.access()->outset = outset;
49     m_data.access()->fill = fill;
50     m_data.access()->horizontalRule = horizontalRule;
51     m_data.access()->verticalRule = verticalRule;
52 }
53
54 NinePieceImageData::NinePieceImageData()
55     : fill(false)
56     , horizontalRule(StretchImageRule)
57     , verticalRule(StretchImageRule)
58     , image(nullptr)
59     , imageSlices(Length(100, Percent), Length(100, Percent), Length(100, Percent), Length(100, Percent))
60     , borderSlices(1.0, 1.0, 1.0, 1.0)
61     , outset(Length(0, Fixed), Length(0, Fixed), Length(0, Fixed), Length(0, Fixed))
62 {
63 }
64
65 NinePieceImageData::NinePieceImageData(const NinePieceImageData& other)
66     : RefCounted<NinePieceImageData>()
67     , fill(other.fill)
68     , horizontalRule(other.horizontalRule)
69     , verticalRule(other.verticalRule)
70     , image(other.image)
71     , imageSlices(other.imageSlices)
72     , borderSlices(other.borderSlices)
73     , outset(other.outset)
74 {
75 }
76
77 bool NinePieceImageData::operator==(const NinePieceImageData& other) const
78 {
79     return StyleImage::imagesEquivalent(image.get(), other.image.get())
80         && imageSlices == other.imageSlices
81         && fill == other.fill
82         && borderSlices == other.borderSlices
83         && outset == other.outset
84         && horizontalRule == other.horizontalRule
85         && verticalRule == other.verticalRule;
86 }
87
88 }