#ifndef RenderListBox_h
#define RenderListBox_h
#include "RenderBlock.h"
#include "ScrollBar.h"
namespace WebCore {
class HTMLSelectElement;
class RenderListBox : public RenderBlock, private ScrollbarClient {
public:
RenderListBox(HTMLSelectElement*);
~RenderListBox();
virtual const char* renderName() const { return "RenderListBox"; }
virtual bool isListBox() const { return true; }
virtual void setStyle(RenderStyle*);
virtual void updateFromElement();
virtual bool canHaveChildren() const { return false; }
virtual bool hasControlClip() const { return true; }
virtual void paintObject(PaintInfo&, int tx, int ty);
virtual IntRect controlClipRect(int tx, int ty) const;
virtual bool isPointInOverflowControl(HitTestResult&, int x, int y, int tx, int ty);
virtual bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1.0f);
virtual bool isScrollable() const;
virtual void calcPrefWidths();
virtual short baselinePosition(bool firstLine, bool isRootLineBox) const;
virtual void calcHeight();
virtual void layout();
void selectionChanged();
void setOptionsChanged(bool changed) { m_optionsChanged = changed; }
int listIndexAtOffset(int x, int y);
bool scrollToRevealElementAtListIndex(int index);
virtual bool shouldAutoscroll() const { return true; }
virtual void autoscroll();
virtual void stopAutoscroll();
virtual int verticalScrollbarWidth() const;
virtual int scrollLeft() const;
virtual int scrollTop() const;
virtual int scrollWidth() const;
virtual int scrollHeight() const;
virtual void setScrollLeft(int);
virtual void setScrollTop(int);
private:
virtual void valueChanged(Scrollbar*);
virtual IntRect windowClipRect() const;
virtual bool isActive() const;
int itemHeight() const;
void valueChanged(unsigned listIndex);
int size() const;
int numVisibleItems() const;
int numItems() const;
int listHeight() const;
IntRect itemBoundingBoxRect(int tx, int ty, int index);
void paintScrollbar(PaintInfo&);
void paintItemForeground(PaintInfo&, int tx, int ty, int listIndex);
void paintItemBackground(PaintInfo&, int tx, int ty, int listIndex);
bool listIndexIsVisible(int index);
void scrollToRevealSelection();
bool m_optionsChanged;
bool m_scrollToRevealSelectionAfterLayout;
bool m_inAutoscroll;
int m_optionsWidth;
int m_indexOffset;
RefPtr<Scrollbar> m_vBar;
};
}
#endif // RenderListBox_h