namespace Xilium.CefGlue
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Xilium.CefGlue.Interop;
///
/// Implement this interface to handle events related to dragging. The methods of
/// this class will be called on the UI thread.
///
public abstract unsafe partial class CefDragHandler
{
private int on_drag_enter(cef_drag_handler_t* self, cef_browser_t* browser, cef_drag_data_t* dragData, CefDragOperationsMask mask)
{
CheckSelf(self);
var m_browser = CefBrowser.FromNative(browser);
var m_dragData = CefDragData.FromNative(dragData); // TODO dispose?
var m_result = OnDragEnter(m_browser, m_dragData, mask);
return m_result ? 1 : 0;
}
///
/// Called when an external drag event enters the browser window. |dragData|
/// contains the drag event data and |mask| represents the type of drag
/// operation. Return false for default drag handling behavior or true to
/// cancel the drag event.
///
protected abstract bool OnDragEnter(CefBrowser browser, CefDragData dragData, CefDragOperationsMask mask);
private static readonly CefDraggableRegion[] EmptyDraggableRegion = new CefDraggableRegion[0];
private void on_draggable_regions_changed(cef_drag_handler_t* self, cef_browser_t* browser, cef_frame_t* frame, UIntPtr regionsCount, cef_draggable_region_t* regions)
{
CheckSelf(self);
var m_browser = CefBrowser.FromNative(browser);
var m_frame = CefFrame.FromNative(frame);
CefDraggableRegion[] m_regions;
var m_count = (int)regionsCount;
if (m_count == 0) m_regions = EmptyDraggableRegion;
else
{
m_regions = new CefDraggableRegion[m_count];
for (var i = 0; i < m_count; i++)
{
m_regions[i] = CefDraggableRegion.FromNative(regions + i); // TODO dispose?
}
}
OnDraggableRegionsChanged(m_browser, m_frame, m_regions);
}
///
/// Called whenever draggable regions for the browser window change. These can
/// be specified using the '-webkit-app-region: drag/no-drag' CSS-property. If
/// draggable regions are never defined in a document this method will also
/// never be called. If the last draggable region is removed from a document
/// this method will be called with an empty vector.
///
protected abstract void OnDraggableRegionsChanged(CefBrowser browser, CefFrame frame, CefDraggableRegion[] regions);
}
}