/* * Draw the scroll box */ void CNOutBarCtrl::drawScroll(CDC *pDC, int i, BOOL pressed) { CRect rc; getScrollRect(rc, i); int state = (i == SCROLL_DIR_UP ? DFCS_SCROLLUP : DFCS_SCROLLDOWN); if (pressed) state |= DFCS_PUSHED; pDC->DrawFrameControl(rc, DFC_SCROLL, state); }
/* * Return the current object under the certain point */ HIT CNOutBarCtrl::hitTest(const CPoint &pt) { int obj = HT_NONE; int index = -1; CRect rcClient, rc; GetClientRect(rcClient); getInsideRect(rc); if (!rc.PtInRect(pt)) { if (pt.y >= 0 && pt.y < rc.top) { obj = HT_FOLDER; index = (pt.y - 1) / FOLDER_HEIGHT; } else if (pt.y > rc.bottom && pt.y < rcClient.bottom - 1) { obj = HT_FOLDER; index = (pt.y - rc.bottom) / FOLDER_HEIGHT + selFolder + 1; } } else { for (int i = 0; i < 2; i++) { if (canScroll(i)) { CRect rcScroll; getScrollRect(rcScroll, i); if (rcScroll.PtInRect(pt)) return MAKEHIT(HT_SCROLL, i); } } if (largeIconView) { int offset = (rc.Width() - LARGE_ICON_W) / 2; if (pt.x >= rc.left + offset && pt.x <= rc.right - offset) { int y = pt.y - rc.top; offset = y % LARGE_ITEM_H - ICON_OFFSET; if (offset >= 0 && offset <= LARGE_ICON_H) { int i = y / LARGE_ITEM_H + scrollPos(); if (i <= getMaxVisibleItem()) { obj = HT_ITEM; index = i; } } } } else if (pt.x < SMALL_ICON_W + 32) { int i = (pt.y - rc.top) / SMALL_ITEM_H + scrollPos(); if (i <= getMaxVisibleItem()) { obj = HT_ITEM; index = i; } } } return MAKEHIT(obj, index); }
bool ScrollableLayerAndroid::scrollTo(int x, int y) { SkIRect scrollBounds; getScrollRect(&scrollBounds); if (!scrollBounds.fRight && !scrollBounds.fBottom) return false; SkScalar newX = SkScalarPin(x, 0, scrollBounds.fRight); SkScalar newY = SkScalarPin(y, 0, scrollBounds.fBottom); // Check for no change. if (newX == scrollBounds.fLeft && newY == scrollBounds.fTop) return false; setPosition(m_scrollLimits.fLeft - newX, m_scrollLimits.fTop - newY); return true; }