Beispiel #1
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QMenu *menu = menuBar()->addMenu(tr("&File"));
    QAction *on_open = new QAction(tr("&Open"), this);
    on_open->setShortcuts(QKeySequence::Open);
    on_open->setStatusTip(tr("Open a file"));
    connect(on_open, SIGNAL(triggered()), this, SLOT(on_file_open()));
    menu->addAction(on_open);

    statusBar();

    mpv = mpv_create();
    if (!mpv)
        throw "can't create mpv instance";

    // Create a video child window. Force Qt to create a native window, and
    // pass the window ID to the mpv wid option. This doesn't work on OSX,
    // because Cocoa doesn't support this form of embedding.
    mpv_container = new QWidget(this);
    setCentralWidget(mpv_container);
    mpv_container->setAttribute(Qt::WA_NativeWindow);
    // If you have a HWND, use: int64_t wid = (intptr_t)hwnd;
    int64_t wid = mpv_container->winId();
    mpv_set_option(mpv, "wid", MPV_FORMAT_INT64, &wid);

    // Enable default bindings, because we're lazy. Normally, a player using
    // mpv as backend would implement its own key bindings.
    mpv_set_option_string(mpv, "input-default-bindings", "yes");

    // Let us receive property change events with MPV_EVENT_PROPERTY_CHANGE if
    // this property changes.
    mpv_observe_property(mpv, 0, "time-pos", MPV_FORMAT_DOUBLE);

    // From this point on, the wakeup function will be called. The callback
    // can come from any thread, so we use the Qt QEvent mechanism to relay
    // the wakeup in a thread-safe way.
    mpv_set_wakeup_callback(mpv, wakeup, this);

    if (mpv_initialize(mpv) < 0)
        throw "mpv failed to initialize";
}
Beispiel #2
0
static void cb_key_press_event(GtkWidget *view, GdkEventKey *event)
{
//g_print("key-release-event: 0x%X\n", event->keyval);
	if (event->keyval < 0x1000 || event->keyval == GDK_Escape) {
		switch (event->keyval) {
		case GDK_f:
		case GDK_F:
		case GDK_v:
		case GDK_V:
			if (event->state & GDK_CONTROL_MASK)
				on_file_open();
			else
				gdk_beep();
			break;
		case GDK_d:
		case GDK_D:
			if (event->state & GDK_CONTROL_MASK)
				gdk_beep();
			else
				on_file_open();
			break;
		case GDK_s:
		case GDK_S:
			if (GTK_WIDGET_IS_SENSITIVE(gtk_item_factory_get_widget(
				gtk_item_factory_from_widget(pub->mw->menubar), "/File/Save")
				))
				on_file_save();
			break;
		case GDK_w:
		case GDK_W:
			if (event->state & GDK_CONTROL_MASK)
				on_file_save_as();
			else
				gdk_beep();
			break;
		case GDK_k:
		case GDK_K:
			if (event->state & GDK_CONTROL_MASK)
				gdk_beep();
			else
				on_file_close();
			break;
		case GDK_c:
		case GDK_C:
			if (event->state & GDK_CONTROL_MASK)
				on_file_quit();
			else
				gdk_beep();
			break;
		case GDK_u:
		case GDK_U:
			if (event->state & GDK_CONTROL_MASK)
				gdk_beep();
			else
				on_edit_undo();
			break;
		case GDK_h:
		case GDK_H:
			if (event->state & GDK_CONTROL_MASK)
				gdk_beep();
			else
				on_edit_select_all();
			break;
		default:
			gdk_beep();
		}
		gtk_main_quit();
	}
}