• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)29 CefMenuButtonView::CefMenuButtonView(CefMenuButtonDelegate* cef_delegate)
30     : ParentClass(cef_delegate) {
31   DCHECK(cef_delegate);
32 }
33 
Initialize()34 void 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() const44 CefRefPtr<CefMenuButton> CefMenuButtonView::GetCefMenuButton() const {
45   CefRefPtr<CefMenuButton> menu_button = GetCefLabelButton()->AsMenuButton();
46   DCHECK(menu_button);
47   return menu_button;
48 }
49 
SetDrawStringsFlags(int flags)50 void CefMenuButtonView::SetDrawStringsFlags(int flags) {
51   label()->SetDrawStringsFlags(flags);
52 }
53 
ButtonPressed(const ui::Event & event)54 void 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