10f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#ifndef UI_BASE_ANDROID_WINDOW_ANDROID_H_ 60f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#define UI_BASE_ANDROID_WINDOW_ANDROID_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <jni.h> 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <vector> 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/observer_list.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/time/time.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ui_base_export.h" 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/vector2d_f.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class WindowAndroidCompositor; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class WindowAndroidObserver; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Android implementation of the activity window. 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class UI_BASE_EXPORT WindowAndroid { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu WindowAndroid(JNIEnv* env, jobject obj, jlong vsync_period); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Destroy(JNIEnv* env, jobject obj); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::android::ScopedJavaLocalRef<jobject> GetJavaObject(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool RegisterWindowAndroid(JNIEnv* env); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The content offset is used to translate snapshots to the correct part of 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // the window. 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) void set_content_offset(const gfx::Vector2dF& content_offset) { 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content_offset_ = content_offset; 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gfx::Vector2dF content_offset() const { 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) return content_offset_; 416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Compositor callback relay. 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnCompositingDidCommit(); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) void AttachCompositor(WindowAndroidCompositor* compositor); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void DetachCompositor(); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void AddObserver(WindowAndroidObserver* observer); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void RemoveObserver(WindowAndroidObserver* observer); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WindowAndroidCompositor* GetCompositor() { return compositor_; } 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void RequestVSyncUpdate(); 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void SetNeedsAnimate(); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void OnVSync(JNIEnv* env, jobject obj, jlong time_micros); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Animate(base::TimeTicks begin_frame_time); 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~WindowAndroid(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JavaObjectWeakGlobalRef weak_java_window_; 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gfx::Vector2dF content_offset_; 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) WindowAndroidCompositor* compositor_; 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::TimeDelta vsync_period_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObserverList<WindowAndroidObserver> observer_list_; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WindowAndroid); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif // UI_BASE_ANDROID_WINDOW_ANDROID_H_ 75