static bool TryingToDoPerpendicularJump(const WebCore::IntRect& rect, const WebCore::IntRect& previousRect, EA::WebKit::JumpDirection direction) { if (direction == EA::WebKit::JumpLeft || direction == EA::WebKit::JumpRight) { if (rect.maxXMinYCorner().x() <= previousRect.maxXMinYCorner().x() && rect.minXMinYCorner().x() >= previousRect.minXMinYCorner().x()) { return true; } else { return false; } } else { if (rect.maxXMinYCorner().y() <= previousRect.maxXMinYCorner().y() && rect.maxXMaxYCorner().y() >= previousRect.maxXMaxYCorner().y()) { return true; } else { return false; } } }
static bool WouldBeTrappedInElement(const WebCore::IntRect& rect, const WebCore::IntPoint& point, EA::WebKit::JumpDirection direction) { // If we're not inside, don't worry if (rect.contains(point)) { typedef WebCore::IntPoint Vector2D; const WebCore::IntPoint centre = Average( rect.minXMaxYCorner(), rect.maxXMinYCorner() ); Vector2D pointToCentre = Subtract(centre,point); Vector2D forward; switch (direction) { // note these are 'backward case EA::WebKit::JumpUp: forward = Vector2D(0,-100); break; case EA::WebKit::JumpDown: forward = Vector2D(0,100); break; case EA::WebKit::JumpLeft: forward = Vector2D(-100,0); break; case EA::WebKit::JumpRight: forward = Vector2D(100,0); break; } // Basically, if the centre is behind us, don't jump there if (DotProduct(forward,pointToCentre) < 0) { return false; } else { /*printf("(%d,%d) Trapped Inside Element (%d,%d)->(%d,%d): forward=(%d,%d) pointToCentre=(%d,%d) dot=%d\n", point.x(), point.y(), rect.bottomLeft().x(), rect.bottomLeft().y(), rect.topRight().x(), rect.topRight().y(), forward.x(), forward.y(), pointToCentre.x(), pointToCentre.y(), DotProduct(forward,pointToCentre) );*/ return true; } } else { return false; } }