Révision 2422

tmp/org.txm.backtomedia.rcp/src/uk/co/caprica/vlcj/player/embedded/videosurface/swt/CompositeVideoSurface.java (revision 2422)
19 19

  
20 20
package uk.co.caprica.vlcj.player.embedded.videosurface.swt;
21 21

  
22
import java.lang.reflect.Field;
23

  
22 24
import org.eclipse.swt.widgets.Composite;
25
import org.eclipse.swt.widgets.Control;
26

  
27
import uk.co.caprica.vlcj.binding.RuntimeUtil;
23 28
import uk.co.caprica.vlcj.player.base.MediaPlayer;
24 29
import uk.co.caprica.vlcj.player.embedded.videosurface.VideoSurface;
25 30
import uk.co.caprica.vlcj.player.embedded.videosurface.VideoSurfaceAdapter;
......
47 52
	
48 53
	@Override
49 54
	public void attach(MediaPlayer mediaPlayer) {
50
		videoSurfaceAdapter.attach(mediaPlayer, composite.embeddedHandle);
55
		videoSurfaceAdapter.attach(mediaPlayer, getHandle(composite));
51 56
	}
57
	
58
	/**
59
	 * workaround to access windows handle members embeddedHandle, handle are not presents in all jvms
60
	 * 
61
	 * @param c
62
	 * @return
63
	 */
64
	private long getHandle(Composite c) {
65
		long handle = 0l;
66
		Field _viewField;
67
		Field _idField;
68
		try {
69
			if (RuntimeUtil.isMac()) {
70
				_viewField = Control.class.getDeclaredField("view");
71
				Object view = _viewField.get(c);
72
				Class<?> idClass = Class.forName("org.eclipse.swt.internal.cocoa.id");
73
				_idField = idClass.getDeclaredField("id");
74
				handle = _idField.getLong(view);
75
				
76
			}
77
			else if (RuntimeUtil.isNix()) {
78
				_idField = Composite.class.getDeclaredField("embeddedHandle");
79
				handle = _idField.getLong(c);
80
			}
81
			else {
82
				_idField = Control.class.getDeclaredField("handle");
83
				handle = _idField.getLong(c);
84
			}
85
		}
86
		catch (Exception e) {
87
			e.printStackTrace();
88
		}
89
		return handle;
90
	}
91
	
52 92
}

Formats disponibles : Unified diff