int ScrollbarTheme::thumbLength(ScrollbarThemeClient* scrollbar) { if (!scrollbar->enabled()) return 0; // It is safe to compute the overhang by adding the result from the main // thread overscroll mode (first) and then adding the result from compositor // thread overscroll (second) because the modes are mutually exclusive (and // determining which mode is in use here will require lots of temporary // plumbing, and the main thread mode is to be deleted). float overhang = 0; if (scrollbar->currentPos() < 0) overhang = -scrollbar->currentPos(); else if (scrollbar->visibleSize() + scrollbar->currentPos() > scrollbar->totalSize()) overhang = scrollbar->currentPos() + scrollbar->visibleSize() - scrollbar->totalSize(); overhang += fabsf(scrollbar->elasticOverscroll()); float proportion = 0.0f; float totalSize = usedTotalSize(scrollbar); if (totalSize > 0.0f) { proportion = (scrollbar->visibleSize() - overhang) / totalSize; } int trackLen = trackLength(scrollbar); int length = round(proportion * trackLen); length = std::max(length, minimumThumbLength(scrollbar)); if (length > trackLen) length = 0; // Once the thumb is below the track length, it just goes away (to make more room for the track). return length; }
int Scrollbar::thumbLength() { int trackLen = trackLength(); if (!totalSize()) return trackLen; float proportion = static_cast<float>(visibleSize()) / totalSize(); int length = round(proportion * trackLen); length = std::min(std::max(length, minimumThumbLength()), trackLen); return length; }
int ScrollbarThemeOverlay::thumbLength(ScrollbarThemeClient* scrollbar) { int trackLen = trackLength(scrollbar); if (!scrollbar->totalSize()) return trackLen; float proportion = static_cast<float>(scrollbar->visibleSize()) / scrollbar->totalSize(); int length = round(proportion * trackLen); length = std::min(std::max(length, minimumThumbLength(scrollbar)), trackLen); return length; }
int ScrollbarThemeComposite::thumbLength(Scrollbar* scrollbar) { if (!scrollbar->enabled()) return 0; float proportion = (float)scrollbar->visibleSize() / scrollbar->totalSize(); int trackLen = trackLength(scrollbar); int length = proportion * trackLen; length = max(length, minimumThumbLength(scrollbar)); if (length > trackLen) length = 0; // Once the thumb is below the track length, it just goes away (to make more room for the track). return length; }
int ScrollbarThemeOverlay::thumbLength(const ScrollbarThemeClient& scrollbar) { int trackLen = trackLength(scrollbar); if (!scrollbar.totalSize()) return trackLen; float proportion = static_cast<float>(scrollbar.visibleSize()) / scrollbar.totalSize(); int length = round(proportion * trackLen); int minLen = std::min(minimumThumbLength(scrollbar), trackLen); length = clampTo(length, minLen, trackLen); return length; }
int ScrollbarThemeComposite::thumbLength(ScrollbarThemeClient* scrollbar) { if (!scrollbar->enabled()) return 0; float proportion = scrollbar->visibleSize() / usedTotalSize(scrollbar); int trackLen = trackLength(scrollbar); #if PLATFORM(MAC) && !PLATFORM(CHROMIUM) int length = round(proportion * trackLen); #else int length = proportion * trackLen; #endif length = max(length, minimumThumbLength(scrollbar)); if (length > trackLen) length = 0; // Once the thumb is below the track length, it just goes away (to make more room for the track). return length; }
int ScrollbarTheme::thumbLength(const ScrollbarThemeClient* scrollbar) { if (!scrollbar->enabled()) return 0; float overhang = fabsf(scrollbar->elasticOverscroll()); float proportion = 0.0f; float totalSize = scrollbar->totalSize(); if (totalSize > 0.0f) { proportion = (scrollbar->visibleSize() - overhang) / totalSize; } int trackLen = trackLength(scrollbar); int length = round(proportion * trackLen); length = std::max(length, minimumThumbLength(scrollbar)); if (length > trackLen) length = 0; // Once the thumb is below the track length, it just goes away (to make more room for the track). return length; }
int ScrollbarTheme::thumbLength(ScrollbarThemeClient* scrollbar) { if (!scrollbar->enabled()) return 0; float overhang = 0; if (scrollbar->currentPos() < 0) overhang = -scrollbar->currentPos(); else if (scrollbar->visibleSize() + scrollbar->currentPos() > scrollbar->totalSize()) overhang = scrollbar->currentPos() + scrollbar->visibleSize() - scrollbar->totalSize(); float proportion = (scrollbar->visibleSize() - overhang) / usedTotalSize(scrollbar); int trackLen = trackLength(scrollbar); int length = round(proportion * trackLen); length = std::max(length, minimumThumbLength(scrollbar)); if (length > trackLen) length = 0; // Once the thumb is below the track length, it just goes away (to make more room for the track). return length; }