bool GestureEventListener::MoveDistanceIsLarge() { const ParentLayerPoint start = mLastTouchInput.mTouches[0].mLocalScreenPoint; ParentLayerPoint delta = start - mTouchStartPosition; ScreenPoint screenDelta = mAsyncPanZoomController->ToScreenCoordinates(delta, start); return (screenDelta.Length() > AsyncPanZoomController::GetTouchStartTolerance()); }
void Axis::UpdateWithTouchAtDevicePoint(ScreenCoord aPos, uint32_t aTimestampMs) { // mVelocityQueue is controller-thread only AsyncPanZoomController::AssertOnControllerThread(); if (aTimestampMs == mPosTimeMs) { // This could be a duplicate event, or it could be a legitimate event // on some platforms that generate events really fast. As a compromise // update mPos so we don't run into problems like bug 1042734, even though // that means the velocity will be stale. Better than doing a divide-by-zero. mPos = aPos; return; } float newVelocity = mAxisLocked ? 0.0f : (float)(mPos - aPos) / (float)(aTimestampMs - mPosTimeMs); if (gfxPrefs::APZMaxVelocity() > 0.0f) { ScreenPoint maxVelocity = MakePoint(gfxPrefs::APZMaxVelocity() * APZCTreeManager::GetDPI()); mAsyncPanZoomController->ToLocalScreenCoordinates(&maxVelocity, mAsyncPanZoomController->PanStart()); newVelocity = std::min(newVelocity, maxVelocity.Length()); } mVelocity = newVelocity; mPos = aPos; mPosTimeMs = aTimestampMs; // Limit queue size pased on pref mVelocityQueue.AppendElement(std::make_pair(aTimestampMs, mVelocity)); if (mVelocityQueue.Length() > gfxPrefs::APZMaxVelocityQueueSize()) { mVelocityQueue.RemoveElementAt(0); } }
void MapProjectionProxy::worldToScreen(ScreenPoint& point, const WGS84Coordinate& coord) const { MC2Coordinate mc2(coord); float x, y, z; m_renderer->transformf(mc2.lon, mc2.lat, &x, &y, &z); point.getX() = static_cast<int>(x); point.getY() = static_cast<int>(y); }
void AndroidGeckoLayerClient::SyncFrameMetrics(const ScreenPoint& aScrollOffset, float aZoom, const CSSRect& aCssPageRect, bool aLayersUpdated, const CSSRect& aDisplayPort, const CSSToLayerScale& aDisplayResolution, bool aIsFirstPaint, LayerMargin& aFixedLayerMargins, ScreenPoint& aOffset) { NS_ASSERTION(!isNull(), "SyncFrameMetrics called on null layer client!"); JNIEnv *env = GetJNIForThread(); // this is called on the compositor thread if (!env) return; AutoLocalJNIFrame jniFrame(env); // convert the displayport rect from scroll-relative CSS pixels to document-relative device pixels LayerRect dpUnrounded = aDisplayPort * aDisplayResolution; dpUnrounded += LayerPoint::FromUnknownPoint(aScrollOffset.ToUnknownPoint()); LayerIntRect dp = gfx::RoundedToInt(dpUnrounded); jobject viewTransformJObj = env->CallObjectMethod(wrapped_obj, jSyncFrameMetricsMethod, aScrollOffset.x, aScrollOffset.y, aZoom, aCssPageRect.x, aCssPageRect.y, aCssPageRect.XMost(), aCssPageRect.YMost(), aLayersUpdated, dp.x, dp.y, dp.width, dp.height, aDisplayResolution.scale, aIsFirstPaint); if (jniFrame.CheckForException()) return; NS_ABORT_IF_FALSE(viewTransformJObj, "No view transform object!"); AndroidViewTransform viewTransform; viewTransform.Init(viewTransformJObj); viewTransform.GetFixedLayerMargins(env, aFixedLayerMargins); aOffset.x = viewTransform.GetOffsetX(env); aOffset.y = viewTransform.GetOffsetY(env); }