wrappers.cpp
来自「VLC媒体播放程序」· C++ 代码 · 共 398 行
CPP
398 行
/***************************************************************************** * wrappers.cpp: Wrappers around C++ objects ***************************************************************************** * Copyright (C) 2003 VideoLAN * $Id: wrappers.cpp,v 1.13 2003/10/22 19:12:56 ipkiss Exp $ * * Authors: Olivier Teuli鑢e <ipkiss@via.ecp.fr> * Emmanuel Puig <karibu@via.ecp.fr> * * 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. *****************************************************************************///--- GENERAL ---------------------------------------------------------------#include <stdlib.h>#include <string>using namespace std;//--- VLC -------------------------------------------------------------------#include <vlc/intf.h>extern intf_thread_t *g_pIntf;//--- SKIN ------------------------------------------------------------------#include "../src/anchor.h"#include "../src/banks.h"#include "../controls/controls.h"#include "../src/font.h"#include "../os_font.h"#include "../src/window.h"#include "../src/theme.h"#include "../src/skin_common.h"#include "wrappers.h"//---------------------------------------------------------------------------// Local prototypes//---------------------------------------------------------------------------static bool ConvertBoolean( const char *value );static int ConvertColor( const char *transcolor );static int CheckCoords( const char *coord );static void ConvertCoords( char *coord, double *p_coord );static int ConvertAlign( char *align );//---------------------------------------------------------------------------// Wrappers//---------------------------------------------------------------------------void AddBitmap( char *name, char *file, char *transcolor ){ g_pIntf->p_sys->p_theme->BmpBank->Add( name, file, ConvertColor( transcolor ) );}//---------------------------------------------------------------------------void AddEvent( char *name, char *event, char *key ){ g_pIntf->p_sys->p_theme->EvtBank->Add( name, event, key );}//---------------------------------------------------------------------------void AddFont( char *name, char *font, char *size, char *color, char *weight, char *italic, char *underline ){ g_pIntf->p_sys->p_theme->FntBank->Add( name, font, atoi( size ), ConvertColor( color ), atoi( weight ), ConvertBoolean( italic ), ConvertBoolean( underline ) );}//---------------------------------------------------------------------------void AddThemeInfo( char *name, char *author, char *email, char *webpage ){ g_pIntf->p_sys->p_theme->ChangeClientWindowName( "VLC Media Player - " + (string)name );}//---------------------------------------------------------------------------void StartWindow( char *name, char *x, char *y, char *visible, char *fadetime, char *alpha, char *movealpha, char *dragdrop, char *playondrop ){ g_pIntf->p_sys->p_theme->AddWindow( name, atoi( x ), atoi( y ), ConvertBoolean( visible ), atoi( fadetime ), atoi( alpha ), atoi( movealpha ), ConvertBoolean( dragdrop ), ConvertBoolean( playondrop ) );}//---------------------------------------------------------------------------void EndWindow(){}//---------------------------------------------------------------------------void StartTheme( char *magnet ){ g_pIntf->p_sys->p_theme->StartTheme( atoi( magnet ) );}//---------------------------------------------------------------------------void EndTheme(){}//---------------------------------------------------------------------------void StartControlGroup( char *x, char *y ){ g_pIntf->p_sys->p_theme->OffBank->PushOffSet( atoi( x ), atoi( y ) );}//---------------------------------------------------------------------------void EndControlGroup(){ g_pIntf->p_sys->p_theme->OffBank->PopOffSet();}//---------------------------------------------------------------------------void AddAnchor( char *x, char *y, char *len, char *priority ){ int XOff, YOff; SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->AnchorList.push_back( new Anchor( g_pIntf, atoi( x ) + XOff, atoi( y ) + YOff, atoi( len ), atoi( priority ), vlcWin ) );}//---------------------------------------------------------------------------//---------------------------------------------------------------------------// CONTROLS//---------------------------------------------------------------------------void AddImage( char *id, char *visible, char *x, char *y, char *image, char *event, char *help ){ int XOff, YOff; SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->ControlList.push_back( new ControlImage( id, ConvertBoolean( visible ), atoi( x ) + XOff, atoi( y ) + YOff, image, event, help, vlcWin ) );}//---------------------------------------------------------------------------void AddRectangle( char *id, char *visible, char *x, char *y, char *w, char *h, char *color, char *event, char *help ){ int XOff, YOff; SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->ControlList.push_back( new ControlRectangle( id, ConvertBoolean( visible ), atoi( x ) + XOff, atoi( y ) + YOff, atoi( w ), atoi( h ), ConvertColor( color ), event, help, vlcWin ) );}//---------------------------------------------------------------------------void AddButton( char *id, char *visible, char *x, char *y, char *up, char *down, char *disabled, char *onclick, char *onmouseover, char *onmouseout, char *tooltiptext, char *help ){ int XOff, YOff; SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->ControlList.push_back( new ControlButton( id, ConvertBoolean( visible ), atoi( x ) + XOff, atoi( y ) + YOff, up, down, disabled, onclick, onmouseover, onmouseout, tooltiptext, help, vlcWin ) );}//---------------------------------------------------------------------------void AddCheckBox( char *id, char *visible, char *x, char *y, char *img1, char *img2, char *clickimg1, char *clickimg2, char *disabled1, char *disabled2, char *onclick1, char *onclick2, char *onmouseover1, char *onmouseout1, char *onmouseover2, char *onmouseout2, char *tooltiptext1, char *tooltiptext2, char *help ){ int XOff, YOff; SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->ControlList.push_back( new ControlCheckBox( id, ConvertBoolean( visible ), atoi( x ) + XOff, atoi( y ) + YOff, img1, img2, clickimg1, clickimg2, disabled1, disabled2, onclick1, onclick2, onmouseover1, onmouseout1, onmouseover2, onmouseout2, tooltiptext1, tooltiptext2, help, vlcWin ) );}//---------------------------------------------------------------------------void AddSlider( char *id, char *visible, char *x, char *y, char *type, char *up, char *down, char *abs, char *ord, char *tooltiptext, char *help ){ int XOff, YOff, i; int res1 = CheckCoords( abs ); int res2 = CheckCoords( ord ); if( res1 < 2 || res2 < 2 ) { msg_Warn( g_pIntf, "Cannot add slider: not enough points" ); return; } if( res1 != res2 ) { msg_Warn( g_pIntf, "Cannot add slider: invalid list of points" ); return; } // now, res1 == res2 double *p_abs, *p_ord; p_abs = new double[res1]; p_ord = new double[res1]; ConvertCoords( abs, p_abs ); ConvertCoords( ord, p_ord ); SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); // Move control g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); for( i = 0; i < res1; i++ ) { p_abs[i] += XOff + atoi(x); p_ord[i] += YOff + atoi(y); } // Create Control if( g_pIntf->p_sys->p_theme->ConstructPlaylist ) { GenericControl *playlist = vlcWin->ControlList.back(); ( (ControlPlayList *)playlist )->InitSliderCurve( p_abs, p_ord, res1, up, down ); } else { vlcWin->ControlList.push_back( new ControlSlider( id, ConvertBoolean( visible ), type, up, down, p_abs, p_ord, res1, tooltiptext, help, vlcWin ) ); } delete[] p_abs; delete[] p_ord;}//---------------------------------------------------------------------------void AddPlayList( char *id, char *visible, char *x, char *y, char *width, char *infowidth, char *font, char *playfont, char *selcolor, char *abs, char *ord, char *longfilename, char *help ){ g_pIntf->p_sys->p_theme->ConstructPlaylist = true; int XOff, YOff, i; int res1 = CheckCoords( abs ); int res2 = CheckCoords( ord ); if( res1 < 2 || res2 < 2 ) { msg_Warn( g_pIntf, "Cannot add slider: not enough points" ); return; } if( res1 != res2 ) { msg_Warn( g_pIntf, "Cannot add slider: invalid list of points" ); return; } // now, res1 == res2 double *p_abs, *p_ord; p_abs = new double[res1]; p_ord = new double[res1]; ConvertCoords( abs, p_abs ); ConvertCoords( ord, p_ord ); SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); // Move control g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); for( i = 0; i < res1; i++ ) { p_abs[i] += XOff + atoi(x); p_ord[i] += YOff + atoi(y); } // Move control g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->ControlList.push_back( new ControlPlayList( id, ConvertBoolean( visible ), atoi( width ), atoi( infowidth ), font, playfont, ConvertColor( selcolor ), p_abs, p_ord, res1, ConvertBoolean( longfilename ), help, vlcWin ) ); delete[] p_abs; delete[] p_ord;}//---------------------------------------------------------------------------void AddPlayListEnd(){ g_pIntf->p_sys->p_theme->ConstructPlaylist = false;}//---------------------------------------------------------------------------void AddText( char *id, char *visible, char *x, char *y, char *text, char *font, char *align, char *width, char *display, char *scroll, char *scrollspace, char *help ){ int XOff, YOff; SkinWindow *vlcWin = g_pIntf->p_sys->p_theme->WindowList.back(); g_pIntf->p_sys->p_theme->OffBank->GetOffSet( XOff, YOff ); vlcWin->ControlList.push_back( new ControlText( id, ConvertBoolean( visible ), atoi( x ) + XOff, atoi( y ) + YOff, text, font, ConvertAlign( align ), atoi( width ), display, ConvertBoolean( scroll ), atoi( scrollspace ), help, vlcWin ) );}//---------------------------------------------------------------------------//---------------------------------------------------------------------------// Useful functions//---------------------------------------------------------------------------static bool ConvertBoolean( const char *value ){ return strcmp( value, "true" ) == 0;}//---------------------------------------------------------------------------static int ConvertColor( const char *transcolor ){ int iRed, iGreen, iBlue; iRed = iGreen = iBlue = 0; sscanf( transcolor, "#%2X%2X%2X", &iRed, &iGreen, &iBlue ); return ( 65536 * iBlue + 256 * iGreen + iRed );}//---------------------------------------------------------------------------// Check that abs and ord contain the same number of comasstatic int CheckCoords( const char *coord ){ int i_coord = 1; while( coord && *coord ) { if( *coord == ',' ) i_coord++; coord++; } return i_coord;}//---------------------------------------------------------------------------static void ConvertCoords( char *coord, double *p_coord ){ int i = 0; char *ptr = coord; while( coord && *coord ) { if( *coord == ',' ) { *coord = '\0'; p_coord[i] = atof( ptr ); i++; ptr = coord + 1; } coord++; } p_coord[i] = atof( ptr );}//---------------------------------------------------------------------------static int ConvertAlign( char *align ){ if( strcmp( align, "left" ) == 0 ) return VLC_FONT_ALIGN_LEFT; else if( strcmp( align, "right" ) == 0 ) return VLC_FONT_ALIGN_RIGHT; else if( strcmp( align, "center" ) == 0 ) return VLC_FONT_ALIGN_CENTER; else return VLC_FONT_ALIGN_LEFT;}//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?