• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_TAKE_PHOTO_VIEW_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_TAKE_PHOTO_VIEW_H_
7 #pragma once
8 
9 #include "views/controls/button/button.h"
10 #include "views/view.h"
11 
12 class SkBitmap;
13 
14 namespace views {
15 class ImageButton;
16 class Label;
17 }  // namespace views
18 
19 namespace chromeos {
20 
21 class CameraImageView;
22 
23 // View used for showing video from camera and taking a snapshot from it.
24 class TakePhotoView : public views::View,
25                       public views::ButtonListener {
26  public:
27   class Delegate {
28    public:
~Delegate()29     virtual ~Delegate() {}
30 
31     // Called when the view has switched to capturing state.
32     virtual void OnCapturingStarted() = 0;
33 
34     // Called when the view has switched from capturing state.
35     virtual void OnCapturingStopped() = 0;
36   };
37 
38   explicit TakePhotoView(Delegate* delegate);
39   virtual ~TakePhotoView();
40 
41   // Initializes this view, its children and layout.
42   void Init();
43 
44   // Updates image from camera.
45   void UpdateVideoFrame(const SkBitmap& frame);
46 
47   // If in capturing mode, shows that camera is initializing by running
48   // throbber above the picture. Disables snapshot button until frame is
49   // received.
50   void ShowCameraInitializing();
51 
52   // If in capturing mode, shows that camera is broken instead of video
53   // frame and disables snapshot button until new frame is received.
54   void ShowCameraError();
55 
56   // Returns the currently selected image.
57   const SkBitmap& GetImage() const;
58 
59   // Sets the image indicating that the view is used only for image preview.
60   void SetImage(SkBitmap* image);
61 
62   // Overridden from views::View:
63   virtual gfx::Size GetPreferredSize();
64 
65   // Overridden from views::ButtonListener.
66   virtual void ButtonPressed(views::Button* sender, const views::Event& event);
67 
is_capturing()68   bool is_capturing() const { return is_capturing_; }
69 
set_show_title(bool show)70   void set_show_title(bool show) { show_title_ = show; }
71 
72  private:
73   // Initializes layout manager for this view.
74   void InitLayout();
75 
76   views::Label* title_label_;
77   views::ImageButton* snapshot_button_;
78   CameraImageView* user_image_;
79 
80   // Indicates that we're in capturing mode. When |false|, new video frames
81   // are not shown to user if received.
82   bool is_capturing_;
83 
84   // Whether title label is present or not.
85   bool show_title_;
86 
87   Delegate* delegate_;
88 
89   DISALLOW_COPY_AND_ASSIGN(TakePhotoView);
90 };
91 
92 }  // namespace chromeos
93 
94 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_TAKE_PHOTO_VIEW_H_
95