blob: b3c828ffab26402e44de929353d1c0b3402a8b32 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ScrollableLayerAndroid_h
#define ScrollableLayerAndroid_h
#if USE(ACCELERATED_COMPOSITING)
#include "LayerAndroid.h"
namespace WebCore {
class ScrollableLayerAndroid : public LayerAndroid {
public:
ScrollableLayerAndroid(RenderLayer* owner)
: LayerAndroid(owner) {}
ScrollableLayerAndroid(const ScrollableLayerAndroid& layer)
: LayerAndroid(layer)
, m_scrollLimits(layer.m_scrollLimits) {}
ScrollableLayerAndroid(const LayerAndroid& layer)
: LayerAndroid(layer)
{
m_scrollLimits.setEmpty();
}
virtual ~ScrollableLayerAndroid() {};
virtual bool contentIsScrollable() const { return true; }
virtual LayerAndroid* copy() const { return new ScrollableLayerAndroid(*this); }
virtual SubclassType subclassType() const { return LayerAndroid::ScrollableLayer; }
// Scrolls to the given position in the layer.
// Returns whether or not any scrolling was required.
virtual bool scrollTo(int x, int y);
// Fills the rect with the current scroll offset and the maximum scroll offset.
// fLeft = scrollX
// fTop = scrollY
// fRight = maxScrollX
// fBottom = maxScrollY
virtual void getScrollRect(SkIRect*) const;
void setScrollLimits(float minX, float minY, float maxX, float maxY);
// Given a rect in the layer, scrolls to bring the rect into view. Uses a
// lazy approach, whereby we scroll as little as possible to bring the
// entire rect into view. If the size of the rect exceeds that of the
// visible area of the layer, we favor the top and left of the rect.
// Returns whether or not any scrolling was required.
bool scrollRectIntoView(const SkIRect&);
friend void android::serializeLayer(LayerAndroid* layer, SkWStream* stream);
friend LayerAndroid* android::deserializeLayer(int version, SkStream* stream);
protected:
void getScrollBounds(IntRect*) const;
// The position of the visible area of the layer, relative to the parent
// layer. This is fixed during scrolling. We acheive scrolling by modifying
// the position of the layer.
SkRect m_scrollLimits;
};
}
#endif // USE(ACCELERATED_COMPOSITING)
#endif // LayerAndroid_h