1 // Copyright 2016 The Chromium Embedded Framework Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be found 3 // in the LICENSE file. 4 5 #include "libcef/browser/views/menu_button_view.h" 6 7 #include "libcef/browser/thread_util.h" 8 9 #include "ui/gfx/canvas.h" 10 #include "ui/views/controls/button/menu_button_controller.h" 11 #include "ui/views/controls/menu/menu_config.h" 12 13 namespace { 14 15 class ButtonPressedLock : public CefMenuButtonPressedLock { 16 public: ButtonPressedLock(views::MenuButton * menu_button)17 explicit ButtonPressedLock(views::MenuButton* menu_button) 18 : pressed_lock_(menu_button->button_controller()) {} 19 20 private: 21 views::MenuButtonController::PressedLock pressed_lock_; 22 23 IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(ButtonPressedLock); 24 DISALLOW_COPY_AND_ASSIGN(ButtonPressedLock); 25 }; 26 27 } // namespace 28 CefMenuButtonView(CefMenuButtonDelegate * cef_delegate)29CefMenuButtonView::CefMenuButtonView(CefMenuButtonDelegate* cef_delegate) 30 : ParentClass(cef_delegate) { 31 DCHECK(cef_delegate); 32 } 33 Initialize()34void CefMenuButtonView::Initialize() { 35 ParentClass::Initialize(); 36 37 SetDrawStringsFlags(IsFocusable() ? gfx::Canvas::SHOW_PREFIX 38 : gfx::Canvas::HIDE_PREFIX); 39 40 // Use the same default font as MenuItemView. 41 SetFontList(views::MenuConfig::instance().font_list); 42 } 43 GetCefMenuButton() const44CefRefPtr<CefMenuButton> CefMenuButtonView::GetCefMenuButton() const { 45 CefRefPtr<CefMenuButton> menu_button = GetCefLabelButton()->AsMenuButton(); 46 DCHECK(menu_button); 47 return menu_button; 48 } 49 SetDrawStringsFlags(int flags)50void CefMenuButtonView::SetDrawStringsFlags(int flags) { 51 label()->SetDrawStringsFlags(flags); 52 } 53 ButtonPressed(const ui::Event & event)54void CefMenuButtonView::ButtonPressed(const ui::Event& event) { 55 auto position = GetMenuPosition(); 56 cef_delegate()->OnMenuButtonPressed(GetCefMenuButton(), 57 CefPoint(position.x(), position.y()), 58 new ButtonPressedLock(this)); 59 } 60