Index: views/controls/scrollbar/native_scroll_bar_wayland.cc |
diff --git a/views/controls/scrollbar/native_scroll_bar_wayland.cc b/views/controls/scrollbar/native_scroll_bar_wayland.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3811c23d9ef8aad10273e8141efc80e706275b9c |
--- /dev/null |
+++ b/views/controls/scrollbar/native_scroll_bar_wayland.cc |
@@ -0,0 +1,174 @@ |
+// Copyright (c) 2011 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 "views/controls/scrollbar/native_scroll_bar_wayland.h" |
+ |
+#include "base/logging.h" |
+#include "ui/base/keycodes/keyboard_codes_posix.h" |
+#include "ui/wayland/wayland_widget.h" |
+#include "views/controls/scrollbar/native_scroll_bar.h" |
+#include "views/controls/scrollbar/scroll_bar.h" |
+ |
+ |
+namespace views { |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// NativeScrollBarWayland, public: |
+ |
+NativeScrollBarWayland::NativeScrollBarWayland(NativeScrollBar* scroll_bar) |
+ : NativeControlWayland(), |
+ native_scroll_bar_(scroll_bar) { |
+ set_focus_view(scroll_bar); |
+} |
+ |
+NativeScrollBarWayland::~NativeScrollBarWayland() { |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// NativeScrollBarWayland, View overrides: |
+ |
+void NativeScrollBarWayland::Layout() { |
+ SetBoundsRect(native_scroll_bar_->GetLocalBounds()); |
+ NativeControlWayland::Layout(); |
+} |
+ |
+gfx::Size NativeScrollBarWayland::GetPreferredSize() { |
+ if (native_scroll_bar_->IsHorizontal()) |
+ return gfx::Size(0, GetHorizontalScrollBarHeight()); |
+ return gfx::Size(GetVerticalScrollBarWidth(), 0); |
+} |
+ |
+// TODO(oshima|jcampan): key/mouse events are not delievered and |
+// the following code is not tested. It requires the focus manager to be fully |
+// implemented. |
+bool NativeScrollBarWayland::OnKeyPressed(const KeyEvent& event) { |
+ if (!native_view()) |
+ return false; |
+ switch (event.key_code()) { |
+ case ui::VKEY_UP: |
+ if (!native_scroll_bar_->IsHorizontal()) |
+ MoveStep(false /* negative */); |
+ break; |
+ case ui::VKEY_DOWN: |
+ if (!native_scroll_bar_->IsHorizontal()) |
+ MoveStep(true /* positive */); |
+ break; |
+ case ui::VKEY_LEFT: |
+ if (native_scroll_bar_->IsHorizontal()) |
+ MoveStep(false /* negative */); |
+ break; |
+ case ui::VKEY_RIGHT: |
+ if (native_scroll_bar_->IsHorizontal()) |
+ MoveStep(true /* positive */); |
+ break; |
+ case ui::VKEY_PRIOR: |
+ MovePage(false /* negative */); |
+ break; |
+ case ui::VKEY_NEXT: |
+ MovePage(true /* positive */); |
+ break; |
+ case ui::VKEY_HOME: |
+ MoveTo(0); |
+ break; |
+ case ui::VKEY_END: |
+ MoveToBottom(); |
+ break; |
+ default: |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+bool NativeScrollBarWayland::OnMouseWheel(const MouseWheelEvent& e) { |
+ if (!native_view()) |
+ return false; |
+ MoveBy(-e.offset()); // e.GetOffset() > 0 means scroll up. |
+ return true; |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// NativeScrollBarWayland, NativeControlWayland overrides: |
+ |
+void NativeScrollBarWayland::CreateNativeControl() { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// NativeScrollBarWayland, NativeScrollBarWrapper overrides: |
+ |
+int NativeScrollBarWayland::GetPosition() const { |
+ NOTIMPLEMENTED(); |
+ return 0; |
+} |
+ |
+View* NativeScrollBarWayland::GetView() { |
+ return this; |
+} |
+ |
+void NativeScrollBarWayland::Update(int viewport_size, |
+ int content_size, |
+ int current_pos) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// NativeScrollBarWayland, private: |
+ |
+void NativeScrollBarWayland::ValueChanged() { |
+ ScrollBarController* controller = native_scroll_bar_->GetController(); |
+ controller->ScrollToPosition(native_scroll_bar_, GetPosition()); |
+} |
+ |
+// static |
+void NativeScrollBarWayland::CallValueChanged(ui::WaylandWidget* widget, |
+ NativeScrollBarWayland* scroll_bar) { |
+ scroll_bar->ValueChanged(); |
+} |
+ |
+void NativeScrollBarWayland::MoveBy(int o) { |
+ MoveTo(GetPosition() + o); |
+} |
+ |
+void NativeScrollBarWayland::MovePage(bool positive) { |
+ ScrollBarController* controller = native_scroll_bar_->GetController(); |
+ MoveBy(controller->GetScrollIncrement(native_scroll_bar_, true, positive)); |
+} |
+ |
+void NativeScrollBarWayland::MoveStep(bool positive) { |
+ ScrollBarController* controller = native_scroll_bar_->GetController(); |
+ MoveBy(controller->GetScrollIncrement(native_scroll_bar_, false, positive)); |
+} |
+ |
+void NativeScrollBarWayland::MoveTo(int p) { |
+ if (p < native_scroll_bar_->GetMinPosition()) |
+ p = native_scroll_bar_->GetMinPosition(); |
+ if (p > native_scroll_bar_->GetMaxPosition()) |
+ p = native_scroll_bar_->GetMaxPosition(); |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void NativeScrollBarWayland::MoveToBottom() { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// NativewScrollBarWrapper, public: |
+ |
+// static |
+NativeScrollBarWrapper* NativeScrollBarWrapper::CreateWrapper( |
+ NativeScrollBar* scroll_bar) { |
+ return new NativeScrollBarWayland(scroll_bar); |
+} |
+ |
+// static |
+int NativeScrollBarWrapper::GetHorizontalScrollBarHeight() { |
+ return 20; |
+} |
+ |
+// static |
+int NativeScrollBarWrapper::GetVerticalScrollBarWidth() { |
+ return 20; |
+} |
+ |
+} // namespace views |