// Copyright 2016 The Chromium Embedded Framework Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be found // in the LICENSE file. #include "libcef/browser/views/menu_button_impl.h" #include "libcef/browser/views/menu_button_view.h" #include "libcef/browser/views/window_impl.h" #include "ui/gfx/canvas.h" // static CefRefPtr CefMenuButton::CreateMenuButton( CefRefPtr delegate, const CefString& text, bool with_frame) { return CefMenuButtonImpl::Create(delegate, text, with_frame); } // static CefRefPtr CefMenuButtonImpl::Create( CefRefPtr delegate, const CefString& text, bool with_frame) { CEF_REQUIRE_UIT_RETURN(nullptr); DCHECK(delegate); if (!delegate) return nullptr; CefRefPtr menu_button = new CefMenuButtonImpl(delegate); menu_button->Initialize(); if (!text.empty()) menu_button->SetText(text); if (with_frame) { menu_button->root_view()->SetStyleDeprecated(views::Button::STYLE_BUTTON); } return menu_button; } void CefMenuButtonImpl::ShowMenu(CefRefPtr menu_model, const CefPoint& screen_point, cef_menu_anchor_position_t anchor_position) { CEF_REQUIRE_VALID_RETURN_VOID(); CefRefPtr window = view_util::GetWindowFor(root_view()->GetWidget()); CefWindowImpl* window_impl = static_cast(window.get()); if (window_impl) { window_impl->ShowMenu(root_view(), menu_model, screen_point, anchor_position); } } void CefMenuButtonImpl::TriggerMenu() { CEF_REQUIRE_VALID_RETURN_VOID(); root_view()->Activate(nullptr); } void CefMenuButtonImpl::SetFocusable(bool focusable) { CEF_REQUIRE_VALID_RETURN_VOID(); static_cast(root_view()) ->SetDrawStringsFlags(focusable ? gfx::Canvas::SHOW_PREFIX : gfx::Canvas::HIDE_PREFIX); ParentClass::SetFocusable(focusable); } CefMenuButtonImpl::CefMenuButtonImpl(CefRefPtr delegate) : ParentClass(delegate) { DCHECK(delegate); } views::MenuButton* CefMenuButtonImpl::CreateRootView() { return new CefMenuButtonView(delegate()); } void CefMenuButtonImpl::InitializeRootView() { static_cast(root_view())->Initialize(); }