#include "ui/ozone/platform/dri/dri_window.h"
+#include "base/bind.h"
#include "ui/events/event.h"
#include "ui/events/ozone/evdev/event_factory_evdev.h"
+#include "ui/events/ozone/events_ozone.h"
#include "ui/events/platform/platform_event_source.h"
-#include "ui/ozone/platform/dri/dri_surface_factory.h"
-#include "ui/ozone/public/cursor_factory_ozone.h"
-#include "ui/ozone/public/surface_factory_ozone.h"
+#include "ui/ozone/platform/dri/dri_cursor.h"
+#include "ui/ozone/platform/dri/dri_window_delegate.h"
+#include "ui/ozone/platform/dri/dri_window_delegate_manager.h"
+#include "ui/ozone/platform/dri/dri_window_manager.h"
#include "ui/platform_window/platform_window_delegate.h"
namespace ui {
DriWindow::DriWindow(PlatformWindowDelegate* delegate,
const gfx::Rect& bounds,
- DriSurfaceFactory* surface_factory,
- EventFactoryEvdev* event_factory)
- : delegate_(delegate), bounds_(bounds), event_factory_(event_factory) {
- widget_ = surface_factory->GetAcceleratedWidget();
- delegate_->OnAcceleratedWidgetAvailable(widget_);
- PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
+ scoped_ptr<DriWindowDelegate> dri_window_delegate,
+ EventFactoryEvdev* event_factory,
+ DriWindowDelegateManager* window_delegate_manager,
+ DriWindowManager* window_manager)
+ : delegate_(delegate),
+ bounds_(bounds),
+ widget_(dri_window_delegate->GetAcceleratedWidget()),
+ dri_window_delegate_(dri_window_delegate.get()),
+ event_factory_(event_factory),
+ window_delegate_manager_(window_delegate_manager),
+ window_manager_(window_manager) {
+ window_delegate_manager_->AddWindowDelegate(widget_,
+ dri_window_delegate.Pass());
+ window_manager_->AddWindow(widget_, this);
}
DriWindow::~DriWindow() {
PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this);
+ dri_window_delegate_->Shutdown();
+ window_manager_->RemoveWindow(widget_);
+ window_delegate_manager_->RemoveWindowDelegate(widget_);
+}
+
+void DriWindow::Initialize() {
+ dri_window_delegate_->Initialize();
+ dri_window_delegate_->OnBoundsChanged(bounds_);
+ delegate_->OnAcceleratedWidgetAvailable(widget_);
+ PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
}
void DriWindow::Show() {}
void DriWindow::SetBounds(const gfx::Rect& bounds) {
bounds_ = bounds;
delegate_->OnBoundsChanged(bounds);
+ if (window_manager_->cursor()->GetCursorWindow() == widget_)
+ window_manager_->cursor()->HideCursor();
+
+ dri_window_delegate_->OnBoundsChanged(bounds);
+
+ if (window_manager_->cursor()->GetCursorWindow() == widget_)
+ window_manager_->cursor()->ShowCursor();
}
gfx::Rect DriWindow::GetBounds() {
void DriWindow::Restore() {}
void DriWindow::SetCursor(PlatformCursor cursor) {
- ui::CursorFactoryOzone::GetInstance()->SetCursor(widget_, cursor);
+ window_manager_->cursor()->SetCursor(widget_, cursor);
}
void DriWindow::MoveCursorTo(const gfx::Point& location) {
DCHECK(ne);
Event* event = static_cast<Event*>(ne);
if (event->IsMouseEvent() || event->IsScrollEvent())
- return ui::CursorFactoryOzone::GetInstance()->GetCursorWindow() == widget_;
+ return window_manager_->cursor()->GetCursorWindow() == widget_;
return true;
}
-uint32_t DriWindow::DispatchEvent(const PlatformEvent& ne) {
- Event* event = static_cast<Event*>(ne);
- delegate_->DispatchEvent(event);
+uint32_t DriWindow::DispatchEvent(const PlatformEvent& native_event) {
+ DispatchEventFromNativeUiEvent(
+ native_event,
+ base::Bind(&PlatformWindowDelegate::DispatchEvent,
+ base::Unretained(delegate_)));
return POST_DISPATCH_STOP_PROPAGATION;
}