diff options
author | Tor Lillqvist <tml@collabora.com> | 2013-10-18 18:45:13 +0300 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2013-10-18 18:48:03 +0300 |
commit | 4d8f12f57b0f02d3610269eae7b5981010dc7e98 (patch) | |
tree | f770f738cbbe0e24253cc829c1f587a195ac3265 /ios | |
parent | 5732ff540edbaa4ad5d92177c48e0a79e385b5cb (diff) |
More text selection WIP hacking
Change-Id: Ia29725295613faf875a688b3917b144a5f05bbe3
Diffstat (limited to 'ios')
-rw-r--r-- | ios/experimental/LibreOffice/LibreOffice/View.m | 117 |
1 files changed, 76 insertions, 41 deletions
diff --git a/ios/experimental/LibreOffice/LibreOffice/View.m b/ios/experimental/LibreOffice/LibreOffice/View.m index 2e5f3ef26e73..44fa6df3aa3d 100644 --- a/ios/experimental/LibreOffice/LibreOffice/View.m +++ b/ios/experimental/LibreOffice/LibreOffice/View.m @@ -16,24 +16,12 @@ @property int selectionRectangleCount; @end -#define HANDLE_BLOB 20 +#define HANDLE_BLOB 40 #define HANDLE_STEM_WIDTH 6 -#define HANDLE_STEM_HEIGHT 20 +#define HANDLE_STEM_HEIGHT 40 @implementation View -#if 0 -- (id) initWithFrame:(CGRect)rect -{ - self = [super initWithFrame:rect]; - if (self) { - self.selectionRectangles = NULL; - self.selectionRectangleCount = 0; - } - return self; -} -#endif - - (CGRect) topLeftResizeHandle { if (self.selectionRectangleCount == 0) @@ -166,38 +154,71 @@ - (void)panGesture:(UIPanGestureRecognizer *)gestureRecognizer { + static enum { NONE, TOPLEFT, BOTTOMRIGHT } draggedHandle = NONE; static CGFloat previousX = 0.0f, previousY = 0.0f; CGPoint translation = [gestureRecognizer translationInView:self]; - if ([gestureRecognizer numberOfTouches] == 1) { + if (gestureRecognizer.state == UIGestureRecognizerStateBegan && + gestureRecognizer.numberOfTouches == 1) { if (CGRectContainsPoint([self topLeftResizeHandle], - [gestureRecognizer locationInView:self])) { - - self.selectionRectangles[0].origin.x += translation.x; - self.selectionRectangles[0].origin.y += translation.y; - self.selectionRectangles[0].size.width -= translation.x; - self.selectionRectangles[0].size.height -= translation.y; - - touch_lo_selection_attempt_resize(self.documentHandle, - self.selectionRectangles, - self.selectionRectangleCount); - return; - } else if (CGRectContainsPoint([self bottomRightResizeHandle], - [gestureRecognizer locationInView:self])) { - - const int N = self.selectionRectangleCount - 1; - - self.selectionRectangles[N].origin.x += translation.x; - self.selectionRectangles[N].origin.y += translation.y; - self.selectionRectangles[N].size.width -= translation.x; - self.selectionRectangles[N].size.height -= translation.y; - - touch_lo_selection_attempt_resize(self.documentHandle, - self.selectionRectangles, - self.selectionRectangleCount); - return; - } + [gestureRecognizer locationInView:self])) + draggedHandle = TOPLEFT; + else if (CGRectContainsPoint([self bottomRightResizeHandle], + [gestureRecognizer locationInView:self])) + draggedHandle = BOTTOMRIGHT; + } + + if (draggedHandle == TOPLEFT) { + const int N = self.selectionRectangleCount; + + self.selectionRectangles[0].origin.x += translation.x; + self.selectionRectangles[0].origin.y += translation.y; + self.selectionRectangles[0].size.width -= translation.x; + self.selectionRectangles[0].size.height -= translation.y; + +#if 0 + touch_lo_selection_attempt_resize(self.documentHandle, + self.selectionRectangles, + self.selectionRectangleCount); +#else + touch_lo_mouse(self.selectionRectangles[0].origin.x, + self.selectionRectangles[0].origin.y, + DOWN, NONE); + touch_lo_mouse(self.selectionRectangles[N-1].origin.x + + self.selectionRectangles[N-1].size.width, + self.selectionRectangles[N-1].origin.y + + self.selectionRectangles[N-1].size.height, + UP, NONE); +#endif + if (gestureRecognizer.state == UIGestureRecognizerStateEnded) + draggedHandle = NONE; + return; + } else if (draggedHandle == BOTTOMRIGHT) { + const int N = self.selectionRectangleCount; + + self.selectionRectangles[N-1].origin.x += translation.x; + self.selectionRectangles[N-1].origin.y += translation.y; + self.selectionRectangles[N-1].size.width += translation.x; + self.selectionRectangles[N-1].size.height += translation.y; + +#if 0 + touch_lo_selection_attempt_resize(self.documentHandle, + self.selectionRectangles, + self.selectionRectangleCount); +#else + touch_lo_mouse(self.selectionRectangles[0].origin.x, + self.selectionRectangles[0].origin.y, + DOWN, NONE); + touch_lo_mouse(self.selectionRectangles[N-1].origin.x + + self.selectionRectangles[N-1].size.width, + self.selectionRectangles[N-1].origin.y + + self.selectionRectangles[N-1].size.height, + UP, NONE); +#endif + if (gestureRecognizer.state == UIGestureRecognizerStateEnded) + draggedHandle = NONE; + return; } if (gestureRecognizer.state != UIGestureRecognizerStateBegan) { @@ -238,6 +259,17 @@ } } +static int compare_rects(const void *a, const void *b) +{ + const CGRect *ra = a; + const CGRect *rb = b; + + if (ra->origin.y != rb->origin.y) + return ra->origin.y - rb->origin.y; + else + return ra->origin.x - rb->origin.x; +} + - (void)startSelectionOfType:(MLOSelectionKind)kind withNumber:(int)number ofRectangles:(CGRect *)rects forDocument:(const void *)document { (void) kind; @@ -257,6 +289,9 @@ self.selectionRectangleCount = number; self.documentHandle = document; + // The selection rectangle provided by LO are not sorted in any sane way + qsort(self.selectionRectangles, self.selectionRectangleCount, sizeof(self.selectionRectangles[0]), compare_rects); + [self requestSelectionRedisplay]; } |