// 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_view.h"

#include "libcef/browser/thread_util.h"

#include "ui/gfx/canvas.h"
#include "ui/views/controls/button/menu_button_controller.h"
#include "ui/views/controls/menu/menu_config.h"

namespace {

class ButtonPressedLock : public CefMenuButtonPressedLock {
 public:
  explicit ButtonPressedLock(views::MenuButton* menu_button)
      : pressed_lock_(menu_button->button_controller()) {}

 private:
  views::MenuButtonController::PressedLock pressed_lock_;

  IMPLEMENT_REFCOUNTING_DELETE_ON_UIT(ButtonPressedLock);
  DISALLOW_COPY_AND_ASSIGN(ButtonPressedLock);
};

}  // namespace

CefMenuButtonView::CefMenuButtonView(CefMenuButtonDelegate* cef_delegate)
    : ParentClass(cef_delegate) {
  DCHECK(cef_delegate);
}

void CefMenuButtonView::Initialize() {
  ParentClass::Initialize();

  SetDrawStringsFlags(IsFocusable() ? gfx::Canvas::SHOW_PREFIX
                                    : gfx::Canvas::HIDE_PREFIX);

  // Use the same default font as MenuItemView.
  SetFontList(views::MenuConfig::instance().font_list);
}

CefRefPtr<CefMenuButton> CefMenuButtonView::GetCefMenuButton() const {
  CefRefPtr<CefMenuButton> menu_button = GetCefLabelButton()->AsMenuButton();
  DCHECK(menu_button);
  return menu_button;
}

void CefMenuButtonView::SetDrawStringsFlags(int flags) {
  label()->SetDrawStringsFlags(flags);
}

void CefMenuButtonView::ButtonPressed(views::Button* source,
                                      const ui::Event& event) {
  auto position = source->GetMenuPosition();
  cef_delegate()->OnMenuButtonPressed(
      GetCefMenuButton(), CefPoint(position.x(), position.y()),
      new ButtonPressedLock(static_cast<views::MenuButton*>(source)));
}
