void ItemBox::setViewOffset(const IntPoint& _value) { if (mAlignVert) { if (mContentSize.height <= 0) return; int offset = _value.top; if (mContentSize.height <= _getClientWidget()->getHeight()) offset = 0; else if (offset >= mContentSize.height - _getClientWidget()->getHeight()) offset = mContentSize.height - _getClientWidget()->getHeight(); else if (offset < 0) offset = 0; if (mContentPosition.top == offset) return; // сбрасываем старую подсветку // так как при прокрутке, мышь может находиться над окном resetCurrentActiveItem(); mContentPosition.top = offset; } else { if (mContentSize.width <= 0) return; int offset = _value.left; if (mContentSize.width <= _getClientWidget()->getWidth()) offset = 0; else if (offset >= mContentSize.width - _getClientWidget()->getWidth()) offset = mContentSize.width - _getClientWidget()->getWidth(); else if (offset < 0) offset = 0; if (mContentPosition.left == offset) return; // сбрасываем старую подсветку // так как при прокрутке, мышь может находиться над окном resetCurrentActiveItem(); mContentPosition.left = offset; } setContentPosition(mContentPosition); // заново ищем и подсвечиваем айтем if (!mNeedDrop) findCurrentActiveItem(); if (nullptr != mVScroll) mVScroll->setScrollPosition(mContentPosition.top); if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left); }
void WebView::pageDidRequestScroll(const IntPoint& position) { FloatPoint uiPosition(position); setContentPosition(uiPosition); m_client.didChangeContentsPosition(this, position); }
void ListCtrl::notifyMouseWheel(Widget* _sender, int _rel) { if (mContentSize.height <= 0) return; int offset = mContentPosition.top; if (_rel < 0) offset += mScrollViewPage; else offset -= mScrollViewPage; if (mContentSize.height <= _getClientWidget()->getHeight()) return; if (offset >= mContentSize.height - _getClientWidget()->getHeight()) offset = mContentSize.height - _getClientWidget()->getHeight(); else if (offset < 0) offset = 0; if (mContentPosition.top == offset) return; // сбрасываем старую подсветку // так как при прокрутке, мышь может находиться над окном resetCurrentActiveItem(); mContentPosition.top = offset; setContentPosition(mContentPosition); // заново ищем и подсвечиваем айтем if (!mNeedDrop) findCurrentActiveItem(); if (nullptr != mVScroll) mVScroll->setScrollPosition(mContentPosition.top); if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left); }
void ItemBox::notifyScrollChangePosition(ScrollBar* _sender, size_t _index) { if (_sender == mVScroll) { mContentPosition.top = (int)_index; } else if (_sender == mHScroll) { mContentPosition.left = (int)_index; } setContentPosition(mContentPosition); }
void ListCtrl::notifyScrollChangePosition(VScroll* _sender, size_t _index) { if (_sender == mVScroll) { mContentPosition.top = (int)_index; } else if (_sender == mHScroll) { mContentPosition.left = (int)_index; } setContentPosition(mContentPosition); }
void WebViewNix::didRenderFrame(const WebCore::IntSize& contentsSize, const WebCore::IntRect& coveredRect) { m_duringFrameRendering = false; if (m_pendingScaleOrPositionChange) { m_pendingScaleOrPositionChange = false; if (m_scaleAfterTransition != m_contentScaleFactor) m_contentScaleFactor = m_scaleAfterTransition; if (m_contentPosition != m_contentPositionAfterTransition) setContentPosition(m_contentPositionAfterTransition); } if (m_adjustScaleAfterFirstMainFrameRender) { m_adjustScaleAfterFirstMainFrameRender = false; adjustScaleToFitContents(); } WebView::didRenderFrame(contentsSize, coveredRect); }
void ScrollViewBase::updateScrollPosition() { // размер контекста IntSize contentSize = getContentSize(); // текущее смещение контекста IntPoint contentPoint = getContentPosition(); // расчетное смещение IntPoint offset = contentPoint; IntSize viewSize = getViewSize(); Align align = getContentAlign(); if (contentSize.width > viewSize.width) { // максимальный выход влево if ((offset.left + viewSize.width) > contentSize.width) { offset.left = contentSize.width - viewSize.width; } // максимальный выход вправо else if (offset.left < 0) { offset.left = 0; } } else { if (align.isLeft()) { offset.left = 0; } else if (align.isRight()) { offset.left = contentSize.width - viewSize.width; } else { offset.left = (contentSize.width - viewSize.width) / 2; } } if (contentSize.height > viewSize.height) { // максимальный выход вверх if ((offset.top + viewSize.height) > contentSize.height) { offset.top = contentSize.height - viewSize.height; } // максимальный выход вниз else if (offset.top < 0) { offset.top = 0; } } else { if (align.isTop()) { offset.top = 0; } else if (align.isBottom()) { offset.top = contentSize.height - viewSize.height; } else { offset.top = (contentSize.height - viewSize.height) / 2; } } if (offset != contentPoint) { if (nullptr != mVScroll) mVScroll->setScrollPosition(offset.top); if (nullptr != mHScroll) mHScroll->setScrollPosition(offset.left); setContentPosition(offset); } }
void WebView::didCommitLoadForMainFrame(const String&, bool) { setContentPosition(WebCore::FloatPoint()); m_contentsSize = IntSize(); }