#ifndef WebScrollBar_h
#define WebScrollBar_h
#include "WebKit.h"
#include <wtf/RefPtr.h>
#include <wtf/OwnPtr.h>
#include <WebCore/COMPtr.h>
#include <WebCore/Scrollbar.h>
#include <WebCore/ScrollableArea.h>
namespace WebCore {
class Scrollbar;
}
class WebScrollBar : public IWebScrollBarPrivate, WebCore::ScrollableArea {
public:
static WebScrollBar* createInstance();
protected:
WebScrollBar();
~WebScrollBar();
public:
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef(void);
virtual ULONG STDMETHODCALLTYPE Release(void);
virtual HRESULT STDMETHODCALLTYPE init(
IWebScrollBarDelegatePrivate* delegate,
OLE_HANDLE containingWindow,
WebScrollBarOrientation orientation,
WebScrollBarControlSize controlSize);
virtual HRESULT STDMETHODCALLTYPE setEnabled(
BOOL enabled);
virtual HRESULT STDMETHODCALLTYPE setSteps(
int lineStep,
int pageStep);
virtual HRESULT STDMETHODCALLTYPE setProportion(
int visibleSize,
int totalSize);
virtual HRESULT STDMETHODCALLTYPE setRect(
RECT bounds);
virtual HRESULT STDMETHODCALLTYPE setValue(
int value);
virtual HRESULT STDMETHODCALLTYPE value(
int* value);
virtual HRESULT STDMETHODCALLTYPE paint(
HDC dc,
RECT damageRect);
virtual HRESULT STDMETHODCALLTYPE frameRect(
RECT* bounds);
virtual HRESULT STDMETHODCALLTYPE width(
int* w);
virtual HRESULT STDMETHODCALLTYPE height(
int* h);
virtual HRESULT STDMETHODCALLTYPE requestedWidth(
int* w);
virtual HRESULT STDMETHODCALLTYPE requestedHeight(
int* h);
virtual HRESULT STDMETHODCALLTYPE handleMouseEvent(
OLE_HANDLE window,
UINT msg,
WPARAM wParam,
LPARAM lParam);
virtual HRESULT STDMETHODCALLTYPE scroll(
WebScrollDirection direction,
WebScrollGranularity granularity,
float multiplier);
protected:
virtual int scrollSize(WebCore::ScrollbarOrientation) const;
virtual int scrollPosition(WebCore::Scrollbar*) const;
virtual void setScrollOffset(const WebCore::IntPoint&);
virtual void invalidateScrollbarRect(WebCore::Scrollbar*, const WebCore::IntRect&);
virtual void invalidateScrollCornerRect(const WebCore::IntRect&) { }
virtual WebCore::ScrollableArea* enclosingScrollableArea() const { return 0; }
virtual bool isActive() const { return true; }
virtual bool isScrollCornerVisible() const { return false; }
virtual WebCore::IntRect scrollCornerRect() const { return WebCore::IntRect(); }
virtual WebCore::Scrollbar* horizontalScrollbar() const;
virtual WebCore::Scrollbar* verticalScrollbar() const;
ULONG m_refCount;
HWND m_containingWindow;
int m_currentPosition;
RefPtr<WebCore::Scrollbar> m_scrollBar;
COMPtr<IWebScrollBarDelegatePrivate> m_delegate;
};
#endif