Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Unified Diff: ios/chrome/browser/ui/contextual_search/contextual_search_highlighter_view.mm

Issue 2588713002: Upstream Chrome on iOS source code [4/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/contextual_search/contextual_search_highlighter_view.mm
diff --git a/ios/chrome/browser/ui/contextual_search/contextual_search_highlighter_view.mm b/ios/chrome/browser/ui/contextual_search/contextual_search_highlighter_view.mm
new file mode 100644
index 0000000000000000000000000000000000000000..74610013e06521da21dc1227d590499723dfc70f
--- /dev/null
+++ b/ios/chrome/browser/ui/contextual_search/contextual_search_highlighter_view.mm
@@ -0,0 +1,113 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/contextual_search/contextual_search_highlighter_view.h"
+
+#include "base/logging.h"
+#import "base/mac/scoped_nsobject.h"
+#import "ios/chrome/browser/ui/contextual_search/contextual_search_controller.h"
+
+@implementation ContextualSearchHighlighterView {
+ // Store size of the container view. If size change, text layout will likely
+ // change and should be updated.
+ CGSize _previousSize;
+
+ // Store values that were used last time the rects were drawn.
+ CGPoint _scroll;
+ CGFloat _zoom;
+ CGFloat _offset;
+
+ __unsafe_unretained id<ContextualSearchHighlighterDelegate> _delegate;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame
+ delegate:
+ (id<ContextualSearchHighlighterDelegate>)delegate {
+ self = [super initWithFrame:frame];
+ if (self) {
+ [self setUserInteractionEnabled:NO];
+ [self setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
+ UIViewAutoresizingFlexibleHeight];
+ _previousSize = frame.size;
+ _delegate = delegate;
+ }
+ return self;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+ NOTREACHED();
+ return nil;
+}
+
+- (instancetype)initWithCoder:(NSCoder*)aDecoder {
+ NOTREACHED();
+ return nil;
+}
+
+- (void)layoutSubviews {
+ [super layoutSubviews];
+ if (!CGSizeEqualToSize(_previousSize, self.frame.size)) {
+ _previousSize = self.frame.size;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [_delegate updateHighlight];
+ });
+ }
+}
+
+- (void)highlightRects:(NSArray*)rects
+ withOffset:(CGFloat)offset
+ zoom:(CGFloat)zoom
+ scroll:(CGPoint)scroll {
+ for (UIView* view : [self subviews]) {
+ [view removeFromSuperview];
+ }
+ for (NSValue* value in rects) {
+ CGRect rect = [value CGRectValue];
+ rect.origin.x *= zoom;
+ rect.origin.y *= zoom;
+ rect.size.width *= zoom;
+ rect.size.height *= zoom;
+ rect.origin.x -= scroll.x;
+ rect.origin.y += offset - scroll.y;
+ UIView* view = [[[UIView alloc] initWithFrame:rect] autorelease];
+ [self addSubview:view];
+ view.backgroundColor =
+ [UIColor colorWithRed:0.67 green:0.88 blue:0.96 alpha:0.6];
+ }
+ [[self superview] bringSubviewToFront:self];
+ _zoom = zoom;
+ _scroll = scroll;
+ _offset = offset;
+}
+
+- (void)setScroll:(CGPoint)newScroll
+ zoom:(CGFloat)newZoom
+ offset:(CGFloat)newOffset {
+ for (UIView* view : [self subviews]) {
+ CGRect oldFrame = [view frame];
+ CGRect newFrame;
+ CGFloat scaleAdjust = newZoom / _zoom;
+ newFrame.origin.x =
+ (oldFrame.origin.x + _scroll.x) * scaleAdjust - newScroll.x;
+ newFrame.origin.y =
+ (oldFrame.origin.y + _scroll.y - _offset) * scaleAdjust + newOffset -
+ newScroll.y;
+ newFrame.size.width = oldFrame.size.width * scaleAdjust;
+ newFrame.size.height = oldFrame.size.height * scaleAdjust;
+ [view setFrame:newFrame];
+ }
+ _scroll = newScroll;
+}
+
+- (CGRect)boundingRect {
+ CGRect bounding = CGRectNull;
+ for (UIView* view : [self subviews]) {
+ bounding = CGRectUnion(bounding, view.frame);
+ }
+ bounding.origin.x += _scroll.x;
+ bounding.origin.y += _scroll.y;
+ return bounding;
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698