summaryrefslogtreecommitdiff
path: root/ios/shared/ios_sharedlo/objective_c/gestures/MLOGestureLimiter.m
diff options
context:
space:
mode:
Diffstat (limited to 'ios/shared/ios_sharedlo/objective_c/gestures/MLOGestureLimiter.m')
-rw-r--r--ios/shared/ios_sharedlo/objective_c/gestures/MLOGestureLimiter.m269
1 files changed, 0 insertions, 269 deletions
diff --git a/ios/shared/ios_sharedlo/objective_c/gestures/MLOGestureLimiter.m b/ios/shared/ios_sharedlo/objective_c/gestures/MLOGestureLimiter.m
deleted file mode 100644
index c6da14d919a7..000000000000
--- a/ios/shared/ios_sharedlo/objective_c/gestures/MLOGestureLimiter.m
+++ /dev/null
@@ -1,269 +0,0 @@
-// -*- Mode: ObjC; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-//
-// This file is part of the LibreOffice project.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this
-// file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-#import "MLOGestureLimiter.h"
-#import "MLOGestureEngine_Impl.h"
-#import "MLOMainViewController_Friend.h"
-#import "MLOScrollerData.h"
-#import "MLOScrollerViewController.h"
-#import "MLORenderManager_Impl.h"
-#import "mlo_utils.h"
-#import "mlo_uno.h"
-
-@interface MLOGestureLimiter ()
-@property MLOGestureEngine * engine;
-@property MLOMainViewController * mainViewController;
-@property CGFloat actualZoom;
-@property CGFloat actualPixelToLogicScale;
-@property CGSize halfViewSizeInLogic;
-@property CGPoint viewCenterInLogic;
-@property BOOL didCreateViewCenterInLogic;
-@property CGFloat initialPinchZoom;
-@property CGFloat previousPinchScale;
-@property CGFloat previousScaleSentToLibreOffice;
-@end
-
-static const CGFloat DELTA_SCALE_ZOOM_IN_THRESHOLD=1.5f,
- DELTA_SCALE_ZOOM_OUT_THRESHOLD=0.7f,
- MIN_ZOOM_FOR_HORIZONAL_PAN = 133.0f;
-
-
-@implementation MLOGestureLimiter
-
--(CGFloat) zoom{
- return self.actualZoom;
-}
--(id) initWithGestureEngine:(MLOGestureEngine *) engine{
-
- self = [self init];
- if(self){
- self.engine= engine;
- self.mainViewController = nil;
- }
- return self;
-}
-
--(void) showLibreOffice{
- self.mainViewController = _engine.mainViewController;
- [self resetLocationMetrics];
-}
-
--(NSString *)azimuthToString:(CGFloat) delta direction:(MLOPixelDeltaDirection) direction{
- if(delta==0){
- return @"N/A";
- }
- switch (direction) {
- case DELTA_X:
- if(delta < 0.0f) {
- return @"swipe LEFT (scroll right)";
- }
- return @"swipe RIGHT (scroll left)";
-
- case DELTA_Y:
- if(delta < 0.0f){
-
- return @"swipe UP (scroll down)";
- }
- return @"swipe DOWN (scroll up)";
- }
-}
-
--(void)logPanRawDeltaX:(NSInteger) rawDeltaX rawDeltaY:(NSInteger) rawDeltaY limitedDeltaX:(NSInteger) limitedDeltaX limitedDeltaY:(NSInteger) limitedDeltaY{
- NSLog(@"PAN %@ %@: limited:(%d,%d) raw:(%d,%d) center:(%d,%d) viewSize:(%d,%d) logicSize:(%d,%d)",
- [self azimuthToString:rawDeltaX direction:DELTA_X],
- [self azimuthToString:rawDeltaY direction:DELTA_Y],
- limitedDeltaX,
- limitedDeltaY,
- rawDeltaX,
- rawDeltaY,
- (NSInteger)self.viewCenterInLogic.x,
- (NSInteger)self.viewCenterInLogic.y,
- (NSInteger)self.halfViewSizeInLogic.width *2,
- (NSInteger)self.halfViewSizeInLogic.height *2,
- (NSInteger)self.documentSizeInLogic.width,
- (NSInteger)self.documentSizeInLogic.height);
-}
-
-
--(CGFloat)limitDelta:(CGFloat) delta direction:(MLOPixelDeltaDirection) direction{
-
- if(delta==0){
- return 0;
- }
- CGFloat deltaInLogic = [self pixelsToLogic:delta];
-
- CGFloat limit = [self limitForRawDelta:deltaInLogic direction:direction];
-
- if(deltaInLogic > 0){
- deltaInLogic = min(limit,deltaInLogic);
- }else{
- deltaInLogic = max(limit,deltaInLogic);
- }
-
- [self updateCenterInLogic:deltaInLogic direction:direction];
-
- return [self logicToPixels:deltaInLogic];
-}
-
--(CGFloat) limitForRawDelta:(CGFloat) raw direction:(MLOPixelDeltaDirection) direction{
-
- CGFloat halfscreen = [self halfViewSizeInLogic:direction];
- CGFloat center = [self viewCenterCord:direction];
-
- CGFloat limit;
-
- if(raw < 0.0f){
-
- CGFloat document = [self documentSizeInLogic:direction];
- limit = halfscreen + center - document;
-
- if(LOG_GESTURE_LIMITING){
- NSLog(@"%@ LIMIT: raw=%f limit(%f) = halfscreen(%f) + center(%f) - document(%f)",MLOPixelDeltaDirectionString(direction),raw,limit,halfscreen,center,document);
- }
-
- }else{
- limit = center - halfscreen;
-
- if(LOG_GESTURE_LIMITING){
- NSLog(@"%@ LIMIT: raw=%f limit(%f) = center(%f) - halfscreen(%f)",MLOPixelDeltaDirectionString(direction),raw,limit,center,halfscreen);
- }
- }
- if(limit*raw <0){
- // negative means limit flipped sign, so limit is zero
- return 0;
- }
-
- return limit;
-}
-
--(CGFloat) halfViewSizeInLogic:(MLOPixelDeltaDirection) direction{
- switch (direction) {
- case DELTA_X: return self.halfViewSizeInLogic.width;
- case DELTA_Y: return self.halfViewSizeInLogic.height;
- }
-}
-
--(CGFloat) documentSizeInLogic:(MLOPixelDeltaDirection) direction{
- switch (direction) {
- case DELTA_X: return self.documentSizeInLogic.width;
- case DELTA_Y: return self.documentSizeInLogic.height;
- }
-}
-
--(CGFloat) viewCenterCord:(MLOPixelDeltaDirection) direction{
- switch (direction) {
- case DELTA_X: return [self centerInLogic].x;
- case DELTA_Y: return [self centerInLogic].y;
- }
-}
-
--(void) updateCenterInLogic:(CGFloat) delta direction:(MLOPixelDeltaDirection) direction{
- switch (direction) {
- case DELTA_X: _viewCenterInLogic.x-=delta; break;
- case DELTA_Y: _viewCenterInLogic.y-=delta; break;
- }
-}
-
--(void)createHalfViewSizeInLogic{
- self.halfViewSizeInLogic = CGSizeMake(_mainViewController.canvas.frame.size.width
- * self.actualPixelToLogicScale
- / 2.0f,
- _mainViewController.canvas.frame.size.height
- * self.actualPixelToLogicScale
- / 2.0f);
-}
-
--(CGFloat)pixelsToLogic:(CGFloat) distanceInPixels{
- return roundf(self.actualPixelToLogicScale * distanceInPixels);
-}
-
--(CGFloat)logicToPixels:(CGFloat) distanceInLogic{
- return roundf(distanceInLogic / self.actualPixelToLogicScale);
-}
-
--(CGPoint)centerInLogic{
- if(!self.didCreateViewCenterInLogic){
- [self createHalfViewSizeInLogic];
- self.viewCenterInLogic = CGPointMake(self.halfViewSizeInLogic.width,
- self.halfViewSizeInLogic.height);
- self.didCreateViewCenterInLogic = YES;
- }
-
- return self.viewCenterInLogic;
-}
-
--(void)resetLocationMetrics{
- self.actualZoom = 100.0f;
- [self updateActualZoom:100.f];
- self.didCreateViewCenterInLogic = NO;
-}
-
--(void)updateActualZoom:(CGFloat) newActualZoom{
-
- CGFloat viewResizeScale = self.actualZoom / newActualZoom;
-
- self.halfViewSizeInLogic = CGSizeMake(self.halfViewSizeInLogic.width * viewResizeScale,
- self.halfViewSizeInLogic.height * viewResizeScale);
- self.actualZoom = newActualZoom;
-
- static const CGFloat PIXEL_TO_LOGIC_RATION_TIMES_HUNDRED = PIXEL_TO_LOGIC_RATIO * 100.0f;
-
- self.actualPixelToLogicScale = PIXEL_TO_LOGIC_RATION_TIMES_HUNDRED / newActualZoom;
- }
-
--(void)beginPinch{
- [_mainViewController.scroller updateByLogic];
- self.previousPinchScale = NO_SCALE;
- self.previousScaleSentToLibreOffice = NO_SCALE;
- self.initialPinchZoom = self.actualZoom;
-}
-
-
--(void)onRotate{
- if(self.didCreateViewCenterInLogic){
- [self createHalfViewSizeInLogic];
- }
-}
--(CGFloat) inPinchGetRatioToLastScale:(CGFloat)newScale{
-
- CGFloat newZoom = self.initialPinchZoom *newScale;
-
- newZoom = max(min(newZoom, MAX_ZOOM),MIN_ZOOM);
-
- NSLog(@"new zoom is %f",newZoom);
-
- [self updateActualZoom:newZoom];
-
- newScale = newZoom / self.initialPinchZoom;
-
- CGFloat scaleRatioToLastScale = newScale / self.previousPinchScale;
-
- self.previousPinchScale =newScale;
-
- return scaleRatioToLastScale;
-}
-
--(void)fireLoZoomEventsDuringPinch{
- CGFloat deltaScale = self.previousPinchScale / self.previousScaleSentToLibreOffice;
-
- if((deltaScale > DELTA_SCALE_ZOOM_IN_THRESHOLD) ||
- (deltaScale < DELTA_SCALE_ZOOM_OUT_THRESHOLD)){
- self.previousScaleSentToLibreOffice = self.previousPinchScale;
- [_engine loZoomDeltaX:0.0f deltaY:0.0f scale:deltaScale];
- }
-}
--(CGFloat)endPinchAndGetScaleForLo:(CGFloat)scale{
- [self updateActualZoom: floorf(self.actualZoom)];
- return scale/self.previousScaleSentToLibreOffice;
-}
-
--(CGFloat)currentPinchScale{
- return self.previousPinchScale;
-}
-
-@end