cef/tests/ceftests/views/panel_unittest.cc

1580 lines
53 KiB
C++
Raw Normal View History

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-01-19 21:09:01 +01:00
// Copyright (c) 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.
views: Add support for OS and Chrome themes (fixes #3610, fixes #3671) Controls now respect OS and Chrome themes by default for both Alloy and Chrome runtimes. Chrome themes (mode and colors) can be configured using the new CefRequestContext::SetChromeColorScheme method. Individual theme colors can be overridden using the new CefWindowDelegate:: OnThemeColorsChanged and CefWindow::SetThemeColor methods. The `--force-light-mode` and `--force-dark-mode` command-line flags are now respected on all platforms as an override for the OS theme. The current Chrome theme, if any, will take precedence over the OS theme when determining light/dark status. On Windows and MacOS the titlebar color will also be updated to match the light/dark theme. Testable as follows: - Run: `cefclient --enable-chrome-runtime` OR `cefclient --use-views --persist-user-preferences --cache-path=...` - App launches with default OS light/dark theme colors. - Change OS dark/light theme under system settings. Notice that theme colors change as expected. - Right click, select items from the new Theme sub-menu. Notice that theme colors behave as expected. - Exit and relaunch the app. Notice that the last-used theme colors are applied on app restart. - Add `--background-color=green` to above command-line. - Perform the same actions as above. Notice that all controls start and remain green throughout (except some icons with Chrome runtime). - Add `--force-light-mode` or `--force-dark-mode` to above command-line. - Perform the same actions as above. Notice that OS dark/light theme changes are ignored, but Chrome theme changes work as expected.
2024-03-29 17:48:33 +01:00
#include <optional>
#include "include/cef_color_ids.h"
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-01-19 21:09:01 +01:00
#include "include/views/cef_box_layout.h"
#include "include/views/cef_fill_layout.h"
#include "include/views/cef_layout.h"
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-01-19 21:09:01 +01:00
#include "include/views/cef_panel.h"
#include "include/views/cef_panel_delegate.h"
#include "include/views/cef_window.h"
#include "tests/ceftests/thread_helper.h"
#include "tests/gtest/include/gtest/gtest.h"
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-01-19 21:09:01 +01:00
#define PANEL_TEST(name) UI_THREAD_TEST(ViewsPanelTest, name)
namespace {
class EmptyPanelDelegate : public CefPanelDelegate {
public:
EmptyPanelDelegate() = default;
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-01-19 21:09:01 +01:00
private:
IMPLEMENT_REFCOUNTING(EmptyPanelDelegate);
DISALLOW_COPY_AND_ASSIGN(EmptyPanelDelegate);
};
void CreatePanel(CefRefPtr<CefPanelDelegate> delegate) {
CefRefPtr<CefPanel> panel = CefPanel::CreatePanel(delegate);
EXPECT_TRUE(panel.get());
// Verify the derived View relationship.
EXPECT_TRUE(panel->AsPanel().get());
EXPECT_FALSE(panel->AsWindow().get());
EXPECT_TRUE(panel->IsSame(panel));
// Verify default View state.
EXPECT_STREQ("Panel", panel->GetTypeString().ToString().c_str());
EXPECT_TRUE(panel->IsValid());
EXPECT_FALSE(panel->IsAttached());
2023-01-02 23:59:03 +01:00
if (delegate) {
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-01-19 21:09:01 +01:00
EXPECT_EQ(delegate.get(), panel->GetDelegate().get());
2023-01-02 23:59:03 +01:00
} else {
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-01-19 21:09:01 +01:00
EXPECT_FALSE(panel->GetDelegate().get());
2023-01-02 23:59:03 +01:00
}
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-01-19 21:09:01 +01:00
EXPECT_EQ(0, panel->GetID());
EXPECT_FALSE(panel->GetParentView().get());
EXPECT_EQ(CefRect(0, 0, 0, 0), panel->GetBounds());
EXPECT_EQ(CefRect(0, 0, 0, 0), panel->GetBoundsInScreen());
EXPECT_EQ(CefSize(0, 0), panel->GetPreferredSize());
EXPECT_EQ(CefSize(0, 0), panel->GetMinimumSize());
EXPECT_EQ(CefSize(0, 0), panel->GetMaximumSize());
EXPECT_EQ(CefSize(0, 0), panel->GetMaximumSize());
EXPECT_EQ(0, panel->GetHeightForWidth(100));
EXPECT_TRUE(panel->IsVisible());
EXPECT_FALSE(panel->IsDrawn());
EXPECT_TRUE(panel->IsEnabled());
EXPECT_FALSE(panel->IsFocusable());
EXPECT_FALSE(panel->IsAccessibilityFocusable());
views: Add support for OS and Chrome themes (fixes #3610, fixes #3671) Controls now respect OS and Chrome themes by default for both Alloy and Chrome runtimes. Chrome themes (mode and colors) can be configured using the new CefRequestContext::SetChromeColorScheme method. Individual theme colors can be overridden using the new CefWindowDelegate:: OnThemeColorsChanged and CefWindow::SetThemeColor methods. The `--force-light-mode` and `--force-dark-mode` command-line flags are now respected on all platforms as an override for the OS theme. The current Chrome theme, if any, will take precedence over the OS theme when determining light/dark status. On Windows and MacOS the titlebar color will also be updated to match the light/dark theme. Testable as follows: - Run: `cefclient --enable-chrome-runtime` OR `cefclient --use-views --persist-user-preferences --cache-path=...` - App launches with default OS light/dark theme colors. - Change OS dark/light theme under system settings. Notice that theme colors change as expected. - Right click, select items from the new Theme sub-menu. Notice that theme colors behave as expected. - Exit and relaunch the app. Notice that the last-used theme colors are applied on app restart. - Add `--background-color=green` to above command-line. - Perform the same actions as above. Notice that all controls start and remain green throughout (except some icons with Chrome runtime). - Add `--force-light-mode` or `--force-dark-mode` to above command-line. - Perform the same actions as above. Notice that OS dark/light theme changes are ignored, but Chrome theme changes work as expected.
2024-03-29 17:48:33 +01:00
// Background color can be configured without a Window.
const cef_color_t default_color =
panel->GetThemeColor(CEF_ColorPrimaryBackground);
const cef_color_t new_color = CefColorSetARGB(255, 0, 0, 255);
EXPECT_NE(default_color, new_color);
EXPECT_EQ(default_color, panel->GetBackgroundColor());
panel->SetBackgroundColor(new_color);
EXPECT_EQ(new_color, panel->GetBackgroundColor());
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-01-19 21:09:01 +01:00
// Verify default Panel state.
EXPECT_TRUE(panel->GetLayout().get());
EXPECT_EQ(0U, panel->GetChildViewCount());
// Destroy the Panel.
panel = nullptr;
if (delegate) {
// Verify that nothing is keeping a reference to the delegate.
EXPECT_TRUE(delegate->HasOneRef());
}
}
void CreatePanelNoDelegateImpl() {
CreatePanel(nullptr);
}
void CreatePanelWithDelegateImpl() {
CreatePanel(new EmptyPanelDelegate);
}
} // namespace
// Test creation.
PANEL_TEST(CreatePanelNoDelegate)
PANEL_TEST(CreatePanelWithDelegate)
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-01-19 21:09:01 +01:00
namespace {
class ParentPanelDelegate : public CefPanelDelegate {
public:
ParentPanelDelegate() = default;
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-01-19 21:09:01 +01:00
void OnParentViewChanged(CefRefPtr<CefView> view,
bool added,
CefRefPtr<CefView> parent) override {
EXPECT_FALSE(true); // Not reached.
}
void OnChildViewChanged(CefRefPtr<CefView> view,
bool added,
CefRefPtr<CefView> child) override {
Changed changed;
changed.view_ = view;
changed.added_ = added;
changed.child_ = child;
changed_.push_back(changed);
}
void Verify(int callback_index,
CefRefPtr<CefView> view,
bool added,
CefRefPtr<CefView> child) {
EXPECT_LT(callback_index, static_cast<int>(changed_.size()));
EXPECT_TRUE(view->IsSame(changed_[callback_index].view_))
<< "callback_index " << callback_index;
EXPECT_EQ(added, changed_[callback_index].added_)
<< "callback_index " << callback_index;
EXPECT_TRUE(child->IsSame(changed_[callback_index].child_))
<< "callback_index " << callback_index;
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-01-19 21:09:01 +01:00
}
void Reset() { changed_.clear(); }
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-01-19 21:09:01 +01:00
bool IsReset() const { return changed_.empty(); }
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-01-19 21:09:01 +01:00
struct Changed {
CefRefPtr<CefView> view_;
bool added_ = false;
CefRefPtr<CefView> child_;
};
std::vector<Changed> changed_;
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-01-19 21:09:01 +01:00
private:
IMPLEMENT_REFCOUNTING(ParentPanelDelegate);
DISALLOW_COPY_AND_ASSIGN(ParentPanelDelegate);
};
class ChildPanelDelegate : public CefPanelDelegate {
public:
ChildPanelDelegate() = default;
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-01-19 21:09:01 +01:00
void OnParentViewChanged(CefRefPtr<CefView> view,
bool added,
CefRefPtr<CefView> parent) override {
EXPECT_FALSE(on_parent_view_changed_);
on_parent_view_changed_ = true;
view_ = view;
added_ = added;
parent_ = parent;
}
void OnChildViewChanged(CefRefPtr<CefView> view,
bool added,
CefRefPtr<CefView> child) override {
EXPECT_FALSE(true); // Not reached.
}
void Verify(CefRefPtr<CefView> view, bool added, CefRefPtr<CefView> parent) {
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-01-19 21:09:01 +01:00
EXPECT_TRUE(on_parent_view_changed_);
EXPECT_TRUE(view->IsSame(view_));
EXPECT_EQ(added, added_);
EXPECT_TRUE(parent->IsSame(parent_));
}
void Reset() {
on_parent_view_changed_ = false;
view_ = nullptr;
added_ = false;
parent_ = nullptr;
}
bool IsReset() const { return !on_parent_view_changed_; }
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-01-19 21:09:01 +01:00
bool on_parent_view_changed_ = false;
CefRefPtr<CefView> view_;
bool added_ = false;
CefRefPtr<CefView> parent_;
private:
IMPLEMENT_REFCOUNTING(ChildPanelDelegate);
DISALLOW_COPY_AND_ASSIGN(ChildPanelDelegate);
};
void ChildVerifyRemovedState(CefRefPtr<ParentPanelDelegate> parent_delegate,
CefRefPtr<CefPanel> parent_panel,
CefRefPtr<ChildPanelDelegate> child_delegate,
CefRefPtr<CefPanel> child_panel) {
EXPECT_FALSE(parent_panel->IsSame(child_panel));
EXPECT_FALSE(child_panel->IsSame(parent_panel));
EXPECT_FALSE(parent_panel->IsAttached());
EXPECT_FALSE(child_panel->IsAttached());
EXPECT_FALSE(parent_panel->GetParentView().get());
EXPECT_FALSE(child_panel->GetParentView().get());
}
void ChildVerifyAddedState(CefRefPtr<ParentPanelDelegate> parent_delegate,
CefRefPtr<CefPanel> parent_panel,
CefRefPtr<ChildPanelDelegate> child_delegate,
CefRefPtr<CefPanel> child_panel,
int expected_child_index) {
EXPECT_FALSE(parent_panel->IsSame(child_panel));
EXPECT_FALSE(child_panel->IsSame(parent_panel));
EXPECT_FALSE(parent_panel->IsAttached());
EXPECT_TRUE(child_panel->IsAttached());
EXPECT_TRUE(
child_panel->IsSame(parent_panel->GetChildViewAt(expected_child_index)));
EXPECT_TRUE(child_panel->GetParentView()->IsSame(parent_panel));
}
void ChildVerifyFinalCallbackState(
CefRefPtr<ParentPanelDelegate> parent_delegate,
CefRefPtr<CefPanel> parent_panel,
CefRefPtr<ChildPanelDelegate> child_delegate,
CefRefPtr<CefPanel> child_panel,
int expected_parent_callback_index,
bool added) {
parent_delegate->Verify(expected_parent_callback_index, parent_panel, added,
child_panel);
child_delegate->Verify(child_panel, added, parent_panel);
}
void ChildAdd(CefRefPtr<ParentPanelDelegate> parent_delegate,
CefRefPtr<CefPanel> parent_panel,
CefRefPtr<ChildPanelDelegate> child_delegate,
CefRefPtr<CefPanel> child_panel,
int expected_child_index = 0,
int expected_parent_callback_index = 0) {
// Verify initial parent/child state.
ChildVerifyRemovedState(parent_delegate, parent_panel, child_delegate,
child_panel);
// Verify initial child callback state.
EXPECT_TRUE(child_delegate->IsReset());
// Add the child view.
parent_panel->AddChildView(child_panel);
// Verify final callback state.
ChildVerifyFinalCallbackState(parent_delegate, parent_panel, child_delegate,
child_panel, expected_parent_callback_index,
true);
// Reset child callback state.
child_delegate->Reset();
// Verify final parent/child state.
ChildVerifyAddedState(parent_delegate, parent_panel, child_delegate,
child_panel, expected_child_index);
}
void ChildAddAt(CefRefPtr<ParentPanelDelegate> parent_delegate,
CefRefPtr<CefPanel> parent_panel,
CefRefPtr<ChildPanelDelegate> child_delegate,
CefRefPtr<CefPanel> child_panel,
int child_index,
int expected_parent_callback_index) {
// Verify initial parent/child state.
ChildVerifyRemovedState(parent_delegate, parent_panel, child_delegate,
child_panel);
// Verify initial child callback state.
EXPECT_TRUE(child_delegate->IsReset());
// Add the child view.
parent_panel->AddChildViewAt(child_panel, child_index);
// Verify final callback state.
ChildVerifyFinalCallbackState(parent_delegate, parent_panel, child_delegate,
child_panel, expected_parent_callback_index,
true);
// Reset child callback state.
child_delegate->Reset();
// Verify final parent/child state.
ChildVerifyAddedState(parent_delegate, parent_panel, child_delegate,
child_panel, child_index);
}
void ChildRemove(CefRefPtr<ParentPanelDelegate> parent_delegate,
CefRefPtr<CefPanel> parent_panel,
CefRefPtr<ChildPanelDelegate> child_delegate,
CefRefPtr<CefPanel> child_panel,
bool remove_all,
int expected_child_index = 0,
int expected_parent_callback_index = 0) {
// Verify initial parent/child state.
ChildVerifyAddedState(parent_delegate, parent_panel, child_delegate,
child_panel, expected_child_index);
// Verify initial child callback state.
EXPECT_TRUE(child_delegate->IsReset());
// Remove the child view.
2023-01-02 23:59:03 +01:00
if (remove_all) {
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-01-19 21:09:01 +01:00
parent_panel->RemoveAllChildViews();
2023-01-02 23:59:03 +01:00
} else {
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-01-19 21:09:01 +01:00
parent_panel->RemoveChildView(child_panel);
2023-01-02 23:59:03 +01:00
}
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-01-19 21:09:01 +01:00
// Verify final callback state.
ChildVerifyFinalCallbackState(parent_delegate, parent_panel, child_delegate,
child_panel, expected_parent_callback_index,
false);
// Reset child callback state.
child_delegate->Reset();
// Verify final parent/child state.
ChildVerifyRemovedState(parent_delegate, parent_panel, child_delegate,
child_panel);
}
void ChildAddRemoveSingleImpl() {
CefRefPtr<ParentPanelDelegate> parent_delegate = new ParentPanelDelegate();
CefRefPtr<CefPanel> parent_panel = CefPanel::CreatePanel(parent_delegate);
CefRefPtr<ChildPanelDelegate> child_delegate = new ChildPanelDelegate();
CefRefPtr<CefPanel> child_panel = CefPanel::CreatePanel(child_delegate);
// Add and explicitly remove the child view.
EXPECT_TRUE(parent_delegate->IsReset());
ChildAdd(parent_delegate, parent_panel, child_delegate, child_panel);
parent_delegate->Reset();
ChildRemove(parent_delegate, parent_panel, child_delegate, child_panel,
false);
parent_delegate->Reset();
// Add and implicitly remove the child view.
ChildAdd(parent_delegate, parent_panel, child_delegate, child_panel);
parent_delegate->Reset();
ChildRemove(parent_delegate, parent_panel, child_delegate, child_panel,
false);
parent_delegate->Reset();
}
void ChildAddRemoveMultipleImpl() {
CefRefPtr<ParentPanelDelegate> parent_delegate = new ParentPanelDelegate();
CefRefPtr<CefPanel> parent_panel = CefPanel::CreatePanel(parent_delegate);
CefRefPtr<ChildPanelDelegate> child_delegate1 = new ChildPanelDelegate();
CefRefPtr<CefPanel> child_panel1 = CefPanel::CreatePanel(child_delegate1);
CefRefPtr<ChildPanelDelegate> child_delegate2 = new ChildPanelDelegate();
CefRefPtr<CefPanel> child_panel2 = CefPanel::CreatePanel(child_delegate2);
// Add multiple child views.
EXPECT_TRUE(parent_delegate->IsReset());
ChildAdd(parent_delegate, parent_panel, child_delegate1, child_panel1, 0, 0);
EXPECT_TRUE(child_delegate2->IsReset()); // child2 not called.
ChildAdd(parent_delegate, parent_panel, child_delegate2, child_panel2, 1, 1);
EXPECT_TRUE(child_delegate1->IsReset()); // child1 not called.
parent_delegate->Reset();
EXPECT_EQ(2U, parent_panel->GetChildViewCount());
// Explicitly remove specific child views.
ChildRemove(parent_delegate, parent_panel, child_delegate1, child_panel1,
false, 0, 0);
EXPECT_TRUE(child_delegate2->IsReset()); // child2 not called.
ChildRemove(parent_delegate, parent_panel, child_delegate2, child_panel2,
false, 0, 1);
EXPECT_TRUE(child_delegate1->IsReset()); // child1 not called.
parent_delegate->Reset();
EXPECT_EQ(0U, parent_panel->GetChildViewCount());
// Add multiple child views.
ChildAdd(parent_delegate, parent_panel, child_delegate1, child_panel1, 0, 0);
EXPECT_TRUE(child_delegate2->IsReset()); // child2 not called.
ChildAdd(parent_delegate, parent_panel, child_delegate2, child_panel2, 1, 1);
EXPECT_TRUE(child_delegate1->IsReset()); // child1 not called.
parent_delegate->Reset();
EXPECT_EQ(2U, parent_panel->GetChildViewCount());
EXPECT_TRUE(child_delegate1->IsReset());
EXPECT_TRUE(child_delegate2->IsReset());
// Implicitly remove all child views.
parent_panel->RemoveAllChildViews();
// Verify final callback state.
ChildVerifyFinalCallbackState(parent_delegate, parent_panel, child_delegate1,
child_panel1, 0, false);
ChildVerifyFinalCallbackState(parent_delegate, parent_panel, child_delegate2,
child_panel2, 1, false);
EXPECT_EQ(0U, parent_panel->GetChildViewCount());
// Reset callback state.
parent_delegate->Reset();
child_delegate1->Reset();
child_delegate2->Reset();
// Verify final parent/child state.
ChildVerifyRemovedState(parent_delegate, parent_panel, child_delegate1,
child_panel1);
ChildVerifyRemovedState(parent_delegate, parent_panel, child_delegate2,
child_panel2);
}
void ChildOrderImpl() {
CefRefPtr<ParentPanelDelegate> parent_delegate = new ParentPanelDelegate();
CefRefPtr<CefPanel> parent_panel = CefPanel::CreatePanel(parent_delegate);
CefRefPtr<ChildPanelDelegate> child_delegate1 = new ChildPanelDelegate();
CefRefPtr<CefPanel> child_panel1 = CefPanel::CreatePanel(child_delegate1);
CefRefPtr<ChildPanelDelegate> child_delegate2 = new ChildPanelDelegate();
CefRefPtr<CefPanel> child_panel2 = CefPanel::CreatePanel(child_delegate2);
CefRefPtr<ChildPanelDelegate> child_delegate3 = new ChildPanelDelegate();
CefRefPtr<CefPanel> child_panel3 = CefPanel::CreatePanel(child_delegate3);
// Add child views at specific indexes.
ChildAddAt(parent_delegate, parent_panel, child_delegate2, child_panel2, 0,
0);
ChildAddAt(parent_delegate, parent_panel, child_delegate3, child_panel3, 0,
1);
ChildAddAt(parent_delegate, parent_panel, child_delegate1, child_panel1, 1,
2);
parent_delegate->Reset();
EXPECT_EQ(3U, parent_panel->GetChildViewCount());
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-01-19 21:09:01 +01:00
// ChildAddAt() will verify these results but let's check again just to make
// sure.
EXPECT_TRUE(child_panel3->IsSame(parent_panel->GetChildViewAt(0)));
EXPECT_TRUE(child_panel1->IsSame(parent_panel->GetChildViewAt(1)));
EXPECT_TRUE(child_panel2->IsSame(parent_panel->GetChildViewAt(2)));
// Move panel2 to the front.
parent_panel->ReorderChildView(child_panel2, 0);
EXPECT_TRUE(child_panel2->IsSame(parent_panel->GetChildViewAt(0)));
EXPECT_TRUE(child_panel3->IsSame(parent_panel->GetChildViewAt(1)));
EXPECT_TRUE(child_panel1->IsSame(parent_panel->GetChildViewAt(2)));
// Move panel3 to the end.
parent_panel->ReorderChildView(child_panel3, -1);
EXPECT_TRUE(child_panel2->IsSame(parent_panel->GetChildViewAt(0)));
EXPECT_TRUE(child_panel1->IsSame(parent_panel->GetChildViewAt(1)));
EXPECT_TRUE(child_panel3->IsSame(parent_panel->GetChildViewAt(2)));
}
void ChildVisibleImpl() {
CefRefPtr<CefPanel> parent_panel = CefPanel::CreatePanel(nullptr);
CefRefPtr<CefPanel> child_panel1 = CefPanel::CreatePanel(nullptr);
CefRefPtr<CefPanel> child_panel2 = CefPanel::CreatePanel(nullptr);
// Nothing drawn by default.
EXPECT_FALSE(parent_panel->IsDrawn());
EXPECT_FALSE(child_panel1->IsDrawn());
EXPECT_FALSE(child_panel2->IsDrawn());
// Everything visible by default.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
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-01-19 21:09:01 +01:00
parent_panel->AddChildView(child_panel1);
parent_panel->AddChildView(child_panel2);
// Still the same.
EXPECT_FALSE(parent_panel->IsDrawn());
EXPECT_FALSE(child_panel1->IsDrawn());
EXPECT_FALSE(child_panel2->IsDrawn());
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
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-01-19 21:09:01 +01:00
child_panel1->SetVisible(false);
// Child1 not visible.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_FALSE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
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-01-19 21:09:01 +01:00
child_panel1->SetVisible(true);
// Everything visible.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
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-01-19 21:09:01 +01:00
parent_panel->SetVisible(false);
// Children visible.
EXPECT_FALSE(parent_panel->IsVisible());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
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-01-19 21:09:01 +01:00
parent_panel->SetVisible(true);
// Everything visible.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
}
void ChildDrawnImpl() {
CefRefPtr<CefPanel> parent_panel = CefPanel::CreatePanel(nullptr);
CefRefPtr<CefPanel> child_panel1 = CefPanel::CreatePanel(nullptr);
CefRefPtr<CefPanel> child_panel2 = CefPanel::CreatePanel(nullptr);
// Nothing drawn by default.
EXPECT_FALSE(parent_panel->IsDrawn());
EXPECT_FALSE(child_panel1->IsDrawn());
EXPECT_FALSE(child_panel2->IsDrawn());
// Everything visible by default.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel2->IsVisible());
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-01-19 21:09:01 +01:00
parent_panel->AddChildView(child_panel1);
parent_panel->AddChildView(child_panel2);
// Create and show a Window.
CefRefPtr<CefWindow> window = CefWindow::CreateTopLevelWindow(nullptr);
window->AddChildView(parent_panel);
window->CenterWindow(CefSize(400, 400));
window->Show();
// Everything visible and drawn now.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(parent_panel->IsDrawn());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel1->IsDrawn());
EXPECT_TRUE(child_panel2->IsVisible());
EXPECT_TRUE(child_panel2->IsDrawn());
child_panel1->SetVisible(false);
// Child1 not visible or drawn.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(parent_panel->IsDrawn());
EXPECT_FALSE(child_panel1->IsVisible());
EXPECT_FALSE(child_panel1->IsDrawn());
EXPECT_TRUE(child_panel2->IsVisible());
EXPECT_TRUE(child_panel2->IsDrawn());
child_panel1->SetVisible(true);
// Everything visible and drawn.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(parent_panel->IsDrawn());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel1->IsDrawn());
EXPECT_TRUE(child_panel2->IsVisible());
EXPECT_TRUE(child_panel2->IsDrawn());
parent_panel->SetVisible(false);
// Children visible, but nothing drawn.
EXPECT_FALSE(parent_panel->IsVisible());
EXPECT_FALSE(parent_panel->IsDrawn());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_FALSE(child_panel1->IsDrawn());
EXPECT_TRUE(child_panel2->IsVisible());
EXPECT_FALSE(child_panel2->IsDrawn());
parent_panel->SetVisible(true);
// Everything visible and drawn.
EXPECT_TRUE(parent_panel->IsVisible());
EXPECT_TRUE(parent_panel->IsDrawn());
EXPECT_TRUE(child_panel1->IsVisible());
EXPECT_TRUE(child_panel1->IsDrawn());
EXPECT_TRUE(child_panel2->IsVisible());
EXPECT_TRUE(child_panel2->IsDrawn());
// Close the window.
window->Close();
}
views: Add support for OS and Chrome themes (fixes #3610, fixes #3671) Controls now respect OS and Chrome themes by default for both Alloy and Chrome runtimes. Chrome themes (mode and colors) can be configured using the new CefRequestContext::SetChromeColorScheme method. Individual theme colors can be overridden using the new CefWindowDelegate:: OnThemeColorsChanged and CefWindow::SetThemeColor methods. The `--force-light-mode` and `--force-dark-mode` command-line flags are now respected on all platforms as an override for the OS theme. The current Chrome theme, if any, will take precedence over the OS theme when determining light/dark status. On Windows and MacOS the titlebar color will also be updated to match the light/dark theme. Testable as follows: - Run: `cefclient --enable-chrome-runtime` OR `cefclient --use-views --persist-user-preferences --cache-path=...` - App launches with default OS light/dark theme colors. - Change OS dark/light theme under system settings. Notice that theme colors change as expected. - Right click, select items from the new Theme sub-menu. Notice that theme colors behave as expected. - Exit and relaunch the app. Notice that the last-used theme colors are applied on app restart. - Add `--background-color=green` to above command-line. - Perform the same actions as above. Notice that all controls start and remain green throughout (except some icons with Chrome runtime). - Add `--force-light-mode` or `--force-dark-mode` to above command-line. - Perform the same actions as above. Notice that OS dark/light theme changes are ignored, but Chrome theme changes work as expected.
2024-03-29 17:48:33 +01:00
class ThemePanelDelegate : public CefPanelDelegate {
public:
ThemePanelDelegate() = default;
void OnThemeChanged(CefRefPtr<CefView> view) override {
theme_changed_ct_++;
if (override_color_) {
view->SetBackgroundColor(*override_color_);
}
}
size_t theme_changed_ct_ = 0;
std::optional<cef_color_t> override_color_;
private:
IMPLEMENT_REFCOUNTING(ThemePanelDelegate);
DISALLOW_COPY_AND_ASSIGN(ThemePanelDelegate);
};
class ThemeWindowDelegate : public CefWindowDelegate {
public:
ThemeWindowDelegate() = default;
void OnThemeChanged(CefRefPtr<CefView> view) override { theme_changed_ct_++; }
void OnThemeColorsChanged(CefRefPtr<CefWindow> window,
bool chrome_theme) override {
native_theme_changed_ct_++;
}
size_t theme_changed_ct_ = 0;
size_t native_theme_changed_ct_ = 0;
private:
IMPLEMENT_REFCOUNTING(ThemeWindowDelegate);
DISALLOW_COPY_AND_ASSIGN(ThemeWindowDelegate);
};
void ChildThemeImpl() {
CefRefPtr<ThemePanelDelegate> parent_panel_delegate =
new ThemePanelDelegate();
CefRefPtr<CefPanel> parent_panel =
CefPanel::CreatePanel(parent_panel_delegate.get());
CefRefPtr<ThemePanelDelegate> child_panel_delegate = new ThemePanelDelegate();
CefRefPtr<CefPanel> child_panel =
CefPanel::CreatePanel(child_panel_delegate.get());
// No calls to OnThemeChanged (no Window yet).
EXPECT_EQ(0U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(0U, child_panel_delegate->theme_changed_ct_);
parent_panel->AddChildView(child_panel);
// No calls to OnThemeChanged (no Window yet).
EXPECT_EQ(0U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(0U, child_panel_delegate->theme_changed_ct_);
// Create a Window. Triggers OnThemeChanged for the Window because it's also
// a View in the initial Window component hierarchy.
CefRefPtr<ThemeWindowDelegate> window_delegate = new ThemeWindowDelegate();
CefRefPtr<CefWindow> window =
CefWindow::CreateTopLevelWindow(window_delegate.get());
// OnThemeChanged called for |window_delegate|. No calls to
// OnThemeColorsChanged.
EXPECT_EQ(0U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(0U, child_panel_delegate->theme_changed_ct_);
EXPECT_EQ(1U, window_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->native_theme_changed_ct_);
window_delegate->theme_changed_ct_ = 0;
// Add |parent_panel| to the Window. Triggers OnThemeChanged for the component
// hierarchy starting with |parent_panel|.
window->AddChildView(parent_panel);
// OnThemeChanged called for |parent_panel| and |child_panel|. No calls to
// OnThemeColorsChanged.
EXPECT_EQ(1U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(1U, child_panel_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->native_theme_changed_ct_);
parent_panel_delegate->theme_changed_ct_ = 0;
child_panel_delegate->theme_changed_ct_ = 0;
// Verify that all components have the default background color.
const cef_color_t default_color =
window->GetThemeColor(CEF_ColorPrimaryBackground);
EXPECT_EQ(default_color, window->GetBackgroundColor());
EXPECT_EQ(default_color, parent_panel->GetBackgroundColor());
EXPECT_EQ(default_color,
parent_panel->GetThemeColor(CEF_ColorPrimaryBackground));
EXPECT_EQ(default_color, child_panel->GetBackgroundColor());
EXPECT_EQ(default_color,
child_panel->GetThemeColor(CEF_ColorPrimaryBackground));
// Change the default background color for the global theme.
const cef_color_t new_color = CefColorSetARGB(255, 0, 0, 255);
EXPECT_NE(default_color, new_color);
window->SetThemeColor(CEF_ColorPrimaryBackground, new_color);
EXPECT_EQ(new_color, window->GetThemeColor(CEF_ColorPrimaryBackground));
// Components don't get the change immediately.
EXPECT_EQ(default_color, window->GetBackgroundColor());
EXPECT_EQ(default_color, parent_panel->GetBackgroundColor());
EXPECT_EQ(default_color, child_panel->GetBackgroundColor());
// No calls to OnThemeChanged or OnThemeColorsChanged (pending ThemeChanged
// call).
EXPECT_EQ(0U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(0U, child_panel_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->native_theme_changed_ct_);
// Trigger OnThemeChanged calls.
window->ThemeChanged();
// OnThemeChanged called for the complete component hierarchy. No calls to
// OnThemeColorsChanged.
EXPECT_EQ(1U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(1U, child_panel_delegate->theme_changed_ct_);
EXPECT_EQ(1U, window_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->native_theme_changed_ct_);
parent_panel_delegate->theme_changed_ct_ = 0;
child_panel_delegate->theme_changed_ct_ = 0;
window_delegate->theme_changed_ct_ = 0;
// Verify that all components have the new background color.
EXPECT_EQ(new_color, window->GetBackgroundColor());
EXPECT_EQ(new_color, parent_panel->GetBackgroundColor());
EXPECT_EQ(new_color, parent_panel->GetThemeColor(CEF_ColorPrimaryBackground));
EXPECT_EQ(new_color, child_panel->GetBackgroundColor());
EXPECT_EQ(new_color, child_panel->GetThemeColor(CEF_ColorPrimaryBackground));
// Customize the background color for |child_panel| when OnThemeChanged is
// called next.
const cef_color_t child_color = CefColorSetARGB(255, 0, 255, 0);
child_panel_delegate->override_color_ = child_color;
// Trigger OnThemeChanged calls.
window->ThemeChanged();
// OnThemeChanged called for the complete component hierarchy. No calls to
// OnThemeColorsChanged.
EXPECT_EQ(1U, parent_panel_delegate->theme_changed_ct_);
EXPECT_EQ(1U, child_panel_delegate->theme_changed_ct_);
EXPECT_EQ(1U, window_delegate->theme_changed_ct_);
EXPECT_EQ(0U, window_delegate->native_theme_changed_ct_);
parent_panel_delegate->theme_changed_ct_ = 0;
child_panel_delegate->theme_changed_ct_ = 0;
window_delegate->theme_changed_ct_ = 0;
// Verify that all components have the expected background color.
EXPECT_EQ(new_color, window->GetBackgroundColor());
EXPECT_EQ(new_color, parent_panel->GetBackgroundColor());
EXPECT_EQ(new_color, parent_panel->GetThemeColor(CEF_ColorPrimaryBackground));
EXPECT_EQ(child_color, child_panel->GetBackgroundColor());
EXPECT_EQ(new_color, child_panel->GetThemeColor(CEF_ColorPrimaryBackground));
// New Window gets the same (new) background color.
CefRefPtr<CefWindow> new_window = CefWindow::CreateTopLevelWindow(nullptr);
EXPECT_EQ(new_color, new_window->GetBackgroundColor());
// Restore the default background color for the global theme.
window->SetThemeColor(CEF_ColorPrimaryBackground, default_color);
EXPECT_EQ(default_color, window->GetThemeColor(CEF_ColorPrimaryBackground));
// Close the windows to avoid dangling references.
window->Close();
new_window->Close();
views: Add support for OS and Chrome themes (fixes #3610, fixes #3671) Controls now respect OS and Chrome themes by default for both Alloy and Chrome runtimes. Chrome themes (mode and colors) can be configured using the new CefRequestContext::SetChromeColorScheme method. Individual theme colors can be overridden using the new CefWindowDelegate:: OnThemeColorsChanged and CefWindow::SetThemeColor methods. The `--force-light-mode` and `--force-dark-mode` command-line flags are now respected on all platforms as an override for the OS theme. The current Chrome theme, if any, will take precedence over the OS theme when determining light/dark status. On Windows and MacOS the titlebar color will also be updated to match the light/dark theme. Testable as follows: - Run: `cefclient --enable-chrome-runtime` OR `cefclient --use-views --persist-user-preferences --cache-path=...` - App launches with default OS light/dark theme colors. - Change OS dark/light theme under system settings. Notice that theme colors change as expected. - Right click, select items from the new Theme sub-menu. Notice that theme colors behave as expected. - Exit and relaunch the app. Notice that the last-used theme colors are applied on app restart. - Add `--background-color=green` to above command-line. - Perform the same actions as above. Notice that all controls start and remain green throughout (except some icons with Chrome runtime). - Add `--force-light-mode` or `--force-dark-mode` to above command-line. - Perform the same actions as above. Notice that OS dark/light theme changes are ignored, but Chrome theme changes work as expected.
2024-03-29 17:48:33 +01:00
}
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-01-19 21:09:01 +01:00
} // namespace
// Test child behaviors.
PANEL_TEST(ChildAddRemoveSingle)
PANEL_TEST(ChildAddRemoveMultiple)
PANEL_TEST(ChildOrder)
PANEL_TEST(ChildVisible)
PANEL_TEST(ChildDrawn)
views: Add support for OS and Chrome themes (fixes #3610, fixes #3671) Controls now respect OS and Chrome themes by default for both Alloy and Chrome runtimes. Chrome themes (mode and colors) can be configured using the new CefRequestContext::SetChromeColorScheme method. Individual theme colors can be overridden using the new CefWindowDelegate:: OnThemeColorsChanged and CefWindow::SetThemeColor methods. The `--force-light-mode` and `--force-dark-mode` command-line flags are now respected on all platforms as an override for the OS theme. The current Chrome theme, if any, will take precedence over the OS theme when determining light/dark status. On Windows and MacOS the titlebar color will also be updated to match the light/dark theme. Testable as follows: - Run: `cefclient --enable-chrome-runtime` OR `cefclient --use-views --persist-user-preferences --cache-path=...` - App launches with default OS light/dark theme colors. - Change OS dark/light theme under system settings. Notice that theme colors change as expected. - Right click, select items from the new Theme sub-menu. Notice that theme colors behave as expected. - Exit and relaunch the app. Notice that the last-used theme colors are applied on app restart. - Add `--background-color=green` to above command-line. - Perform the same actions as above. Notice that all controls start and remain green throughout (except some icons with Chrome runtime). - Add `--force-light-mode` or `--force-dark-mode` to above command-line. - Perform the same actions as above. Notice that OS dark/light theme changes are ignored, but Chrome theme changes work as expected.
2024-03-29 17:48:33 +01:00
PANEL_TEST(ChildTheme)
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-01-19 21:09:01 +01:00
namespace {
class SizingPanelDelegate : public CefPanelDelegate {
public:
SizingPanelDelegate() = default;
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-01-19 21:09:01 +01:00
CefSize GetPreferredSize(CefRefPtr<CefView> view) override {
got_get_preferred_size_ = true;
view_ = view;
return preferred_size_;
}
CefSize GetMinimumSize(CefRefPtr<CefView> view) override {
got_get_minimum_size_ = true;
view_ = view;
return minimum_size_;
}
CefSize GetMaximumSize(CefRefPtr<CefView> view) override {
got_get_maximum_size_ = true;
view_ = view;
return maximum_size_;
}
int GetHeightForWidth(CefRefPtr<CefView> view, int width) override {
got_get_height_for_width_ = true;
view_ = view;
width_ = width;
return height_for_width_;
}
void Reset() {
preferred_size_ = CefSize(0, 0);
minimum_size_ = CefSize(0, 0);
maximum_size_ = CefSize(0, 0);
height_for_width_ = 0;
got_get_preferred_size_ = false;
got_get_minimum_size_ = false;
got_get_maximum_size_ = false;
got_get_height_for_width_ = false;
view_ = nullptr;
width_ = 0;
}
bool IsReset() const {
return !got_get_preferred_size_ && !got_get_minimum_size_ &&
!got_get_maximum_size_ && !got_get_height_for_width_;
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-01-19 21:09:01 +01:00
}
CefSize preferred_size_;
CefSize minimum_size_;
CefSize maximum_size_;
int height_for_width_ = 0;
bool got_get_preferred_size_ = false;
bool got_get_minimum_size_ = false;
bool got_get_maximum_size_ = false;
bool got_get_height_for_width_ = false;
CefRefPtr<CefView> view_;
int width_ = 0;
private:
IMPLEMENT_REFCOUNTING(SizingPanelDelegate);
DISALLOW_COPY_AND_ASSIGN(SizingPanelDelegate);
};
void SizeNoDelegateImpl() {
CefRefPtr<SizingPanelDelegate> delegate = new SizingPanelDelegate();
CefRefPtr<CefPanel> panel = CefPanel::CreatePanel(delegate);
// Default bounds are empty.
EXPECT_EQ(CefRect(0, 0, 0, 0), panel->GetBounds());
// Set and get the bounds.
panel->SetBounds(CefRect(100, 100, 200, 200));
EXPECT_EQ(CefRect(100, 100, 200, 200), panel->GetBounds());
EXPECT_EQ(CefSize(200, 200), panel->GetSize());
EXPECT_EQ(CefPoint(100, 100), panel->GetPosition());
// GetBoundsInScreen() drops the position because there is no Window.
EXPECT_EQ(CefRect(0, 0, 200, 200), panel->GetBoundsInScreen());
// Adjust the position but keep the size the same.
panel->SetPosition(CefPoint(50, 50));
EXPECT_EQ(CefRect(50, 50, 200, 200), panel->GetBounds());
EXPECT_EQ(CefSize(200, 200), panel->GetSize());
EXPECT_EQ(CefPoint(50, 50), panel->GetPosition());
// Adjust the size but keep the position the same.
panel->SetSize(CefSize(400, 400));
EXPECT_EQ(CefRect(50, 50, 400, 400), panel->GetBounds());
EXPECT_EQ(CefSize(400, 400), panel->GetSize());
EXPECT_EQ(CefPoint(50, 50), panel->GetPosition());
// No delegate methods were called during this test.
EXPECT_TRUE(delegate->IsReset());
}
void SizeWithDelegateImpl() {
CefRefPtr<SizingPanelDelegate> delegate = new SizingPanelDelegate();
CefRefPtr<CefPanel> panel = CefPanel::CreatePanel(delegate);
// Default bounds are empty.
EXPECT_EQ(CefRect(0, 0, 0, 0), panel->GetBounds());
CefSize expected_size(100, 100);
// Test GetPreferredSize().
delegate->preferred_size_ = expected_size;
EXPECT_EQ(expected_size, panel->GetPreferredSize());
EXPECT_TRUE(delegate->got_get_preferred_size_);
EXPECT_FALSE(delegate->got_get_minimum_size_);
EXPECT_FALSE(delegate->got_get_maximum_size_);
EXPECT_FALSE(delegate->got_get_height_for_width_);
EXPECT_TRUE(panel->IsSame(delegate->view_));
delegate->Reset();
// Test GetMinimumSize().
delegate->minimum_size_ = expected_size;
EXPECT_EQ(expected_size, panel->GetMinimumSize());
EXPECT_FALSE(delegate->got_get_preferred_size_);
EXPECT_TRUE(delegate->got_get_minimum_size_);
EXPECT_FALSE(delegate->got_get_maximum_size_);
EXPECT_FALSE(delegate->got_get_height_for_width_);
EXPECT_TRUE(panel->IsSame(delegate->view_));
delegate->Reset();
// Test GetMaximumSize().
delegate->maximum_size_ = expected_size;
EXPECT_EQ(expected_size, panel->GetMaximumSize());
EXPECT_FALSE(delegate->got_get_preferred_size_);
EXPECT_FALSE(delegate->got_get_minimum_size_);
EXPECT_TRUE(delegate->got_get_maximum_size_);
EXPECT_FALSE(delegate->got_get_height_for_width_);
EXPECT_TRUE(panel->IsSame(delegate->view_));
delegate->Reset();
int expected_width = 200;
int expected_height = 100;
// Test GetHeightForWidth().
delegate->height_for_width_ = expected_height;
EXPECT_EQ(expected_height, panel->GetHeightForWidth(expected_width));
EXPECT_FALSE(delegate->got_get_preferred_size_);
EXPECT_FALSE(delegate->got_get_minimum_size_);
EXPECT_FALSE(delegate->got_get_maximum_size_);
EXPECT_TRUE(delegate->got_get_height_for_width_);
EXPECT_EQ(expected_width, delegate->width_);
EXPECT_TRUE(panel->IsSame(delegate->view_));
delegate->Reset();
}
} // namespace
// Test sizing.
PANEL_TEST(SizeNoDelegate)
PANEL_TEST(SizeWithDelegate)
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-01-19 21:09:01 +01:00
namespace {
void FillLayoutCreateImpl() {
CefRefPtr<CefPanel> panel = CefPanel::CreatePanel(nullptr);
// Explicitly set to FillLayout.
panel->SetToFillLayout();
CefRefPtr<CefLayout> layout = panel->GetLayout();
EXPECT_TRUE(layout.get());
EXPECT_TRUE(layout->AsFillLayout().get());
}
void FillLayoutSizeToPreferredSizeImpl() {
CefRefPtr<SizingPanelDelegate> delegate = new SizingPanelDelegate();
CefRefPtr<CefPanel> panel = CefPanel::CreatePanel(delegate);
// Default Layout is FillLayout.
CefRefPtr<CefLayout> layout = panel->GetLayout();
EXPECT_TRUE(layout.get());
EXPECT_TRUE(layout->AsFillLayout().get());
// Default bounds are empty.
EXPECT_EQ(CefRect(0, 0, 0, 0), panel->GetBounds());
CefSize expected_size(100, 100);
delegate->preferred_size_ = expected_size;
// Trigger use of the preferred size.
panel->Layout();
EXPECT_TRUE(delegate->got_get_preferred_size_);
EXPECT_FALSE(delegate->got_get_minimum_size_);
EXPECT_FALSE(delegate->got_get_maximum_size_);
EXPECT_FALSE(delegate->got_get_height_for_width_);
EXPECT_TRUE(panel->IsSame(delegate->view_));
delegate->Reset();
// Size is now the preferred size.
EXPECT_EQ(expected_size, panel->GetSize());
// No additional delegate methods were called.
EXPECT_TRUE(delegate->IsReset());
}
void FillLayoutSizeHierarchyImpl() {
CefRefPtr<CefPanel> panel_parent = CefPanel::CreatePanel(nullptr);
CefRefPtr<CefPanel> panel_child = CefPanel::CreatePanel(nullptr);
CefSize expected_size(100, 100);
// Default Layout is FillLayout.
CefRefPtr<CefLayout> layout1 = panel_parent->GetLayout();
EXPECT_TRUE(layout1.get());
EXPECT_TRUE(layout1->AsFillLayout().get());
// Default bounds are empty.
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_parent->GetBounds());
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_child->GetBounds());
// Without delegates the size must be set on the parent.
panel_parent->SetSize(expected_size);
// FillLayout is the default Layout. Both panels should end up with the same
// size.
panel_parent->AddChildView(panel_child);
// Force layout.
panel_parent->Layout();
// Panels are now the same size.
EXPECT_EQ(expected_size, panel_parent->GetSize());
EXPECT_EQ(expected_size, panel_child->GetSize());
// Resize the parent panel to a larger size.
CefSize expected_size2(200, 200);
panel_parent->SetSize(expected_size2);
// Force layout.
panel_parent->Layout();
// Panels are now the larger size.
EXPECT_EQ(expected_size2, panel_parent->GetSize());
EXPECT_EQ(expected_size2, panel_child->GetSize());
}
void FillLayoutSizeHierarchyWithDelegate(bool size_from_parent) {
CefRefPtr<SizingPanelDelegate> delegate_parent = new SizingPanelDelegate();
CefRefPtr<CefPanel> panel_parent = CefPanel::CreatePanel(delegate_parent);
CefRefPtr<SizingPanelDelegate> delegate_child = new SizingPanelDelegate();
CefRefPtr<CefPanel> panel_child = CefPanel::CreatePanel(delegate_child);
CefSize expected_size(100, 100);
// The default layout is FillLayout, but explicitly set it anyways just for
// some testing variety.
panel_parent->SetToFillLayout();
panel_child->SetToFillLayout();
// Default bounds are empty.
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_parent->GetBounds());
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_child->GetBounds());
// With delegates the size can come from either the parent or child.
2023-01-02 23:59:03 +01:00
if (size_from_parent) {
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-01-19 21:09:01 +01:00
delegate_parent->preferred_size_ = expected_size;
2023-01-02 23:59:03 +01:00
} else {
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-01-19 21:09:01 +01:00
delegate_child->preferred_size_ = expected_size;
2023-01-02 23:59:03 +01:00
}
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-01-19 21:09:01 +01:00
// FillLayout is the default Layout. Both panels should end up with the same
// size.
panel_parent->AddChildView(panel_child);
// No delegate methods were called yet.
EXPECT_TRUE(delegate_parent->IsReset());
EXPECT_TRUE(delegate_child->IsReset());
// Force layout.
panel_parent->Layout();
// delegate_parent will be called to get the preferred size for panel_parent.
EXPECT_TRUE(delegate_parent->got_get_preferred_size_);
EXPECT_FALSE(delegate_parent->got_get_minimum_size_);
EXPECT_FALSE(delegate_parent->got_get_maximum_size_);
EXPECT_FALSE(delegate_parent->got_get_height_for_width_);
EXPECT_TRUE(panel_parent->IsSame(delegate_parent->view_));
delegate_parent->Reset();
// delegate_child will be called to get the preferred size for panel_child.
EXPECT_TRUE(delegate_child->got_get_preferred_size_);
EXPECT_FALSE(delegate_child->got_get_minimum_size_);
EXPECT_FALSE(delegate_child->got_get_maximum_size_);
EXPECT_FALSE(delegate_child->got_get_height_for_width_);
EXPECT_TRUE(panel_child->IsSame(delegate_child->view_));
delegate_child->Reset();
// Panels are now the same size.
EXPECT_EQ(expected_size, panel_parent->GetSize());
EXPECT_EQ(expected_size, panel_child->GetSize());
// Resize the parent panel to a larger size.
CefSize expected_size2(200, 200);
panel_parent->SetSize(expected_size2);
// Force layout.
panel_parent->Layout();
// Panels are now the larger size.
EXPECT_EQ(expected_size2, panel_parent->GetSize());
EXPECT_EQ(expected_size2, panel_child->GetSize());
// No additional delegate methods were called.
EXPECT_TRUE(delegate_parent->IsReset());
EXPECT_TRUE(delegate_child->IsReset());
}
void FillLayoutSizeHierarchyFromParentWithDelegateImpl() {
FillLayoutSizeHierarchyWithDelegate(true);
}
void FillLayoutSizeHierarchyFromChildWithDelegateImpl() {
FillLayoutSizeHierarchyWithDelegate(false);
}
} // namespace
// Test FillLayout.
PANEL_TEST(FillLayoutCreate)
PANEL_TEST(FillLayoutSizeToPreferredSize)
PANEL_TEST(FillLayoutSizeHierarchy)
PANEL_TEST(FillLayoutSizeHierarchyFromParentWithDelegate)
PANEL_TEST(FillLayoutSizeHierarchyFromChildWithDelegate)
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-01-19 21:09:01 +01:00
namespace {
void BoxLayoutCreateImpl() {
CefRefPtr<CefPanel> panel = CefPanel::CreatePanel(nullptr);
CefBoxLayoutSettings settings;
// Explicitly set to BoxLayout.
panel->SetToBoxLayout(settings);
CefRefPtr<CefLayout> layout = panel->GetLayout();
EXPECT_TRUE(layout.get());
EXPECT_TRUE(layout->AsBoxLayout().get());
}
const int kBLParentSize = 100;
const int kBLChildSize = 10;
void BoxLayoutSizeHierarchy(bool with_delegate,
const CefBoxLayoutSettings& settings,
const CefRect& expected_child1_bounds,
const CefRect& expected_child2_bounds,
int child1_flex = 0,
int child2_flex = 0) {
CefRefPtr<SizingPanelDelegate> delegate_parent;
2023-01-02 23:59:03 +01:00
if (with_delegate) {
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-01-19 21:09:01 +01:00
delegate_parent = new SizingPanelDelegate();
2023-01-02 23:59:03 +01:00
}
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-01-19 21:09:01 +01:00
CefRefPtr<CefPanel> panel_parent = CefPanel::CreatePanel(delegate_parent);
CefRefPtr<SizingPanelDelegate> delegate_child1, delegate_child2;
if (with_delegate) {
delegate_child1 = new SizingPanelDelegate();
delegate_child2 = new SizingPanelDelegate();
}
CefRefPtr<CefPanel> panel_child1 = CefPanel::CreatePanel(delegate_child1);
CefRefPtr<CefPanel> panel_child2 = CefPanel::CreatePanel(delegate_child2);
// Default bounds are empty.
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_parent->GetBounds());
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_child1->GetBounds());
EXPECT_EQ(CefRect(0, 0, 0, 0), panel_child2->GetBounds());
// Give the parent a size.
CefSize initial_parent_size(kBLParentSize, kBLParentSize);
2023-01-02 23:59:03 +01:00
if (with_delegate) {
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-01-19 21:09:01 +01:00
delegate_parent->preferred_size_ = initial_parent_size;
2023-01-02 23:59:03 +01:00
} else {
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-01-19 21:09:01 +01:00
panel_parent->SetSize(initial_parent_size);
2023-01-02 23:59:03 +01:00
}
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-01-19 21:09:01 +01:00
// Give the children a size smaller than the parent.
CefSize initial_child_size(kBLChildSize, kBLChildSize);
if (with_delegate) {
delegate_child1->preferred_size_ = initial_child_size;
delegate_child2->preferred_size_ = initial_child_size;
} else {
panel_child1->SetSize(initial_child_size);
panel_child2->SetSize(initial_child_size);
}
// Set to BoxLayout with |settings|.
panel_parent->SetToBoxLayout(settings);
panel_parent->AddChildView(panel_child1);
panel_parent->AddChildView(panel_child2);
if (child1_flex > 0 || child2_flex > 0) {
// Flex will apply relative stretch in the main axis direction.
CefRefPtr<CefBoxLayout> layout = panel_parent->GetLayout()->AsBoxLayout();
2023-01-02 23:59:03 +01:00
if (child1_flex > 0) {
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-01-19 21:09:01 +01:00
layout->SetFlexForView(panel_child1, child1_flex);
2023-01-02 23:59:03 +01:00
}
if (child2_flex > 0) {
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-01-19 21:09:01 +01:00
layout->SetFlexForView(panel_child2, child2_flex);
2023-01-02 23:59:03 +01:00
}
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-01-19 21:09:01 +01:00
}
if (with_delegate) {
// No delegate methods were called yet.
EXPECT_TRUE(delegate_parent->IsReset());
EXPECT_TRUE(delegate_child1->IsReset());
EXPECT_TRUE(delegate_child2->IsReset());
}
// Force layout.
panel_parent->Layout();
if (with_delegate) {
// delegate_parent will be called to get the preferred size for
// panel_parent.
EXPECT_TRUE(delegate_parent->got_get_preferred_size_);
EXPECT_FALSE(delegate_parent->got_get_minimum_size_);
EXPECT_FALSE(delegate_parent->got_get_maximum_size_);
EXPECT_FALSE(delegate_parent->got_get_height_for_width_);
EXPECT_TRUE(panel_parent->IsSame(delegate_parent->view_));
delegate_parent->Reset();
// delegate_child1 will be called to get the preferred size for
// panel_child1.
// GetHeightForWidth may also be called depending on the settings.
EXPECT_TRUE(delegate_child1->got_get_preferred_size_);
EXPECT_FALSE(delegate_child1->got_get_minimum_size_);
EXPECT_FALSE(delegate_child1->got_get_maximum_size_);
EXPECT_TRUE(panel_child1->IsSame(delegate_child1->view_));
delegate_child1->Reset();
// delegate_child2 will be called to get the preferred size for
// panel_child2.
// GetHeightForWidth may also be called depending on the settings.
EXPECT_TRUE(delegate_child2->got_get_preferred_size_);
EXPECT_FALSE(delegate_child2->got_get_minimum_size_);
EXPECT_FALSE(delegate_child2->got_get_maximum_size_);
EXPECT_TRUE(panel_child2->IsSame(delegate_child2->view_));
delegate_child2->Reset();
}
// The parent should be the same size.
EXPECT_EQ(initial_parent_size, panel_parent->GetSize());
// Children should have the expected bounds.
EXPECT_EQ(expected_child1_bounds, panel_child1->GetBounds());
EXPECT_EQ(expected_child2_bounds, panel_child2->GetBounds());
if (with_delegate) {
// No additional delegate methods were called.
EXPECT_TRUE(delegate_parent->IsReset());
EXPECT_TRUE(delegate_child1->IsReset());
EXPECT_TRUE(delegate_child2->IsReset());
}
}
void BoxLayoutSizeHierarchyVerticalStretch(bool with_delegate) {
// Vertical layout with children stretched along the horizontal axis.
//
// -----------
// |111111111|
// |222222222|
// | |
// | |
// | |
// -----------
//
CefBoxLayoutSettings settings;
CefRect expected_child1_bounds(0, 0, kBLParentSize, kBLChildSize);
CefRect expected_child2_bounds(0, kBLChildSize, kBLParentSize, kBLChildSize);
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyVerticalStretchImpl() {
BoxLayoutSizeHierarchyVerticalStretch(false);
}
void BoxLayoutSizeHierarchyVerticalStretchWithDelegateImpl() {
BoxLayoutSizeHierarchyVerticalStretch(true);
}
void BoxLayoutSizeHierarchyHorizontalStretch(bool with_delegate) {
// Horizontal layout with children stretched along the vertical axis.
//
// -----------
// |12 |
// |12 |
// |12 |
// |12 |
// |12 |
// -----------
//
CefBoxLayoutSettings settings;
settings.horizontal = true;
CefRect expected_child1_bounds(0, 0, kBLChildSize, kBLParentSize);
CefRect expected_child2_bounds(kBLChildSize, 0, kBLChildSize, kBLParentSize);
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyHorizontalStretchImpl() {
BoxLayoutSizeHierarchyHorizontalStretch(false);
}
void BoxLayoutSizeHierarchyHorizontalStretchWithDelegateImpl() {
BoxLayoutSizeHierarchyHorizontalStretch(true);
}
void BoxLayoutSizeHierarchyVerticalCenter(bool with_delegate) {
// Vertical layout with children centered along the horizontal axis.
//
// -----------
// | 1 |
// | 2 |
// | |
// | |
// | |
// -----------
//
CefBoxLayoutSettings settings;
settings.cross_axis_alignment = CEF_AXIS_ALIGNMENT_CENTER;
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-01-19 21:09:01 +01:00
int xoffset = (kBLParentSize - kBLChildSize) / 2;
CefRect expected_child1_bounds(xoffset, 0, kBLChildSize, kBLChildSize);
CefRect expected_child2_bounds(xoffset, kBLChildSize, kBLChildSize,
kBLChildSize);
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-01-19 21:09:01 +01:00
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyVerticalCenterImpl() {
BoxLayoutSizeHierarchyVerticalCenter(false);
}
void BoxLayoutSizeHierarchyVerticalCenterWithDelegateImpl() {
BoxLayoutSizeHierarchyVerticalCenter(true);
}
void BoxLayoutSizeHierarchyHorizontalCenter(bool with_delegate) {
// Horizontal layout with children centered along the vertical axis.
//
// -----------
// | |
// | |
// |12 |
// | |
// | |
// -----------
//
CefBoxLayoutSettings settings;
settings.horizontal = true;
settings.cross_axis_alignment = CEF_AXIS_ALIGNMENT_CENTER;
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-01-19 21:09:01 +01:00
int yoffset = (kBLParentSize - kBLChildSize) / 2;
CefRect expected_child1_bounds(0, yoffset, kBLChildSize, kBLChildSize);
CefRect expected_child2_bounds(kBLChildSize, yoffset, kBLChildSize,
kBLChildSize);
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-01-19 21:09:01 +01:00
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyHorizontalCenterImpl() {
BoxLayoutSizeHierarchyHorizontalCenter(false);
}
void BoxLayoutSizeHierarchyHorizontalCenterWithDelegateImpl() {
BoxLayoutSizeHierarchyHorizontalCenter(true);
}
void BoxLayoutSizeHierarchyVerticalCenterCenter(bool with_delegate) {
// Vertical layout with children centered along the horizontal and vertical
// axis.
//
// -----------
// | |
// | 1 |
// | 2 |
// | |
// -----------
//
CefBoxLayoutSettings settings;
settings.main_axis_alignment = CEF_AXIS_ALIGNMENT_CENTER;
settings.cross_axis_alignment = CEF_AXIS_ALIGNMENT_CENTER;
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-01-19 21:09:01 +01:00
int xoffset = (kBLParentSize - kBLChildSize) / 2;
int yoffset = (kBLParentSize - (kBLChildSize * 2)) / 2;
CefRect expected_child1_bounds(xoffset, yoffset, kBLChildSize, kBLChildSize);
CefRect expected_child2_bounds(xoffset, yoffset + kBLChildSize, kBLChildSize,
kBLChildSize);
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-01-19 21:09:01 +01:00
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyVerticalCenterCenterImpl() {
BoxLayoutSizeHierarchyVerticalCenterCenter(false);
}
void BoxLayoutSizeHierarchyVerticalCenterCenterWithDelegateImpl() {
BoxLayoutSizeHierarchyVerticalCenterCenter(true);
}
void BoxLayoutSizeHierarchyHorizontalCenterCenter(bool with_delegate) {
// Horizontal layout with children centered along the vertical and horizontal
// axis.
//
// -----------
// | |
// | |
// | 12 |
// | |
// | |
// -----------
//
CefBoxLayoutSettings settings;
settings.horizontal = true;
settings.main_axis_alignment = CEF_AXIS_ALIGNMENT_CENTER;
settings.cross_axis_alignment = CEF_AXIS_ALIGNMENT_CENTER;
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-01-19 21:09:01 +01:00
int xoffset = (kBLParentSize - (kBLChildSize * 2)) / 2;
int yoffset = (kBLParentSize - kBLChildSize) / 2;
CefRect expected_child1_bounds(xoffset, yoffset, kBLChildSize, kBLChildSize);
CefRect expected_child2_bounds(xoffset + kBLChildSize, yoffset, kBLChildSize,
kBLChildSize);
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-01-19 21:09:01 +01:00
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyHorizontalCenterCenterImpl() {
BoxLayoutSizeHierarchyHorizontalCenterCenter(false);
}
void BoxLayoutSizeHierarchyHorizontalCenterCenterWithDelegateImpl() {
BoxLayoutSizeHierarchyHorizontalCenterCenter(true);
}
void BoxLayoutSizeHierarchyVerticalStretchFlexOne(bool with_delegate) {
// Vertical layout with child1 stretched along the horizontal and vertical
// axis and child2 stretched along the horizontal axis only (unequal flex).
//
// -----------
// |111111111|
// |111111111|
// |111111111|
// |111111111|
// |222222222|
// -----------
//
CefBoxLayoutSettings settings;
CefRect expected_child1_bounds(0, 0, kBLParentSize,
kBLParentSize - kBLChildSize);
CefRect expected_child2_bounds(0, kBLParentSize - kBLChildSize, kBLParentSize,
kBLChildSize);
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-01-19 21:09:01 +01:00
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds, 1, 0);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyVerticalStretchFlexOneImpl() {
BoxLayoutSizeHierarchyVerticalStretchFlexOne(false);
}
void BoxLayoutSizeHierarchyVerticalStretchFlexOneWithDelegateImpl() {
BoxLayoutSizeHierarchyVerticalStretchFlexOne(true);
}
void BoxLayoutSizeHierarchyHorizontalStretchFlexOne(bool with_delegate) {
// Horizontal layout with child1 stretched along the vertical and horizontal
// axis and child2 stretched along the vertical axis only (unequal flex).
//
// -----------
// |111111112|
// |111111112|
// |111111112|
// |111111112|
// |111111112|
// -----------
//
CefBoxLayoutSettings settings;
settings.horizontal = true;
CefRect expected_child1_bounds(0, 0, kBLParentSize - kBLChildSize,
kBLParentSize);
CefRect expected_child2_bounds(kBLParentSize - kBLChildSize, 0, kBLChildSize,
kBLParentSize);
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-01-19 21:09:01 +01:00
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds, 1, 0);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyHorizontalStretchFlexOneImpl() {
BoxLayoutSizeHierarchyHorizontalStretchFlexOne(false);
}
void BoxLayoutSizeHierarchyHorizontalStretchFlexOneWithDelegateImpl() {
BoxLayoutSizeHierarchyHorizontalStretchFlexOne(true);
}
void BoxLayoutSizeHierarchyVerticalStretchFlexBoth(bool with_delegate) {
// Vertical layout with children stretched along the horizontal and vertical
// axis (equal flex).
//
// -----------
// |111111111|
// |111111111|
// |111111111|
// |222222222|
// |222222222|
// |222222222|
// -----------
//
CefBoxLayoutSettings settings;
CefRect expected_child1_bounds(0, 0, kBLParentSize, kBLParentSize / 2);
CefRect expected_child2_bounds(0, kBLParentSize / 2, kBLParentSize,
kBLParentSize / 2);
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds, 1, 1);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyVerticalStretchFlexBothImpl() {
BoxLayoutSizeHierarchyVerticalStretchFlexBoth(false);
}
void BoxLayoutSizeHierarchyVerticalStretchFlexBothWithDelegateImpl() {
BoxLayoutSizeHierarchyVerticalStretchFlexBoth(true);
}
void BoxLayoutSizeHierarchyHorizontalStretchFlexBoth(bool with_delegate) {
// Horizontal layout with children stretched along the vertical and horizontal
// axis (equal flex).
//
// -----------
// |111122222|
// |111122222|
// |111122222|
// |111122222|
// |111122222|
// -----------
//
CefBoxLayoutSettings settings;
settings.horizontal = true;
CefRect expected_child1_bounds(0, 0, kBLParentSize / 2, kBLParentSize);
CefRect expected_child2_bounds(kBLParentSize / 2, 0, kBLParentSize / 2,
kBLParentSize);
BoxLayoutSizeHierarchy(with_delegate, settings, expected_child1_bounds,
expected_child2_bounds, 1, 1);
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-01-19 21:09:01 +01:00
}
void BoxLayoutSizeHierarchyHorizontalStretchFlexBothImpl() {
BoxLayoutSizeHierarchyHorizontalStretchFlexBoth(false);
}
void BoxLayoutSizeHierarchyHorizontalStretchFlexBothWithDelegateImpl() {
BoxLayoutSizeHierarchyHorizontalStretchFlexBoth(true);
}
} // namespace
// Test BoxLayout. The BoxLayoutSizeHierarchy* tests are representative but not
// comprehensive (e.g. not all possible configurations are tested).
PANEL_TEST(BoxLayoutCreate)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalStretch)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalStretchWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalStretch)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalStretchWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalCenter)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalCenterWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalCenter)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalCenterWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalCenterCenter)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalCenterCenterWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalCenterCenter)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalCenterCenterWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalStretchFlexOne)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalStretchFlexOneWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalStretchFlexOne)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalStretchFlexOneWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalStretchFlexBoth)
PANEL_TEST(BoxLayoutSizeHierarchyVerticalStretchFlexBothWithDelegate)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalStretchFlexBoth)
PANEL_TEST(BoxLayoutSizeHierarchyHorizontalStretchFlexBothWithDelegate)