cef/libcef/browser/views/window_impl.h
Marshall Greenblatt 06e73fff15 Implement Views framework on Windows and Linux (issue #1749).
- Add Views header files in a new include/views directory.
- Add initial top-level window (CefWindow), control (CefBrowserView,
  CefLabelButton, CefMenuButton, CefPanel, CefScrollView,
  CefTextfield) and layout (CefBoxLayout, CefFlowLayout) support.
  See libcef/browser/views/view_impl.h comments for implementation
  details.
- Add Views example usage in cefclient and cefsimple and Views unit
  tests in cef_unittests. Pass the `--use-views` command-line flag to
  cefclient, cefsimple and cef_unittests to run using the Views
  framework instead of platform APIs. For cefclient and cefsimple
  this will create the browser window and all related functionality
  using the Views framework. For cef_unittests this will run all
  tests (except OSR tests) in a Views-based browser window. Views-
  specific unit tests (`--gtest_filter=Views*`) will be run even if
  the the `--use-views` flag is not specified.
- Pass the `--hide-frame` command-line flag to cefclient to demo a
  frameless Views-based browser window.
- Pass the `--hide-controls` command-line flag to cefclient to demo a
  browser window without top controls. This also works in non-Views
  mode.
- Pass the `--enable-high-dpi-support` command-line flag to
  cef_unittests on Windows to test high-DPI support on a display
  that supports it.
- Add CefImage for reading/writing image file formats.
- Add CefBrowser::DownloadImage() for downloading image URLs as a
  CefImage representation. This is primarily for loading favicons.
- Add CefMenuModel::CreateMenuModel() and CefMenuModelDelegate for
  creating custom menus. This is primarily for use with
  CefMenuButton.
- Add CefBrowser::TryCloseBrowser() helper for closing a browser.
  Also improve related documentation in cef_life_span_handler.h.
- Rename cef_page_range_t to cef_range_t. It is now also used by
  CefTextfield.
- Remove CefLifeSpanHandler::RunModal() which is never called.
- Add draggable regions example to cefclient.
2016-04-26 11:58:13 -04:00

135 lines
4.5 KiB
C++

// Copyright 2016 The Chromium Embedded Framework 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_WINDOW_IMPL_H_
#define CEF_LIBCEF_BROWSER_VIEWS_WINDOW_IMPL_H_
#pragma once
#include "include/views/cef_window.h"
#include "include/views/cef_window_delegate.h"
#include "libcef/browser/menu_model_impl.h"
#include "libcef/browser/views/panel_impl.h"
#include "libcef/browser/views/window_view.h"
#include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/widget/widget.h"
namespace views {
class MenuButton;
}
class CefWindowImpl :
public CefPanelImpl<CefWindowView, CefWindow, CefWindowDelegate>,
public CefWindowView::Delegate,
public CefMenuModelImpl::Observer {
public:
typedef CefPanelImpl<CefWindowView, CefWindow, CefWindowDelegate> ParentClass;
// Create a new CefWindow instance. |delegate| may be nullptr.
static CefRefPtr<CefWindowImpl> Create(CefRefPtr<CefWindowDelegate> delegate);
// CefWindow methods:
void Show() override;
void Hide() override;
void CenterWindow(const CefSize& size) override;
void Close() override;
bool IsClosed() override;
void Activate() override;
void Deactivate() override;
bool IsActive() override;
void BringToTop() override;
void SetAlwaysOnTop(bool on_top) override;
bool IsAlwaysOnTop() override;
void Maximize() override;
void Minimize() override;
void Restore() override;
void SetFullscreen(bool fullscreen) override;
bool IsMaximized() override;
bool IsMinimized() override;
bool IsFullscreen() override;
void SetTitle(const CefString& title) override;
CefString GetTitle() override;
void SetWindowIcon(CefRefPtr<CefImage> image) override;
CefRefPtr<CefImage> GetWindowIcon() override;
void SetWindowAppIcon(CefRefPtr<CefImage> image) override;
CefRefPtr<CefImage> GetWindowAppIcon() override;
void ShowMenu(CefRefPtr<CefMenuModel> menu_model,
const CefPoint& screen_point,
cef_menu_anchor_position_t anchor_position) override;
void CancelMenu() override;
CefRefPtr<CefDisplay> GetDisplay() override;
CefRect GetClientAreaBoundsInScreen() override;
void SetDraggableRegions(
const std::vector<CefDraggableRegion>& regions) override;
CefWindowHandle GetWindowHandle() override;
void SendKeyPress(int key_code,
uint32 event_flags) override;
void SendMouseMove(int screen_x, int screen_y) override;
void SendMouseEvents(cef_mouse_button_type_t button,
bool mouse_down,
bool mouse_up) override;
// CefViewAdapter methods:
void Detach() override;
// CefPanel methods:
CefRefPtr<CefWindow> AsWindow() override { return this; }
// CefView methods:
void SetBounds(const CefRect& bounds) override;
CefRect GetBounds() override;
CefRect GetBoundsInScreen() override;
void SetSize(const CefSize& bounds) override;
void SetPosition(const CefPoint& position) override;
void SizeToPreferredSize() override;
void SetVisible(bool visible) override;
bool IsVisible() override;
bool IsDrawn() override;
void SetBackgroundColor(cef_color_t color) override;
// CefWindowView::Delegate methods:
bool CanWidgetClose() override;
void OnWindowViewDeleted() override;
// CefMenuModelImpl::Observer methods:
void MenuClosed(CefRefPtr<CefMenuModelImpl> source) override;
// CefViewAdapter methods:
std::string GetDebugType() override { return "Window"; }
void GetDebugInfo(base::DictionaryValue* info,
bool include_children) override;
void ShowMenu(views::MenuButton* menu_button,
CefRefPtr<CefMenuModel> menu_model,
const CefPoint& screen_point,
cef_menu_anchor_position_t anchor_position);
private:
// Create a new implementation object.
// Always call Initialize() after creation.
// |delegate| may be nullptr.
explicit CefWindowImpl(CefRefPtr<CefWindowDelegate> delegate);
// CefViewImpl methods:
CefWindowView* CreateRootView() override;
// Initialize the Widget.
void CreateWidget();
views::Widget* widget_;
// True if the window has been destroyed.
bool destroyed_;
// The currently active menu model and runner.
CefRefPtr<CefMenuModelImpl> menu_model_;
scoped_ptr<views::MenuRunner> menu_runner_;
IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(CefWindowImpl);
DISALLOW_COPY_AND_ASSIGN(CefWindowImpl);
};
#endif // CEF_LIBCEF_BROWSER_VIEWS_WINDOW_IMPL_H_