int RenderMarquee::computePosition(EMarqueeDirection dir, bool stopAtContentEdge) { RenderBox* box = m_layer->renderBox(); ASSERT(box); RenderStyle* s = box->style(); if (isHorizontal()) { bool ltr = s->isLeftToRightDirection(); LayoutUnit clientWidth = box->clientWidth(); LayoutUnit contentWidth = ltr ? box->maxPreferredLogicalWidth() : box->minPreferredLogicalWidth(); if (ltr) contentWidth += (box->paddingRight() - box->borderLeft()); else { contentWidth = box->width() - contentWidth; contentWidth += (box->paddingLeft() - box->borderRight()); } if (dir == MRIGHT) { if (stopAtContentEdge) return max<LayoutUnit>(0, ltr ? (contentWidth - clientWidth) : (clientWidth - contentWidth)); else return ltr ? contentWidth : clientWidth; } else { if (stopAtContentEdge) return min<LayoutUnit>(0, ltr ? (contentWidth - clientWidth) : (clientWidth - contentWidth)); else return ltr ? -clientWidth : -contentWidth; } } else { int contentHeight = box->layoutOverflowRect().maxY() - box->borderTop() + box->paddingBottom(); int clientHeight = box->clientHeight(); if (dir == MUP) { if (stopAtContentEdge) return min(contentHeight - clientHeight, 0); else return -clientHeight; } else { if (stopAtContentEdge) return max(contentHeight - clientHeight, 0); else return contentHeight; } } }