Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (2)
......@@ -329,8 +329,9 @@ libvlccore_la_SOURCES = \
video_output/vout_subpictures.c \
video_output/vout_spuregion_helper.h \
video_output/vout_wrapper.h \
video_output/video_window.c \
video_output/video_window.h \
video_output/window.c \
video_output/window.h \
video_output/opengl.c \
video_output/vout_intf.c \
video_output/vout_internal.h \
......
......@@ -41,7 +41,6 @@
#include <libvlc.h>
#include "display.h"
#include "window.h"
#include "vout_internal.h"
/*****************************************************************************
......
......@@ -55,7 +55,7 @@
#include "vout_internal.h"
#include "display.h"
#include "snapshot.h"
#include "window.h"
#include "video_window.h"
#include "../misc/variables.h"
#include "../clock/clock.h"
#include "statistic.h"
......
/*****************************************************************************
* video_window.c: vout-specific window management
*****************************************************************************
* Copyright © 2014-2021 Rémi Denis-Courmont
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <assert.h>
#include <stdlib.h>
#include <vlc_common.h>
#include <vlc_vout_window.h>
#include <vlc_vout.h>
#include <vlc_vout_display.h>
#include "video_window.h"
#include "vout_internal.h"
#define DOUBLE_CLICK_TIME VLC_TICK_FROM_MS(300)
struct vout_window_ack_data {
vout_window_t *window;
vout_window_ack_cb callback;
unsigned width;
unsigned height;
void *opaque;
};
static void vout_window_Ack(void *data)
{
struct vout_window_ack_data *cb_data = data;
if (cb_data->callback != NULL)
cb_data->callback(cb_data->window, cb_data->width, cb_data->height,
cb_data->opaque);
}
typedef struct vout_display_window
{
vout_thread_t *vout;
vlc_mouse_t mouse;
vlc_tick_t last_left_press;
} vout_display_window_t;
static void vout_display_window_ResizeNotify(vout_window_t *window,
unsigned width, unsigned height,
vout_window_ack_cb cb,
void *opaque)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
struct vout_window_ack_data data = { window, cb, width, height, opaque };
msg_Dbg(window, "resized to %ux%u", width, height);
vout_ChangeDisplaySize(vout, width, height, vout_window_Ack, &data);
}
static void vout_display_window_CloseNotify(vout_window_t *window)
{
/* TODO: Nowhere to dispatch to currently.
* Needs callback to ES output to deselect ES? */
msg_Err(window, "window closed");
}
static void vout_display_window_StateNotify(vout_window_t *window,
unsigned window_state)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
static const char states[][8] = {
[VOUT_WINDOW_STATE_NORMAL] = "normal",
[VOUT_WINDOW_STATE_ABOVE] = "above",
[VOUT_WINDOW_STATE_BELOW] = "below",
};
assert(window_state < ARRAY_SIZE(states));
msg_Dbg(window, "window state changed: %s", states[window_state]);
var_SetInteger(vout, "window-state", window_state);
}
static void vout_display_window_FullscreenNotify(vout_window_t *window,
const char *id)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
msg_Dbg(window, (id != NULL) ? "window set to fullscreen on %s"
: "window set to fullscreen", id);
var_SetString(vout, "window-fullscreen-output",
(id != NULL) ? id : "");
var_SetBool(vout, "window-fullscreen", true);
}
static void vout_display_window_WindowingNotify(vout_window_t *window)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
msg_Dbg(window, "window set windowed");
var_SetBool(vout, "window-fullscreen", false);
}
static void vout_display_window_MouseEvent(vout_window_t *window,
const vout_window_mouse_event_t *ev)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
vlc_mouse_t *m = &state->mouse;
m->b_double_click = false;
switch (ev->type)
{
case VOUT_WINDOW_MOUSE_MOVED:
vlc_mouse_SetPosition(m, ev->x, ev->y);
state->last_left_press = INT64_MIN;
break;
case VOUT_WINDOW_MOUSE_PRESSED:
if (!window->info.has_double_click
&& ev->button_mask == MOUSE_BUTTON_LEFT
&& !vlc_mouse_IsLeftPressed(m))
{
const vlc_tick_t now = vlc_tick_now();
if (state->last_left_press != INT64_MIN
&& now - state->last_left_press < DOUBLE_CLICK_TIME)
{
m->b_double_click = true;
state->last_left_press = INT64_MIN;
}
else
state->last_left_press = now;
}
vlc_mouse_SetPressed(m, ev->button_mask);
break;
case VOUT_WINDOW_MOUSE_RELEASED:
vlc_mouse_SetReleased(m, ev->button_mask);
break;
case VOUT_WINDOW_MOUSE_DOUBLE_CLICK:
assert(window->info.has_double_click);
m->b_double_click = true;
break;
default:
vlc_assert_unreachable();
}
vout_MouseState(vout, m);
}
static void vout_display_window_KeyboardEvent(vout_window_t *window,
unsigned key)
{
var_SetInteger(vlc_object_instance(window), "key-pressed", key);
}
static void vout_display_window_OutputEvent(vout_window_t *window,
const char *name, const char *desc)
{
if (desc != NULL)
msg_Dbg(window, "fullscreen output %s (%s) added", name, desc);
else
msg_Dbg(window, "fullscreen output %s removed", name);
}
static const struct vout_window_callbacks vout_display_window_cbs = {
.resized = vout_display_window_ResizeNotify,
.closed = vout_display_window_CloseNotify,
.state_changed = vout_display_window_StateNotify,
.fullscreened = vout_display_window_FullscreenNotify,
.windowed = vout_display_window_WindowingNotify,
.mouse_event = vout_display_window_MouseEvent,
.keyboard_event = vout_display_window_KeyboardEvent,
.output_event = vout_display_window_OutputEvent,
};
/**
* Creates a video window, initially without any attached display.
*/
vout_window_t *vout_display_window_New(vout_thread_t *vout)
{
vout_display_window_t *state = malloc(sizeof (*state));
if (state == NULL)
return NULL;
vlc_mouse_Init(&state->mouse);
state->last_left_press = INT64_MIN;
state->vout = vout;
char *modlist = var_InheritString(vout, "window");
vout_window_owner_t owner = {
.cbs = &vout_display_window_cbs,
.sys = state,
};
vout_window_t *window;
var_Create(vout, "window-state", VLC_VAR_INTEGER);
var_Create(vout, "window-fullscreen", VLC_VAR_BOOL);
var_Create(vout, "window-fullscreen-output", VLC_VAR_STRING);
window = vout_window_New((vlc_object_t *)vout, modlist, &owner);
free(modlist);
if (window == NULL)
free(state);
return window;
}
/**
* Destroys a video window.
* \note The window must be detached.
*/
void vout_display_window_Delete(vout_window_t *window)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
vout_window_Delete(window);
var_Destroy(vout, "window-fullscreen-output");
var_Destroy(vout, "window-fullscreen");
var_Destroy(vout, "window-state");
free(state);
}
/*****************************************************************************
* window.h: window management for VLC video output
* video_window.h: window management for VLC video output
*****************************************************************************
* Copyright © 2014 Rémi Denis-Courmont
*
......
/*****************************************************************************
* window.c: "vout window" management
* window.c: generic window management
*****************************************************************************
* Copyright (C) 2009 Laurent Aimar
* Copyright © 2009-2021 Rémi Denis-Courmont
*
* Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
*
......@@ -197,219 +198,3 @@ void vout_window_ReportFullscreen(vout_window_t *window, const char *id)
if (window->owner.cbs->fullscreened != NULL)
window->owner.cbs->fullscreened(window, id);
}
struct vout_window_ack_data {
vout_window_t *window;
vout_window_ack_cb callback;
unsigned width;
unsigned height;
void *opaque;
};
static void vout_window_Ack(void *data)
{
struct vout_window_ack_data *cb_data = data;
if (cb_data->callback != NULL)
cb_data->callback(cb_data->window, cb_data->width, cb_data->height,
cb_data->opaque);
}
/* Video output display integration */
#include <vlc_vout.h>
#include <vlc_vout_display.h>
#include "window.h"
#include "vout_internal.h"
#define DOUBLE_CLICK_TIME VLC_TICK_FROM_MS(300)
typedef struct vout_display_window
{
vout_thread_t *vout;
vlc_mouse_t mouse;
vlc_tick_t last_left_press;
} vout_display_window_t;
static void vout_display_window_ResizeNotify(vout_window_t *window,
unsigned width, unsigned height,
vout_window_ack_cb cb,
void *opaque)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
struct vout_window_ack_data data = { window, cb, width, height, opaque };
msg_Dbg(window, "resized to %ux%u", width, height);
vout_ChangeDisplaySize(vout, width, height, vout_window_Ack, &data);
}
static void vout_display_window_CloseNotify(vout_window_t *window)
{
/* TODO: Nowhere to dispatch to currently.
* Needs callback to ES output to deselect ES? */
msg_Err(window, "window closed");
}
static void vout_display_window_StateNotify(vout_window_t *window,
unsigned window_state)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
static const char states[][8] = {
[VOUT_WINDOW_STATE_NORMAL] = "normal",
[VOUT_WINDOW_STATE_ABOVE] = "above",
[VOUT_WINDOW_STATE_BELOW] = "below",
};
assert(window_state < ARRAY_SIZE(states));
msg_Dbg(window, "window state changed: %s", states[window_state]);
var_SetInteger(vout, "window-state", window_state);
}
static void vout_display_window_FullscreenNotify(vout_window_t *window,
const char *id)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
msg_Dbg(window, (id != NULL) ? "window set to fullscreen on %s"
: "window set to fullscreen", id);
var_SetString(vout, "window-fullscreen-output",
(id != NULL) ? id : "");
var_SetBool(vout, "window-fullscreen", true);
}
static void vout_display_window_WindowingNotify(vout_window_t *window)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
msg_Dbg(window, "window set windowed");
var_SetBool(vout, "window-fullscreen", false);
}
static void vout_display_window_MouseEvent(vout_window_t *window,
const vout_window_mouse_event_t *ev)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
vlc_mouse_t *m = &state->mouse;
m->b_double_click = false;
switch (ev->type)
{
case VOUT_WINDOW_MOUSE_MOVED:
vlc_mouse_SetPosition(m, ev->x, ev->y);
state->last_left_press = INT64_MIN;
break;
case VOUT_WINDOW_MOUSE_PRESSED:
if (!window->info.has_double_click
&& ev->button_mask == MOUSE_BUTTON_LEFT
&& !vlc_mouse_IsLeftPressed(m))
{
const vlc_tick_t now = vlc_tick_now();
if (state->last_left_press != INT64_MIN
&& now - state->last_left_press < DOUBLE_CLICK_TIME)
{
m->b_double_click = true;
state->last_left_press = INT64_MIN;
}
else
state->last_left_press = now;
}
vlc_mouse_SetPressed(m, ev->button_mask);
break;
case VOUT_WINDOW_MOUSE_RELEASED:
vlc_mouse_SetReleased(m, ev->button_mask);
break;
case VOUT_WINDOW_MOUSE_DOUBLE_CLICK:
assert(window->info.has_double_click);
m->b_double_click = true;
break;
default:
vlc_assert_unreachable();
}
vout_MouseState(vout, m);
}
static void vout_display_window_KeyboardEvent(vout_window_t *window,
unsigned key)
{
var_SetInteger(vlc_object_instance(window), "key-pressed", key);
}
static void vout_display_window_OutputEvent(vout_window_t *window,
const char *name, const char *desc)
{
if (desc != NULL)
msg_Dbg(window, "fullscreen output %s (%s) added", name, desc);
else
msg_Dbg(window, "fullscreen output %s removed", name);
}
static const struct vout_window_callbacks vout_display_window_cbs = {
.resized = vout_display_window_ResizeNotify,
.closed = vout_display_window_CloseNotify,
.state_changed = vout_display_window_StateNotify,
.fullscreened = vout_display_window_FullscreenNotify,
.windowed = vout_display_window_WindowingNotify,
.mouse_event = vout_display_window_MouseEvent,
.keyboard_event = vout_display_window_KeyboardEvent,
.output_event = vout_display_window_OutputEvent,
};
/**
* Creates a video window, initially without any attached display.
*/
vout_window_t *vout_display_window_New(vout_thread_t *vout)
{
vout_display_window_t *state = malloc(sizeof (*state));
if (state == NULL)
return NULL;
vlc_mouse_Init(&state->mouse);
state->last_left_press = INT64_MIN;
state->vout = vout;
char *modlist = var_InheritString(vout, "window");
vout_window_owner_t owner = {
.cbs = &vout_display_window_cbs,
.sys = state,
};
vout_window_t *window;
var_Create(vout, "window-state", VLC_VAR_INTEGER);
var_Create(vout, "window-fullscreen", VLC_VAR_BOOL);
var_Create(vout, "window-fullscreen-output", VLC_VAR_STRING);
window = vout_window_New((vlc_object_t *)vout, modlist, &owner);
free(modlist);
if (window == NULL)
free(state);
return window;
}
/**
* Destroys a video window.
* \note The window must be detached.
*/
void vout_display_window_Delete(vout_window_t *window)
{
vout_display_window_t *state = window->owner.sys;
vout_thread_t *vout = state->vout;
vout_window_Delete(window);
var_Destroy(vout, "window-fullscreen-output");
var_Destroy(vout, "window-fullscreen");
var_Destroy(vout, "window-state");
free(state);
}