/*
 RDP Touch Pointer View 
 
 Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
 
 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 <UIKit/UIKit.h>

// protocol for touch pointer callbacks
@protocol TouchPointerDelegate
// callback if touch pointer should be closed
-(void)touchPointerClose;
// callback for a left click action
-(void)touchPointerLeftClick:(CGPoint)pos down:(BOOL)down;
// callback for a right click action
-(void)touchPointerRightClick:(CGPoint)pos down:(BOOL)down;
// callback for pointer move action
-(void)touchPointerMove:(CGPoint)pos;
// callback if scrolling is performed
-(void)touchPointerScrollDown:(BOOL)down;
// callback for toggling the standard keyboard
-(void)touchPointerToggleKeyboard;
// callback for toggling the extended keyboard
-(void)touchPointerToggleExtendedKeyboard;
// callback for reset session view
-(void)touchPointerResetSessionView;
@end


@interface TouchPointerView : UIView
{
    // transformation and image currently drawn
    CGAffineTransform _pointer_transformation;
    UIImage* _cur_pointer_img;

    // action images
    UIImage* _default_pointer_img;
    UIImage* _active_pointer_img;
    UIImage* _lclick_pointer_img;
    UIImage* _rclick_pointer_img;
    UIImage* _scroll_pointer_img;
    UIImage* _extkeyboard_pointer_img;
    UIImage* _keyboard_pointer_img;
    UIImage* _reset_pointer_img;

    // predefined areas for all actions
    CGRect _pointer_areas[9]; 
    
    // scroll/drag n drop handling
    CGPoint _prev_touch_location;
    BOOL _pointer_moving;
    BOOL _pointer_scrolling;
    
    NSObject<TouchPointerDelegate>* _delegate;
}

@property (assign) IBOutlet NSObject<TouchPointerDelegate>* delegate;

// positions the pointer on screen if it got offscreen after an orentation change or after displaying the keyboard
-(void)ensurePointerIsVisible;

// returns the extent required for the scrollview to use the touch pointer near the edges of the session view
-(UIEdgeInsets)getEdgeInsets;

// return pointer dimension and position information
- (CGPoint)getPointerPosition;
- (int)getPointerWidth;
- (int)getPointerHeight;

@end
