diff --git a/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/VideoEngineVideoSurface.java b/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/VideoEngineVideoSurface.java
index bee76eb7b..f42639295 100644
--- a/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/VideoEngineVideoSurface.java
+++ b/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/VideoEngineVideoSurface.java
@@ -40,6 +40,7 @@
import uk.co.caprica.vlcj.binding.internal.libvlc_video_transfer_func_e;
import uk.co.caprica.vlcj.binding.internal.libvlc_video_update_output_cb;
import uk.co.caprica.vlcj.player.base.MediaPlayer;
+import uk.co.caprica.vlcj.player.base.MouseButton;
import uk.co.caprica.vlcj.player.embedded.videosurface.videoengine.VideoEngine;
import uk.co.caprica.vlcj.player.embedded.videosurface.videoengine.VideoEngineCallback;
import uk.co.caprica.vlcj.player.embedded.videosurface.videoengine.VideoEngineWindowCallbackHandler;
@@ -49,6 +50,14 @@
/**
* Implementation of a video surface that bridges native video engine callbacks to a rendering API (like JOGL, LWJGL and
* so on).
+ *
+ * The window callback methods must not be invoked concurrently:
+ *
+ * - {@link #resize(int, int)}
+ * - {@link #mouseMoved(int, int)}
+ * - {@link #mousePressed(MouseButton)}
+ * - {@link #mouseReleased(MouseButton)}
+ *
*/
public final class VideoEngineVideoSurface extends VideoSurface {
@@ -91,6 +100,44 @@ public VideoEngineVideoSurface(VideoEngine engine, VideoEngineCallback callback,
this.callback = callback;
}
+ /**
+ * Report a video surface size change to the native video surface.
+ *
+ * @param width new width
+ * @param height new height
+ */
+ public void resize(int width, int height) {
+ windowCallbackHandler.setSize(width, height);
+ }
+
+ /**
+ * Report a mouse moved event to the native video surface
+ *
+ * @param x new mouse x position
+ * @param y new mouse y position
+ */
+ public void mouseMoved(int x, int y) {
+ windowCallbackHandler.mouseMoved(x, y);
+ }
+
+ /**
+ * Report a mouse pressed event to the native video surface.
+ *
+ * @param mouseButton button that was pressed
+ */
+ public void mousePressed(MouseButton mouseButton) {
+ windowCallbackHandler.mousePressed(mouseButton);
+ }
+
+ /**
+ * Report a mouse released event to the native video surface.
+ *
+ * @param mouseButton button that was pressed
+ */
+ public void mouseReleased(MouseButton mouseButton) {
+ windowCallbackHandler.mouseReleased(mouseButton);
+ }
+
@Override
public void attach(MediaPlayer mediaPlayer) {
libvlc_video_set_output_callbacks(
diff --git a/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/videoengine/VideoEngineWindowCallbackHandler.java b/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/videoengine/VideoEngineWindowCallbackHandler.java
index 608f78b40..4c6fe0f4d 100644
--- a/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/videoengine/VideoEngineWindowCallbackHandler.java
+++ b/src/main/java/uk/co/caprica/vlcj/player/embedded/videosurface/videoengine/VideoEngineWindowCallbackHandler.java
@@ -28,6 +28,8 @@
/**
* Handler component that bridges a vlcj application with the native video engine window callback.
+ *
+ * The various callback method invocations must not be made concurrently.
*/
public final class VideoEngineWindowCallbackHandler implements VideoEngineWindowCallback {