1/*
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "WKRenderLayer.h"
28
29#include "WKAPICast.h"
30#include "WebRenderLayer.h"
31
32using namespace WebCore;
33using namespace WebKit;
34
35WKTypeID WKRenderLayerGetTypeID()
36{
37    return toAPI(WebRenderLayer::APIType);
38}
39
40WKRenderObjectRef WKRenderLayerGetRenderer(WKRenderLayerRef renderLayerRef)
41{
42    return toAPI(toImpl(renderLayerRef)->renderer());
43}
44
45WKStringRef WKRenderLayerCopyRendererName(WKRenderLayerRef renderLayerRef)
46{
47    return toCopiedAPI(toImpl(renderLayerRef)->renderer()->name());
48}
49
50WKStringRef WKRenderLayerCopyElementTagName(WKRenderLayerRef renderLayerRef)
51{
52    WebRenderLayer* renderLayer = toImpl(renderLayerRef);
53    if (!renderLayer->renderer()->elementTagName().isNull())
54        return toCopiedAPI(renderLayer->renderer()->elementTagName());
55
56    return 0;
57}
58
59WKStringRef WKRenderLayerCopyElementID(WKRenderLayerRef renderLayerRef)
60{
61    WebRenderLayer* renderLayer = toImpl(renderLayerRef);
62    if (!renderLayer->renderer()->elementID().isNull())
63        return toCopiedAPI(renderLayer->renderer()->elementID());
64
65    return 0;
66}
67
68WKArrayRef WKRenderLayerGetElementClassNames(WKRenderLayerRef renderLayerRef)
69{
70    return toAPI(toImpl(renderLayerRef)->renderer()->elementClassNames());
71}
72
73WKRect WKRenderLayerGetAbsoluteBounds(WKRenderLayerRef renderLayerRef)
74{
75    IntRect bounds = toImpl(renderLayerRef)->absoluteBoundingBox();
76    return WKRectMake(bounds.x(), bounds.y(), bounds.width(), bounds.height());
77}
78
79bool WKRenderLayerIsClipping(WKRenderLayerRef renderLayerRef)
80{
81    return toImpl(renderLayerRef)->isClipping();
82}
83
84bool WKRenderLayerIsClipped(WKRenderLayerRef renderLayerRef)
85{
86    return toImpl(renderLayerRef)->isClipped();
87}
88
89bool WKRenderLayerIsReflection(WKRenderLayerRef renderLayerRef)
90{
91    return toImpl(renderLayerRef)->isReflection();
92}
93
94WKCompositingLayerType WKRenderLayerGetCompositingLayerType(WKRenderLayerRef renderLayerRef)
95{
96    switch (toImpl(renderLayerRef)->compositingLayerType()) {
97    case WebRenderLayer::None:
98        return kWKCompositingLayerTypeNone;
99    case WebRenderLayer::Normal:
100        return kWKCompositingLayerTypeNormal;
101    case WebRenderLayer::Tiled:
102        return kWKCompositingLayerTypeTiled;
103    case WebRenderLayer::Media:
104        return kWKCompositingLayerTypeMedia;
105    case WebRenderLayer::Container:
106        return kWKCompositingLayerTypeContainer;
107    }
108
109    ASSERT_NOT_REACHED();
110    return kWKCompositingLayerTypeNone;
111}
112
113WKArrayRef WKRenderLayerGetNegativeZOrderList(WKRenderLayerRef renderLayerRef)
114{
115    return toAPI(toImpl(renderLayerRef)->negativeZOrderList());
116}
117
118WKArrayRef WKRenderLayerGetNormalFlowList(WKRenderLayerRef renderLayerRef)
119{
120    return toAPI(toImpl(renderLayerRef)->normalFlowList());
121}
122
123WKArrayRef WKRenderLayerGetPositiveZOrderList(WKRenderLayerRef renderLayerRef)
124{
125    return toAPI(toImpl(renderLayerRef)->positiveZOrderList());
126}
127