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 12class SkBitmap; 13 14namespace views { 15class ImageButton; 16class Label; 17} // namespace views 18 19namespace chromeos { 20 21class CameraImageView; 22 23// View used for showing video from camera and taking a snapshot from it. 24class TakePhotoView : public views::View, 25 public views::ButtonListener { 26 public: 27 class Delegate { 28 public: 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 68 bool is_capturing() const { return is_capturing_; } 69 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