blob: 9fd16165cc95aceb8d28eb000b1e78a3208fcb65 [file] [log] [blame]
// Copyright 2015 The Chromium 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 "ui/views/touchui/touch_selection_menu_runner_views.h"
#include <stddef.h>
#include "ui/aura/window.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/touchui/touch_selection_menu_views.h"
namespace views {
TouchSelectionMenuRunnerViews::TestApi::TestApi(
TouchSelectionMenuRunnerViews* menu_runner)
: menu_runner_(menu_runner) {
DCHECK(menu_runner_);
}
TouchSelectionMenuRunnerViews::TestApi::~TestApi() = default;
gfx::Rect TouchSelectionMenuRunnerViews::TestApi::GetAnchorRect() const {
TouchSelectionMenuViews* menu = menu_runner_->menu_;
return menu ? menu->GetAnchorRect() : gfx::Rect();
}
LabelButton* TouchSelectionMenuRunnerViews::TestApi::GetFirstButton() const {
TouchSelectionMenuViews* menu = menu_runner_->menu_;
return menu ? static_cast<LabelButton*>(menu->children().front()) : nullptr;
}
Widget* TouchSelectionMenuRunnerViews::TestApi::GetWidget() const {
TouchSelectionMenuViews* menu = menu_runner_->menu_;
return menu ? menu->GetWidget() : nullptr;
}
TouchSelectionMenuRunnerViews::TouchSelectionMenuRunnerViews() = default;
TouchSelectionMenuRunnerViews::~TouchSelectionMenuRunnerViews() {
CloseMenu();
}
void TouchSelectionMenuRunnerViews::ShowMenu(
TouchSelectionMenuViews* menu,
const gfx::Rect& anchor_rect,
const gfx::Size& handle_image_size) {
menu_ = menu;
menu_->ShowMenu(anchor_rect, handle_image_size);
}
bool TouchSelectionMenuRunnerViews::IsMenuAvailable(
const ui::TouchSelectionMenuClient* client) const {
return TouchSelectionMenuViews::IsMenuAvailable(client);
}
void TouchSelectionMenuRunnerViews::OpenMenu(
ui::TouchSelectionMenuClient* client,
const gfx::Rect& anchor_rect,
const gfx::Size& handle_image_size,
aura::Window* context) {
CloseMenu();
if (!TouchSelectionMenuViews::IsMenuAvailable(client))
return;
menu_ = new TouchSelectionMenuViews(this, client, context);
menu_->ShowMenu(anchor_rect, handle_image_size);
}
void TouchSelectionMenuRunnerViews::CloseMenu() {
if (!menu_)
return;
// Closing the menu sets |menu_| to nullptr and eventually deletes the object.
menu_->CloseMenu();
DCHECK(!menu_);
}
bool TouchSelectionMenuRunnerViews::IsRunning() const {
return menu_ != nullptr;
}
} // namespace views