Home | History | Annotate | Download | only in cocoa
      1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #import <Cocoa/Cocoa.h>
      6 #import "chrome/browser/ui/cocoa/fast_resize_view.h"
      7 
      8 #include "base/logging.h"
      9 
     10 @interface FastResizeView (PrivateMethods)
     11 // Lays out this views subviews.  If fast resize mode is on, does not resize any
     12 // subviews and instead pegs them to the top left.  If fast resize mode is off,
     13 // sets the subviews' frame to be equal to this view's bounds.
     14 - (void)layoutSubviews;
     15 @end
     16 
     17 @implementation FastResizeView
     18 - (void)setFastResizeMode:(BOOL)fastResizeMode {
     19   fastResizeMode_ = fastResizeMode;
     20 
     21   // Force a relayout when coming out of fast resize mode.
     22   if (!fastResizeMode_)
     23     [self layoutSubviews];
     24 }
     25 
     26 - (void)resizeSubviewsWithOldSize:(NSSize)oldSize {
     27   [self layoutSubviews];
     28 }
     29 
     30 - (void)drawRect:(NSRect)dirtyRect {
     31   // If we are in fast resize mode, our subviews may not completely cover our
     32   // bounds, so we fill with white.  If we are not in fast resize mode, we do
     33   // not need to draw anything.
     34   if (fastResizeMode_) {
     35     [[NSColor whiteColor] set];
     36     NSRectFill(dirtyRect);
     37   }
     38 }
     39 
     40 
     41 @end
     42 
     43 @implementation FastResizeView (PrivateMethods)
     44 - (void)layoutSubviews {
     45   // There should never be more than one subview.  There can be zero, if we are
     46   // in the process of switching tabs or closing the window.  In those cases, no
     47   // layout is needed.
     48   NSArray* subviews = [self subviews];
     49   DCHECK([subviews count] <= 1);
     50   if ([subviews count] < 1)
     51     return;
     52 
     53   NSView* subview = [subviews objectAtIndex:0];
     54   NSRect bounds = [self bounds];
     55 
     56   if (fastResizeMode_) {
     57     NSRect frame = [subview frame];
     58     frame.origin.x = 0;
     59     frame.origin.y = NSHeight(bounds) - NSHeight(frame);
     60     [subview setFrame:frame];
     61   } else {
     62     [subview setFrame:bounds];
     63   }
     64 }
     65 @end
     66