mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
views: Add support for absolute positioned overlay views.
To test: Run `cefclient.exe --use-views --hide-frame --hide-controls` Add `--enable-chrome-runtime` for the same behavior using the Chrome location bar instead of a text field.
This commit is contained in:
79
libcef/browser/views/overlay_view_host.h
Normal file
79
libcef/browser/views/overlay_view_host.h
Normal file
@@ -0,0 +1,79 @@
|
||||
// Copyright 2021 The Chromium Embedded Framework Authors. Portions copyright
|
||||
// 2011 The Chromium Authors. All rights reserved. Use of this source code is
|
||||
// governed by a BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
#ifndef CEF_LIBCEF_BROWSER_VIEWS_OVERLAY_VIEW_HOST_H_
|
||||
#define CEF_LIBCEF_BROWSER_VIEWS_OVERLAY_VIEW_HOST_H_
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "include/views/cef_overlay_controller.h"
|
||||
#include "include/views/cef_view.h"
|
||||
|
||||
#include "base/compiler_specific.h"
|
||||
#include "base/macros.h"
|
||||
#include "ui/views/view_observer.h"
|
||||
#include "ui/views/widget/widget_delegate.h"
|
||||
|
||||
class CefWindowView;
|
||||
|
||||
// Host class for a child Widget that behaves as an overlay control. Based on
|
||||
// Chrome's DropdownBarHost.
|
||||
class CefOverlayViewHost : public views::WidgetDelegate,
|
||||
public views::ViewObserver {
|
||||
public:
|
||||
// |window_view| is the top-level view that contains this overlay.
|
||||
CefOverlayViewHost(CefWindowView* window_view,
|
||||
cef_docking_mode_t docking_mode);
|
||||
|
||||
// Initializes the CefOverlayViewHost. This creates the Widget that |view|
|
||||
// paints into. |host_view| is the view whose position in the |window_view_|
|
||||
// view hierarchy determines the z-order of the widget relative to views with
|
||||
// layers and views with associated NativeViews.
|
||||
void Init(views::View* host_view, CefRefPtr<CefView> view);
|
||||
|
||||
void Destroy();
|
||||
|
||||
void MoveIfNecessary();
|
||||
|
||||
void SetOverlayBounds(const gfx::Rect& bounds);
|
||||
void SetOverlayInsets(const CefInsets& insets);
|
||||
|
||||
// views::ViewObserver methods:
|
||||
void OnViewBoundsChanged(views::View* observed_view) override;
|
||||
|
||||
cef_docking_mode_t docking_mode() const { return docking_mode_; }
|
||||
CefRefPtr<CefOverlayController> controller() const { return cef_controller_; }
|
||||
CefWindowView* window_view() const { return window_view_; }
|
||||
views::Widget* widget() const { return widget_.get(); }
|
||||
views::View* view() const { return view_; }
|
||||
gfx::Rect bounds() const { return bounds_; }
|
||||
CefInsets insets() const { return insets_; }
|
||||
|
||||
private:
|
||||
gfx::Rect ComputeBounds() const;
|
||||
|
||||
// The CefWindowView that created us.
|
||||
CefWindowView* const window_view_;
|
||||
|
||||
const cef_docking_mode_t docking_mode_;
|
||||
|
||||
// Our view, which is responsible for drawing the UI.
|
||||
views::View* view_ = nullptr;
|
||||
|
||||
// The Widget implementation that is created and maintained by the overlay.
|
||||
// It contains |view_|.
|
||||
std::unique_ptr<views::Widget> widget_;
|
||||
|
||||
CefRefPtr<CefOverlayController> cef_controller_;
|
||||
|
||||
gfx::Rect bounds_;
|
||||
bool bounds_changing_ = false;
|
||||
|
||||
CefInsets insets_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CefOverlayViewHost);
|
||||
};
|
||||
|
||||
#endif // CEF_LIBCEF_BROWSER_VIEWS_OVERLAY_VIEW_HOST_H_
|
Reference in New Issue
Block a user