x11_api.cpp
来自「VLC媒体播放程序」· C++ 代码 · 共 185 行
CPP
185 行
/***************************************************************************** * x11_api.cpp: Various x11-specific functions ***************************************************************************** * Copyright (C) 2003 VideoLAN * $Id: x11_api.cpp,v 1.10 2003/12/22 14:32:56 sam Exp $ * * Author: Cyril Deguet <asmax@videolan.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, * USA. *****************************************************************************/#ifdef X11_SKINS//--- X11 -------------------------------------------------------------------#include <X11/Xlib.h>//--- SKIN ------------------------------------------------------------------#include <vlc/intf.h>#include "../src/skin_common.h"#include "../src/theme.h"#include "../src/window.h"#include "../os_theme.h"#include "../os_window.h"#include "../os_api.h"#include "../src/event.h" // for MAX_PARAM_SIZE#include <unistd.h> // unkink and rmdir#include <sys/types.h>#include <sys/stat.h> // stat()#include <sys/time.h> // gettimeofday()#include <dirent.h> // opendir() and friendsextern intf_thread_t *g_pIntf; // ugly, but it's not my fault ;)//---------------------------------------------------------------------------// Event API//---------------------------------------------------------------------------void OSAPI_SendMessage( SkinWindow *win, unsigned int message, unsigned int param1, long param2 ){}//---------------------------------------------------------------------------void OSAPI_PostMessage( SkinWindow *win, unsigned int message, unsigned int param1, long param2 ){ XEvent event; event.type = ClientMessage; event.xclient.display = g_pIntf->p_sys->display; event.xclient.send_event = 0; event.xclient.message_type = 0; event.xclient.format = 32; event.xclient.data.l[0] = message; event.xclient.data.l[1] = param1; event.xclient.data.l[2] = param2; if( win == NULL ) { // broadcast message event.xclient.window = g_pIntf->p_sys->mainWin; } else { event.xclient.window = (( X11Window *)win)->GetHandle(); } XLOCK; XSendEvent( g_pIntf->p_sys->display, event.xclient.window, False, 0, &event ); XUNLOCK;}//---------------------------------------------------------------------------//---------------------------------------------------------------------------// Graphic API//---------------------------------------------------------------------------int OSAPI_GetNonTransparentColor( int c ){ return ( c < 10 ? 10 : c );}//---------------------------------------------------------------------------//---------------------------------------------------------------------------// General//---------------------------------------------------------------------------int OSAPI_GetTime(){ struct timeval time; gettimeofday( &time, NULL ); return( (time.tv_sec&0xffffff) * 1000 + time.tv_usec / 1000 );}//---------------------------------------------------------------------------void OSAPI_GetScreenSize( int &w, int &h ){ Display *display = g_pIntf->p_sys->display; int screen = DefaultScreen( display ); w = DisplayWidth( display, screen ); h = DisplayHeight( display, screen );}//---------------------------------------------------------------------------void OSAPI_GetMousePos( int &x, int &y ){ Window rootReturn, childReturn; int rootx, rooty; int winx, winy; unsigned int xmask; Window root = DefaultRootWindow( g_pIntf->p_sys->display ); XLOCK; XQueryPointer( g_pIntf->p_sys->display, root, &rootReturn, &childReturn, &rootx, &rooty, &winx, &winy, &xmask ); XUNLOCK; x = rootx; y = rooty;}//---------------------------------------------------------------------------string OSAPI_GetWindowTitle( SkinWindow *win ){ return ( (X11Window *)win )->GetName();}//---------------------------------------------------------------------------bool OSAPI_RmDir( string path ){ struct dirent *file; DIR *dir; dir = opendir( path.c_str() ); if( !dir ) return false; /* Parse the directory and remove everything it contains. */ while( (file = readdir( dir )) ) { struct stat statbuf; string filename; /* Skip "." and ".." */ if( !*file->d_name || *file->d_name == '.' || (!*(file->d_name+1) && *file->d_name == '.' && *(file->d_name+1) == '.') ) { continue; } filename += path + "/"; filename += file->d_name; if( !stat( filename.c_str(), &statbuf ) && statbuf.st_mode & S_IFDIR ) { OSAPI_RmDir( filename ); } else { unlink( filename.c_str() ); } } /* Close the directory */ closedir( dir ); rmdir( path.c_str() ); return true;}//---------------------------------------------------------------------------#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?