IntSize ScrollbarThemeAura::buttonSize(const ScrollbarThemeClient& scrollbar)
{
    if (scrollbar.orientation() == VerticalScrollbar) {
        IntSize size = Platform::current()->themeEngine()->getSize(WebThemeEngine::PartScrollbarUpArrow);
        return IntSize(size.width(), scrollbar.height() < 2 * size.height() ? scrollbar.height() / 2 : size.height());
    }

    // HorizontalScrollbar
    IntSize size = Platform::current()->themeEngine()->getSize(WebThemeEngine::PartScrollbarLeftArrow);
    return IntSize(scrollbar.width() < 2 * size.width() ? scrollbar.width() / 2 : size.width(), size.height());
}
Esempio n. 2
0
IntRect ScrollbarThemeAura::trackRect(const ScrollbarThemeClient& scrollbar,
                                      bool) {
  // The track occupies all space between the two buttons.
  IntSize bs = buttonSize(scrollbar);
  if (scrollbar.orientation() == HorizontalScrollbar) {
    if (scrollbar.width() <= 2 * bs.width())
      return IntRect();
    return IntRect(scrollbar.x() + bs.width(), scrollbar.y(),
                   scrollbar.width() - 2 * bs.width(), scrollbar.height());
  }
  if (scrollbar.height() <= 2 * bs.height())
    return IntRect();
  return IntRect(scrollbar.x(), scrollbar.y() + bs.height(), scrollbar.width(),
                 scrollbar.height() - 2 * bs.height());
}
Esempio n. 3
0
void ScrollbarTheme::splitTrack(const ScrollbarThemeClient& scrollbar,
                                const IntRect& unconstrainedTrackRect,
                                IntRect& beforeThumbRect,
                                IntRect& thumbRect,
                                IntRect& afterThumbRect) {
  // This function won't even get called unless we're big enough to have some
  // combination of these three rects where at least one of them is non-empty.
  IntRect trackRect =
      constrainTrackRectToTrackPieces(scrollbar, unconstrainedTrackRect);
  int thumbPos = thumbPosition(scrollbar);
  if (scrollbar.orientation() == HorizontalScrollbar) {
    thumbRect = IntRect(trackRect.x() + thumbPos, trackRect.y(),
                        thumbLength(scrollbar), scrollbar.height());
    beforeThumbRect =
        IntRect(trackRect.x(), trackRect.y(), thumbPos + thumbRect.width() / 2,
                trackRect.height());
    afterThumbRect =
        IntRect(trackRect.x() + beforeThumbRect.width(), trackRect.y(),
                trackRect.maxX() - beforeThumbRect.maxX(), trackRect.height());
  } else {
    thumbRect = IntRect(trackRect.x(), trackRect.y() + thumbPos,
                        scrollbar.width(), thumbLength(scrollbar));
    beforeThumbRect = IntRect(trackRect.x(), trackRect.y(), trackRect.width(),
                              thumbPos + thumbRect.height() / 2);
    afterThumbRect =
        IntRect(trackRect.x(), trackRect.y() + beforeThumbRect.height(),
                trackRect.width(), trackRect.maxY() - beforeThumbRect.maxY());
  }
}
Esempio n. 4
0
IntSize ScrollbarThemeAura::buttonSize(const ScrollbarThemeClient& scrollbar) {
  if (!hasScrollbarButtons(scrollbar.orientation()))
    return IntSize(0, 0);

  if (scrollbar.orientation() == VerticalScrollbar) {
    int squareSize = scrollbar.width();
    return IntSize(squareSize, scrollbar.height() < 2 * squareSize
                                   ? scrollbar.height() / 2
                                   : squareSize);
  }

  // HorizontalScrollbar
  int squareSize = scrollbar.height();
  return IntSize(
      scrollbar.width() < 2 * squareSize ? scrollbar.width() / 2 : squareSize,
      squareSize);
}
Esempio n. 5
0
IntRect ScrollbarThemeAura::forwardButtonRect(
    const ScrollbarThemeClient& scrollbar,
    ScrollbarPart part,
    bool) {
  // Windows and Linux just have single arrows.
  if (part == ForwardButtonStartPart)
    return IntRect();

  IntSize size = buttonSize(scrollbar);
  int x, y;
  if (scrollbar.orientation() == HorizontalScrollbar) {
    x = scrollbar.x() + scrollbar.width() - size.width();
    y = scrollbar.y();
  } else {
    x = scrollbar.x();
    y = scrollbar.y() + scrollbar.height() - size.height();
  }
  return IntRect(x, y, size.width(), size.height());
}