15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_COCOA_LOCATION_BAR_ZOOM_DECORATION_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_LOCATION_BAR_ZOOM_DECORATION_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#import "chrome/browser/ui/cocoa/browser/zoom_bubble_controller.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/cocoa/location_bar/image_decoration.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LocationBarViewMac;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@class ZoomBubbleController;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ZoomController;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ZoomDecorationTest;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Zoom icon at the end of the omnibox (close to page actions) when at a
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// non-standard zoom level.
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ZoomDecoration : public ImageDecoration,
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       public ZoomBubbleControllerDelegate {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit ZoomDecoration(LocationBarViewMac* owner);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ZoomDecoration();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called when this decoration should show or hide itself in its most current
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // state.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Update(ZoomController* zoom_controller);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Shows the zoom bubble for this decoration. If |auto_close| is YES, then
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // the bubble will automatically close after a fixed period of time.
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void ShowBubble(BOOL auto_close);
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Closes the zoom bubble.
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void CloseBubble();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend ZoomDecorationTest;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsAtDefaultZoom() const;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool ShouldShowDecoration() const;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // LocationBarDecoration implementation.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AcceptsMousePress() OVERRIDE;
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMousePressed(NSRect frame, NSPoint location) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NSString* GetToolTip() OVERRIDE;
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual NSPoint GetBubblePointInFrame(NSRect frame) OVERRIDE;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // ZoomBubbleControllerDelegate implementation.
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual content::WebContents* GetWebContents() OVERRIDE;
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void OnClose() OVERRIDE;
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The control that owns this. Weak.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LocationBarViewMac* owner_;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The bubble that this decoration shows. Weak, owns self.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ZoomBubbleController* bubble_;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The string to show for a tooltip.
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::scoped_nsobject<NSString> tooltip_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ZoomDecoration);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_COCOA_LOCATION_BAR_ZOOM_DECORATION_H_
67