chromium/ash/capture_mode/normal_capture_bar_view.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_CAPTURE_MODE_NORMAL_CAPTURE_BAR_VIEW_H_
#define ASH_CAPTURE_MODE_NORMAL_CAPTURE_BAR_VIEW_H_

#include "ash/ash_export.h"
#include "ash/capture_mode/capture_mode_bar_view.h"
#include "ash/capture_mode/capture_mode_types.h"
#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"

namespace ash {

class CaptureModeBehavior;
class CaptureModeSourceView;
class CaptureModeTypeView;

// A view that acts as the content view of the capture mode bar widget for a
// normal capture session. It has a set of buttons to toggle between image and
// video capture, and another set of buttons to toggle between fullscreen,
// region, and window capture sources. It also contains a settings button. The
// structure looks like this:
//
//   +---------------------------------------------------------------+
//   |  +----------------+  |                       |                |
//   |  |  +---+  +---+  |  |  +---+  +---+  +---+  |  +---+  +---+  |
//   |  |  |   |  |   |  |  |  |   |  |   |  |   |  |  |   |  |   |  |
//   |  |  +---+  +---+  |  |  +---+  +---+  +---+  |  +---+  +---+  |
//   |  +----------------+  |  ^                 ^  |  ^      ^      |
//   +--^----------------------|-----------------|-----|------|------+
//   ^  |                      +-----------------+     |      |
//   |  |                      |                       |      IconButton
//   |  |                      |                       |
//   |  |                      |                       IconButton
//   |  |                      CaptureModeSourceView
//   |  CaptureModeTypeView
//   |
//   NormalCaptureBarView
//
class ASH_EXPORT NormalCaptureBarView : public CaptureModeBarView {
  METADATA_HEADER(NormalCaptureBarView, CaptureModeBarView)

 public:
  // The `active_behavior` decides the capture bar configurations.
  explicit NormalCaptureBarView(CaptureModeBehavior* active_behavior);
  NormalCaptureBarView(const NormalCaptureBarView&) = delete;
  NormalCaptureBarView& operator=(const NormalCaptureBarView&) = delete;
  ~NormalCaptureBarView() override;

  // CaptureModeBarView:
  CaptureModeTypeView* GetCaptureTypeView() const override;
  CaptureModeSourceView* GetCaptureSourceView() const override;
  void OnCaptureSourceChanged(CaptureModeSource new_source) override;
  void OnCaptureTypeChanged(CaptureModeType new_type) override;

 private:
  raw_ptr<CaptureModeTypeView> capture_type_view_ = nullptr;
  raw_ptr<CaptureModeSourceView> capture_source_view_ = nullptr;
};

}  // namespace ash

#endif  // ASH_CAPTURE_MODE_NORMAL_CAPTURE_BAR_VIEW_H_