1// { dg-do compile } 2 3class IntSize { 4public: 5 IntSize(int width, int height) : m_width(width), m_height(height) { } 6 int m_width, m_height; 7}; 8class IntPoint { 9public: 10 IntPoint(int x, int y) : m_x(x), m_y(y) { } 11 int m_x, m_y; 12}; 13class IntRect { 14public: 15 IntRect(int x, int y, int width, int height) 16 : m_location(IntPoint(x, y)), m_size(IntSize(width, height)) { } 17 void intersect(const IntRect&); 18 IntPoint m_location; 19 IntSize m_size; 20}; 21inline IntRect intersection(const IntRect& a, const IntRect& b) { 22 IntRect c = a; 23 c.intersect(b); 24 return c; 25} 26class RenderObject { 27public: 28 int contentWidth() const { } 29 int contentHeight() const { } 30 virtual int xPos() const { } 31 virtual int yPos() const { } 32 virtual int paddingTop() const; 33 virtual int paddingLeft() const; 34 virtual int borderTop() const { } 35 virtual int borderLeft() const { } 36}; 37class RenderMenuList : public RenderObject { 38 virtual IntRect controlClipRect(int tx, int ty) const; 39 RenderObject* m_innerBlock; 40}; 41IntRect RenderMenuList::controlClipRect(int tx, int ty) const { 42 IntRect outerBox(tx + borderLeft() + paddingLeft(), 43 ty + borderTop() + paddingTop(), 44 contentWidth(), contentHeight()); 45 IntRect innerBox(tx + m_innerBlock->xPos() + m_innerBlock->paddingLeft(), 46 ty + m_innerBlock->yPos() + m_innerBlock->paddingTop(), 47 m_innerBlock->contentWidth(), 48 m_innerBlock->contentHeight()); 49 return intersection(outerBox, innerBox); 50} 51 52