using namespace std;
using namespace Msp;
-XineEngine::XineEngine(const Graphics::Window &w, Mutex *m):
+XineEngine::XineEngine(Graphics::Window &w, Mutex *m):
window(w),
display_mutex(m),
locked_thread(0),
- lock_count(0)
+ lock_count(0),
+ pending_expose(0)
{
engine = xine_new();
video_driver = xine_open_video_driver(engine, "auto", XINE_VISUAL_TYPE_X11_2, &visual);
if(!video_driver)
throw runtime_error("Could not open video driver");
+
+ window.signal_expose.connect(sigc::mem_fun(this, &XineEngine::window_exposed));
}
XineEngine::~XineEngine()
xine_exit(engine);
}
+void XineEngine::tick()
+{
+ if(pending_expose)
+ {
+ xine_port_send_gui_data(video_driver, XINE_GUI_SEND_EXPOSE_EVENT, &pending_expose->xevent);
+ delete pending_expose;
+ pending_expose = 0;
+ }
+}
+
+void XineEngine::window_exposed(unsigned, unsigned, unsigned, unsigned, const Graphics::Window::Event &event)
+{
+ delete pending_expose;
+ pending_expose = new Graphics::Window::Event(event);
+}
+
void XineEngine::dest_size_cb(void *user_data, int, int, double, int *dest_width, int *dest_height, double *dest_pixel_aspect)
{
XineEngine &engine = *reinterpret_cast<XineEngine *>(user_data);