#ifndef CHROME_BROWSER_GLIC_WIDGET_INACTIVE_VIEW_CONTROLLER_H_
#define CHROME_BROWSER_GLIC_WIDGET_INACTIVE_VIEW_CONTROLLER_H_
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "ui/gfx/animation/animation_delegate.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/views/view.h"
#include "ui/views/view_observer.h"
#include "ui/views/view_tracker.h"
namespace content {
class WebContents;
}
namespace gfx {
class SlideAnimation;
}
namespace views {
class ImageView;
}
class InactiveViewController : public views::ViewObserver,
public gfx::AnimationDelegate {
public:
InactiveViewController();
~InactiveViewController() override;
InactiveViewController(const InactiveViewController&) = delete;
InactiveViewController& operator=(const InactiveViewController&) = delete;
std::unique_ptr<views::View> CreateView();
void CaptureScreenshot(content::WebContents* glic_webui_contents);
void OnScreenshotCaptured(gfx::Image screenshot);
base::WeakPtr<InactiveViewController> GetWeakPtr();
void OnViewBoundsChanged(views::View* observed_view) override;
void OnViewIsDeleting(views::View* observed_view) override;
void OnViewThemeChanged(views::View* observed_view) override;
void AnimationProgressed(const gfx::Animation* animation) override;
private:
void UpdateImageView();
void UpdateScrimColor();
void UpdateScrimOpacity(double animation_value);
void CheckForImageDistortion();
base::ScopedObservation<views::View, views::ViewObserver>
image_view_observation_{this};
raw_ptr<views::ImageView> image_view_ = nullptr;
views::ViewTracker scrim_view_tracker_;
gfx::ImageSkia screenshot_;
bool is_image_distorted_ = false;
std::unique_ptr<gfx::SlideAnimation> animation_;
views::ViewTracker card_view_tracker_;
base::WeakPtrFactory<InactiveViewController> weak_ptr_factory_{this};
std::unique_ptr<views::View> CreateCardView();
};
#endif