]> git.sesse.net Git - casparcg/blobdiff - dependencies64/cef/windows/tests/cefclient/browser/osr_window_win.h
Upgrade CEF to 3.3029.1611.g44e39a8 / Chromium 58.0.3029.81.
[casparcg] / dependencies64 / cef / windows / tests / cefclient / browser / osr_window_win.h
diff --git a/dependencies64/cef/windows/tests/cefclient/browser/osr_window_win.h b/dependencies64/cef/windows/tests/cefclient/browser/osr_window_win.h
new file mode 100644 (file)
index 0000000..78dc2e4
--- /dev/null
@@ -0,0 +1,204 @@
+// Copyright (c) 2015 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.
+
+#ifndef CEF_TESTS_CEFCLIENT_BROWSER_OSR_WINDOW_WIN_H_
+#define CEF_TESTS_CEFCLIENT_BROWSER_OSR_WINDOW_WIN_H_
+#pragma once
+
+#include "include/base/cef_bind.h"
+#include "include/base/cef_ref_counted.h"
+#include "include/wrapper/cef_closure_task.h"
+#include "include/wrapper/cef_helpers.h"
+#include "tests/cefclient/browser/client_handler_osr.h"
+#include "tests/cefclient/browser/osr_dragdrop_win.h"
+#include "tests/cefclient/browser/osr_renderer.h"
+
+namespace client {
+
+class OsrImeHandlerWin;
+
+// Represents the native parent window for an off-screen browser. This object
+// must live on the CEF UI thread in order to handle CefRenderHandler callbacks.
+// The methods of this class are thread-safe unless otherwise indicated.
+class OsrWindowWin :
+    public base::RefCountedThreadSafe<OsrWindowWin, CefDeleteOnUIThread>,
+    public ClientHandlerOsr::OsrDelegate
+ #if defined(CEF_USE_ATL)
+    , public OsrDragEvents
+#endif
+{
+ public:
+  // This interface is implemented by the owner of the OsrWindowWin. The
+  // methods of this class will be called on the main thread.
+  class Delegate {
+   public:
+    // Called after the native window has been created.
+    virtual void OnOsrNativeWindowCreated(HWND hwnd) = 0;
+
+   protected:
+    virtual ~Delegate() {}
+  };
+
+  // |delegate| must outlive this object.
+  OsrWindowWin(Delegate* delegate,
+               const OsrRenderer::Settings& settings);
+
+  // Create a new browser and native window.
+  void CreateBrowser(HWND parent_hwnd,
+                     const RECT& rect,
+                     CefRefPtr<CefClient> handler,
+                     const CefBrowserSettings& settings,
+                     CefRefPtr<CefRequestContext> request_context,
+                     const std::string& startup_url);
+  
+  // Show the popup window with correct parent and bounds in parent coordinates.
+  void ShowPopup(HWND parent_hwnd, int x, int y, size_t width, size_t height);
+
+  void Show();
+  void Hide();
+  void SetBounds(int x, int y, size_t width, size_t height);
+  void SetFocus();
+  void SetDeviceScaleFactor(float device_scale_factor);
+
+ private:
+  // Only allow deletion via scoped_refptr.
+  friend struct CefDeleteOnThread<TID_UI>;
+  friend class base::RefCountedThreadSafe<OsrWindowWin, CefDeleteOnUIThread>;
+
+  ~OsrWindowWin();
+
+  // Manage native window lifespan.
+  void Create(HWND parent_hwnd, const RECT& rect);
+  void Destroy();
+
+  // Manage GL context lifespan.
+  void EnableGL();
+  void DisableGL();
+
+  // Redraw what is currently in the texture.
+  void Invalidate();
+  void Render();
+
+  void NotifyNativeWindowCreated(HWND hwnd);
+
+  static void RegisterOsrClass(HINSTANCE hInstance,
+                               HBRUSH background_brush);
+  static LRESULT CALLBACK OsrWndProc(HWND hWnd, UINT message, WPARAM wParam,
+                                     LPARAM lParam);
+
+  // WndProc message handlers.
+  void OnMouseEvent(UINT message, WPARAM wParam, LPARAM lParam);
+  void OnSize();
+  void OnFocus(bool setFocus);
+  void OnCaptureLost();
+  void OnKeyEvent(UINT message, WPARAM wParam, LPARAM lParam);
+  void OnPaint();
+  bool OnEraseBkgnd();
+
+  void OnIMESetContext(UINT message, WPARAM wParam, LPARAM lParam);
+  void OnIMEStartComposition();
+  void OnIMEComposition(UINT message, WPARAM wParam, LPARAM lParam);
+  void OnIMECancelCompositionEvent();
+
+  // Manage popup bounds.
+  bool IsOverPopupWidget(int x, int y) const;
+  int GetPopupXOffset() const;
+  int GetPopupYOffset() const;
+  void ApplyPopupOffset(int& x, int& y) const;
+
+  // ClientHandlerOsr::OsrDelegate methods.
+  void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
+  void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
+  bool GetRootScreenRect(CefRefPtr<CefBrowser> browser,
+                         CefRect& rect) OVERRIDE;
+  bool GetViewRect(CefRefPtr<CefBrowser> browser,
+                   CefRect& rect) OVERRIDE;
+  bool GetScreenPoint(CefRefPtr<CefBrowser> browser,
+                      int viewX,
+                      int viewY,
+                      int& screenX,
+                      int& screenY) OVERRIDE;
+  bool GetScreenInfo(CefRefPtr<CefBrowser> browser,
+                     CefScreenInfo& screen_info) OVERRIDE;
+  void OnPopupShow(CefRefPtr<CefBrowser> browser, bool show) OVERRIDE;
+  void OnPopupSize(CefRefPtr<CefBrowser> browser,
+                   const CefRect& rect) OVERRIDE;
+  void OnPaint(CefRefPtr<CefBrowser> browser,
+               CefRenderHandler::PaintElementType type,
+               const CefRenderHandler::RectList& dirtyRects,
+               const void* buffer,
+               int width,
+               int height) OVERRIDE;
+  void OnCursorChange(CefRefPtr<CefBrowser> browser,
+                      CefCursorHandle cursor,
+                      CefRenderHandler::CursorType type,
+                      const CefCursorInfo& custom_cursor_info) OVERRIDE;
+  bool StartDragging(CefRefPtr<CefBrowser> browser,
+                     CefRefPtr<CefDragData> drag_data,
+                     CefRenderHandler::DragOperationsMask allowed_ops,
+                     int x, int y) OVERRIDE;
+  void UpdateDragCursor(CefRefPtr<CefBrowser> browser,
+                        CefRenderHandler::DragOperation operation) OVERRIDE;
+  void OnImeCompositionRangeChanged(
+      CefRefPtr<CefBrowser> browser,
+      const CefRange& selection_range,
+      const CefRenderHandler::RectList& character_bounds) OVERRIDE;
+
+#if defined(CEF_USE_ATL)
+  // OsrDragEvents methods.
+  CefBrowserHost::DragOperationsMask OnDragEnter(
+      CefRefPtr<CefDragData> drag_data,
+      CefMouseEvent ev,
+      CefBrowserHost::DragOperationsMask effect) OVERRIDE;
+  CefBrowserHost::DragOperationsMask OnDragOver(CefMouseEvent ev,
+      CefBrowserHost::DragOperationsMask effect) OVERRIDE;
+  void OnDragLeave() OVERRIDE;
+  CefBrowserHost::DragOperationsMask OnDrop(CefMouseEvent ev,
+      CefBrowserHost::DragOperationsMask effect) OVERRIDE;
+#endif  // defined(CEF_USE_ATL)
+
+  // Only accessed on the main thread.
+  Delegate* delegate_;
+
+  // The below members are only accessed on the UI thread.
+  OsrRenderer renderer_;
+  HWND hwnd_;
+  HDC hdc_;
+  HGLRC hrc_;
+
+  // Class that encapsulates IMM32 APIs and controls IMEs attached to a window.
+  scoped_ptr<OsrImeHandlerWin> ime_handler_;
+
+  RECT client_rect_;
+  float device_scale_factor_;
+
+  CefRefPtr<CefBrowser> browser_;
+
+#if defined(CEF_USE_ATL)
+  CComPtr<DropTargetWin> drop_target_;
+  CefRenderHandler::DragOperation current_drag_op_;
+#endif
+
+  bool painting_popup_;
+  bool render_task_pending_;
+  bool hidden_;
+
+  // Mouse state tracking.
+  POINT last_mouse_pos_;
+  POINT current_mouse_pos_;
+  bool mouse_rotation_;
+  bool mouse_tracking_;
+  int last_click_x_;
+  int last_click_y_;
+  CefBrowserHost::MouseButtonType last_click_button_;
+  int last_click_count_;
+  double last_click_time_;
+  bool last_mouse_down_on_view_;
+
+  DISALLOW_COPY_AND_ASSIGN(OsrWindowWin);
+};
+
+}  // namespace client
+
+#endif  // CEF_TESTS_CEFCLIENT_BROWSER_OSR_WINDOW_WIN_H_