/** * Returns the squared Euclidean distance between the given point and the nearest point inside * the bounds of the given rectangle. If the supplied point is inside the rectangle, the * distance will be zero. */ public static float pointRectDistanceSq (IRectangle r, IPoint p) { Point p2 = closestInteriorPoint(r, p); return Points.distanceSq(p.x(), p.y(), p2.x, p2.y); }
/** * Returns the squared Euclidean distance between the given point and the nearest point inside * the bounds of the given rectangle. If the supplied point is inside the rectangle, the * distance will be zero. */ public static float pointRectDistanceSq (IRectangle r, IPoint p) { Point p2 = closestInteriorPoint(r, p); return Points.distanceSq(p.x(), p.y(), p2.x, p2.y); }
@Override // from Transform public Point inverseTransform (IPoint p, Point into) { float x = p.x() - tx, y = p.y() - ty; float det = m00 * m11 - m01 * m10; if (Math.abs(det) == 0f) { // determinant is zero; matrix is not invertible throw new NoninvertibleTransformException(this.toString()); } float rdet = 1 / det; return into.set((x * m11 - y * m10) * rdet, (y * m00 - x * m01) * rdet); }
@Override // from Transform public Point inverseTransform (IPoint p, Point into) { float x = p.x() - tx, y = p.y() - ty; float det = m00 * m11 - m01 * m10; if (Math.abs(det) == 0f) { // determinant is zero; matrix is not invertible throw new NoninvertibleTransformException(this.toString()); } float rdet = 1 / det; return into.set((x * m11 - y * m10) * rdet, (y * m00 - x * m01) * rdet); }
/** Updates the position of the content to match the flicker. If force is set, then the * relevant values will be updated even if there was no change. */ protected void update (boolean force) { IPoint pos = flicker.position(); boolean dx = hrange.set(pos.x()), dy = vrange.set(pos.y()); if (dx || dy || force) { _clippable.setPosition(-pos.x(), -pos.y()); // now check the child elements for visibility if (!force) updateVisibility(); firePositionChange(); if (_bars != null) _bars.updatePosition(); } }
this.topLeft = new Point(this.centroid.x() - dl / 2, topLeft.y()); this.bottomRight = new Point(this.centroid.x() + dl / 2, bottomLeft.y()); this.topRight = new Point(this.centroid.x() + dl / 2, topLeft.y()); if (p.x() < bottomLeft.x() || p.x() > topRight.x()) return false; if (p.y() < bottomLeft.y() || p.y() > topRight.y()) return false; return true;
private Touch.Event[] parseMotionEvent (MotionEvent event, Touch.Event.Kind kind) { int actionType = event.getActionMasked(); boolean isChanged = (actionType == MotionEvent.ACTION_POINTER_UP || actionType == MotionEvent.ACTION_POINTER_DOWN); int changedIdx = isChanged ? event.getActionIndex() : 0; int count = event.getPointerCount(); Touch.Event[] touches = new Touch.Event[isChanged ? 1 : count]; double time = event.getEventTime(); int tidx = 0; for (int tt = 0; tt < count; tt++) { // if this is a pointer up/down, we only want the changed touch if (isChanged && tt != changedIdx) continue; IPoint xy = plat.graphics().transformTouch(event.getX(tt), event.getY(tt)); float pressure = event.getPressure(tt); float size = event.getSize(tt); int id = event.getPointerId(tt)+1; touches[tidx++] = new Touch.Event(0, time, xy.x(), xy.y(), kind, id, pressure, size); } return touches; }
/** * Performs the actual parsing of the MotionEvent event. * * @param event The MotionEvent to process * @param preventDefault Shared preventDefault state among returned {@link AndroidTouchEventImpl} * @return Processed array of {@link AndroidTouchEventImpl}s which share a preventDefault state. */ private Touch.Event.Impl[] parseMotionEvent(MotionEvent event, Events.Flags flags) { int eventPointerCount = event.getPointerCount(); Touch.Event.Impl[] touches = new Touch.Event.Impl[eventPointerCount]; double time = event.getEventTime(); float pressure, size; int id; for (int t = 0; t < eventPointerCount; t++) { int pointerIndex = t; IPoint xy = platform.graphics().transformTouch( event.getX(pointerIndex), event.getY(pointerIndex)); pressure = event.getPressure(pointerIndex); size = event.getSize(pointerIndex); id = event.getPointerId(pointerIndex); touches[t] = new Touch.Event.Impl(flags, time, xy.x(), xy.y(), id, pressure, size); } return touches; } }
float locX = kf.loc.x(); float locY = kf.loc.y(); float scaleX = kf.scale.x(); float scaleY = kf.scale.y(); float skewX = kf.skew.x(); float skewY = kf.skew.y(); float alpha = kf.alpha; locX += (nextKf.loc.x()-locX) * interp; locY += (nextKf.loc.y()-locY) * interp; scaleX += (nextKf.scale.x()-scaleX) * interp; scaleY += (nextKf.scale.y()-scaleY) * interp; skewX += (nextKf.skew.x()-skewX) * interp; skewY += (nextKf.skew.y()-skewY) * interp; alpha += (nextKf.alpha-alpha) * interp; float m11 = cosX * scaleY; content.transform().setTransform(m00, m01, m10, m11, locX, locY); content.setOrigin(kf.pivot.x(), kf.pivot.y());
/** * Performs the actual parsing of the MotionEvent event. * * @param event The MotionEvent to process * @param preventDefault Shared preventDefault state among returned {@link AndroidTouchEventImpl} * @return Processed array of {@link AndroidTouchEventImpl}s which share a preventDefault state. */ private Touch.Event.Impl[] parseMotionEvent(MotionEvent event, Events.Flags flags) { int eventPointerCount = event.getPointerCount(); Touch.Event.Impl[] touches = new Touch.Event.Impl[eventPointerCount]; double time = event.getEventTime(); float pressure, size; int id; for (int t = 0; t < eventPointerCount; t++) { int pointerIndex = t; IPoint xy = platform.graphics().transformTouch( event.getX(pointerIndex), event.getY(pointerIndex)); pressure = event.getPressure(pointerIndex); size = event.getSize(pointerIndex); id = event.getPointerId(pointerIndex); touches[t] = new Touch.Event.Impl(flags, time, xy.x(), xy.y(), id, pressure, size); } return touches; } }
/** * Computes the point inside the bounds of the rectangle that's closest to the given point, * writing the result into {@code out}. * @return {@code out} for call chaining convenience. */ public static Point closestInteriorPoint (IRectangle r, IPoint p, Point out) { out.set(MathUtil.clamp(p.x(), r.minX(), r.maxX()), MathUtil.clamp(p.y(), r.minY(), r.maxY())); return out; }