⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ws.c

📁 uclinux下mplayer的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
}void wsPutImage( wsTWindow * win ){ if ( wsUseXShm )  {   XShmPutImage( wsDisplay,win->WindowID,win->wGC,win->xImage,    0,0,    ( win->Width - win->xImage->width ) / 2,( win->Height - win->xImage->height ) / 2,    win->xImage->width,win->xImage->height,0 );  }  else   {    XPutImage( wsDisplay,win->WindowID,win->wGC,win->xImage,    0,0,    ( win->Width - win->xImage->width ) / 2,( win->Height - win->xImage->height ) / 2,    win->xImage->width,win->xImage->height );   }}// ----------------------------------------------------------------------------------------------//    Move window to x, y.// ----------------------------------------------------------------------------------------------void wsMoveWindow( wsTWindow * win,int b,int x, int y ){ if ( b )  {   switch ( x )    {     case -1: win->X=( wsMaxX / 2 ) - ( win->Width / 2 ) + wsOrgX; break;     case -2: win->X=wsMaxX - win->Width + wsOrgX; break;     default: win->X=x; break;    }   switch ( y )    {     case -1: win->Y=( wsMaxY / 2 ) - ( win->Height / 2 ) + wsOrgY; break;     case -2: win->Y=wsMaxY - win->Height + wsOrgY; break;     default: win->Y=y; break;    }  }  else { win->X=x; win->Y=y; } win->SizeHint.flags=PPosition | PWinGravity; win->SizeHint.x=win->X; win->SizeHint.y=win->Y; win->SizeHint.win_gravity=StaticGravity; XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); XMoveWindow( wsDisplay,win->WindowID,win->X,win->Y ); if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height );}// ----------------------------------------------------------------------------------------------//    Resize window to sx, sy.// ----------------------------------------------------------------------------------------------void wsResizeWindow( wsTWindow * win,int sx, int sy ){ win->Width=sx; win->Height=sy; win->SizeHint.flags=PPosition | PSize | PWinGravity;// | PBaseSize; win->SizeHint.x=win->X; win->SizeHint.y=win->Y; win->SizeHint.width=win->Width; win->SizeHint.height=win->Height; if ( win->Property & wsMinSize )  {   win->SizeHint.flags|=PMinSize;   win->SizeHint.min_width=win->Width;   win->SizeHint.min_height=win->Height;  } if ( win->Property & wsMaxSize )  {   win->SizeHint.flags|=PMaxSize;   win->SizeHint.max_width=win->Width;   win->SizeHint.max_height=win->Height;  } win->SizeHint.win_gravity=StaticGravity; win->SizeHint.base_width=sx; win->SizeHint.base_height=sy; if ( vo_wm_type == 0 ) XUnmapWindow( wsDisplay,win->WindowID ); XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); XResizeWindow( wsDisplay,win->WindowID,sx,sy ); XMapRaised( wsDisplay,win->WindowID ); if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height );}// ----------------------------------------------------------------------------------------------//    Iconify window.// ----------------------------------------------------------------------------------------------void wsIconify( wsTWindow win ){ XIconifyWindow( wsDisplay,win.WindowID,0 ); }// ----------------------------------------------------------------------------------------------//    Move top the window.// ----------------------------------------------------------------------------------------------void wsMoveTopWindow( Display * wsDisplay,Window win ){// XUnmapWindow( wsDisplay,win );// XMapWindow( wsDisplay,win ); XMapRaised( wsDisplay,win ); XRaiseWindow( wsDisplay,win );}// ----------------------------------------------------------------------------------------------//    Set window background to 'color'.// ----------------------------------------------------------------------------------------------void wsSetBackground( wsTWindow * win,int color ){ XSetWindowBackground( wsDisplay,win->WindowID,color ); }void wsSetBackgroundRGB( wsTWindow * win,int r,int g,int b ){ int color = 0; switch ( wsOutMask )  {   case wsRGB32:   case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b;  break;   case wsBGR32:   case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r;  break;   case wsRGB16: PACK_RGB16( b,g,r,color ); break;   case wsBGR16: PACK_RGB16( r,g,b,color ); break;   case wsRGB15: PACK_RGB15( b,g,r,color ); break;   case wsBGR15: PACK_RGB15( r,g,b,color ); break;  } XSetWindowBackground( wsDisplay,win->WindowID,color );}void wsSetForegroundRGB( wsTWindow * win,int r,int g,int b ){ int color = 0; switch ( wsOutMask )  {   case wsRGB32:   case wsRGB24: color=( r << 16 ) + ( g << 8 ) + b;  break;   case wsBGR32:   case wsBGR24: color=( b << 16 ) + ( g << 8 ) + r;  break;   case wsRGB16: PACK_RGB16( b,g,r,color ); break;   case wsBGR16: PACK_RGB16( r,g,b,color ); break;   case wsRGB15: PACK_RGB15( b,g,r,color ); break;   case wsBGR15: PACK_RGB15( r,g,b,color ); break;  } XSetForeground( wsDisplay,win->wGC,color );}// ----------------------------------------------------------------------------------------------//    Draw string at x,y with fc ( foreground color ) and bc ( background color ).// ----------------------------------------------------------------------------------------------void wsDrawString( wsTWindow win,int x,int y,char * str,int fc,int bc ){ XSetForeground( wsDisplay,win.wGC,bc ); XFillRectangle( wsDisplay,win.WindowID,win.wGC,x,y,   XTextWidth( win.Font,str,strlen( str ) ) + 20,   win.FontHeight + 2 ); XSetForeground( wsDisplay,win.wGC,fc ); XDrawString( wsDisplay,win.WindowID,win.wGC,x + 10,y + 13,str,strlen( str ) );}// ----------------------------------------------------------------------------------------------//    Calculation string width.// ----------------------------------------------------------------------------------------------int wsTextWidth( wsTWindow win,char * str ){ return XTextWidth( win.Font,str,strlen( str ) ) + 20; }// ----------------------------------------------------------------------------------------------//    Show / hide mouse cursor.// ----------------------------------------------------------------------------------------------void wsVisibleMouse( wsTWindow * win,int m ){ switch ( m )  {   case wsShowMouseCursor:    if ( win->wsCursor != None )     {      XFreeCursor( wsDisplay,win->wsCursor );      win->wsCursor=None;     }    XDefineCursor( wsDisplay,win->WindowID,0 );    break;   case wsHideMouseCursor:    win->wsCursor=XCreatePixmapCursor( wsDisplay,win->wsCursorPixmap,win->wsCursorPixmap,&win->wsColor,&win->wsColor,0,0 );    XDefineCursor( wsDisplay,win->WindowID,win->wsCursor );    break;  } XFlush( wsDisplay );}int wsGetDepthOnScreen( void ){ int depth; XImage * mXImage; Visual * visual; if( (depth = vo_find_depth_from_visuals( wsDisplay,wsScreen,&visual )) > 0 )  {   mXImage = XCreateImage( wsDisplay,visual,depth,ZPixmap,0,NULL,			   1,1,32,0 );   wsDepthOnScreen = mXImage->bits_per_pixel;   wsRedMask=mXImage->red_mask;   wsGreenMask=mXImage->green_mask;   wsBlueMask=mXImage->blue_mask;#ifdef WORDS_BIGENDIAN   wsNonNativeOrder = mXImage->byte_order == LSBFirst;#else   wsNonNativeOrder = mXImage->byte_order == MSBFirst;#endif   XDestroyImage( mXImage );  } else  {   int                 bpp,ibpp;   XWindowAttributes   attribs;   mXImage=XGetImage( wsDisplay,wsRootWin,0,0,1,1,AllPlanes,ZPixmap );   bpp=mXImage->bits_per_pixel;   XGetWindowAttributes( wsDisplay,wsRootWin,&attribs );   ibpp=attribs.depth;   mXImage=XGetImage( wsDisplay,wsRootWin,0,0,1,1,AllPlanes,ZPixmap );   bpp=mXImage->bits_per_pixel;   if ( ( ibpp + 7 ) / 8 != ( bpp + 7 ) / 8 ) ibpp=bpp;   wsDepthOnScreen=ibpp;   wsRedMask=mXImage->red_mask;   wsGreenMask=mXImage->green_mask;   wsBlueMask=mXImage->blue_mask;   XDestroyImage( mXImage );  } return wsDepthOnScreen;}void wsXDone( void ){ XCloseDisplay( wsDisplay );}void wsVisibleWindow( wsTWindow * win,int show ){ switch( show )  {   case wsShowWindow: XMapRaised( wsDisplay,win->WindowID ); break;   case wsHideWindow: XUnmapWindow( wsDisplay,win->WindowID ); break;  } XFlush( wsDisplay );}void wsDestroyImage( wsTWindow * win ){ if ( win->xImage )  {   XDestroyImage( win->xImage );   if ( wsUseXShm )    {     XShmDetach( wsDisplay,&win->Shminfo );     shmdt( win->Shminfo.shmaddr );    }  } win->xImage=NULL;}void wsCreateImage( wsTWindow * win,int Width,int Height ){ int CompletionType = -1; if ( wsUseXShm )  {   CompletionType=XShmGetEventBase( wsDisplay ) + ShmCompletion;   win->xImage=XShmCreateImage( wsDisplay,win->VisualInfo.visual,                   win->VisualInfo.depth,ZPixmap,NULL,&win->Shminfo,Width,Height );   if ( win->xImage == NULL )    {     mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_WS_ShmError );     exit( 0 );    }   win->Shminfo.shmid=shmget( IPC_PRIVATE,win->xImage->bytes_per_line * win->xImage->height,IPC_CREAT|0777 );   if ( win->Shminfo.shmid < 0 )    {     XDestroyImage( win->xImage );     mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_WS_ShmError );     exit( 0 );    }   win->Shminfo.shmaddr=(char *)shmat( win->Shminfo.shmid,0,0 );   if ( win->Shminfo.shmaddr == ((char *) -1) )    {     XDestroyImage( win->xImage );     if ( win->Shminfo.shmaddr != ((char *) -1) ) shmdt( win->Shminfo.shmaddr );     mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_WS_ShmError );     exit( 0 );    }   win->xImage->data=win->Shminfo.shmaddr;   win->Shminfo.readOnly=0;   XShmAttach( wsDisplay,&win->Shminfo );   shmctl( win->Shminfo.shmid,IPC_RMID,0 );  }  else   {    win->xImage=XCreateImage( wsDisplay,win->VisualInfo.visual,win->VisualInfo.depth,                              ZPixmap,0,0,Width,Height,                              (wsDepthOnScreen == 3) ? 32 : wsDepthOnScreen,                              0 );    if ( ( win->xImage->data=malloc( win->xImage->bytes_per_line * win->xImage->height ) ) == NULL )     {      mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_WS_NotEnoughMemoryDrawBuffer );      exit( 0 );     }   } win->ImageData=(unsigned char *)win->xImage->data; win->ImageDataw=(unsigned short int *)win->xImage->data; win->ImageDatadw=(unsigned int *)win->xImage->data;}void wsResizeImage( wsTWindow * win,int Width,int Height ){ wsDestroyImage( win ); wsCreateImage( win,Width,Height ); }int wsGetOutMask( void ){ if ( ( wsDepthOnScreen == 32 )&&( wsRedMask == 0xff0000 )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0x0000ff ) ) return wsRGB32; if ( ( wsDepthOnScreen == 32 )&&( wsRedMask == 0x0000ff )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0xff0000 ) ) return wsBGR32; if ( ( wsDepthOnScreen == 24 )&&( wsRedMask == 0xff0000 )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0x0000ff ) ) return wsRGB24; if ( ( wsDepthOnScreen == 24 )&&( wsRedMask == 0x0000ff )&&( wsGreenMask == 0x00ff00 )&&( wsBlueMask == 0xff0000 ) ) return wsBGR24; if ( ( wsDepthOnScreen == 16 )&&( wsRedMask == 0xf800 )&&( wsGreenMask == 0x7e0 )&&( wsBlueMask ==   0x1f ) ) return wsRGB16; if ( ( wsDepthOnScreen == 16 )&&( wsRedMask ==   0x1f )&&( wsGreenMask == 0x7e0 )&&( wsBlueMask == 0xf800 ) ) return wsBGR16; if ( ( wsDepthOnScreen == 15 )&&( wsRedMask == 0x7c00 )&&( wsGreenMask == 0x3e0 )&&( wsBlueMask ==   0x1f ) ) return wsRGB15; if ( ( wsDepthOnScreen == 15 )&&( wsRedMask ==   0x1f )&&( wsGreenMask == 0x3e0 )&&( wsBlueMask == 0x7c00 ) ) return wsBGR15; return 0;}void wsSetTitle( wsTWindow * win,char * name ){ XStoreName( wsDisplay,win->WindowID,name ); }void wsSetMousePosition( wsTWindow * win,int x, int y ){ XWarpPointer( wsDisplay,wsRootWin,win->WindowID,0,0,0,0,x,y ); }#ifdef ENABLE_DPMSstatic int dpms_disabled=0;static int timeout_save=0;void wsScreenSaverOn( Display *mDisplay ){ int nothing;#ifdef HAVE_XDPMS if ( dpms_disabled )  {   if ( DPMSQueryExtension( mDisplay,&nothing,&nothing ) )    {     if ( !DPMSEnable( mDisplay ) ) mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_WS_DpmsUnavailable ); // restoring power saving settings      else       {        // DPMS does not seem to be enabled unless we call DPMSInfo        BOOL onoff;        CARD16 state;        DPMSInfo( mDisplay,&state,&onoff );        if ( onoff ) mp_msg( MSGT_GPLAYER,MSGL_V,"Successfully enabled DPMS.\n" );         else mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_WS_DpmsNotEnabled );       }    }  }#endif if ( timeout_save )  {   int dummy, interval, prefer_blank, allow_exp;   XGetScreenSaver( mDisplay,&dummy,&interval,&prefer_blank,&allow_exp );   XSetScreenSaver( mDisplay,timeout_save,interval,prefer_blank,allow_exp );   XGetScreenSaver( mDisplay,&timeout_save,&interval,&prefer_blank,&allow_exp );  }}void wsScreenSaverOff( Display * mDisplay ){ int interval,prefer_blank,allow_exp,nothing;#ifdef HAVE_XDPMS if ( DPMSQueryExtension( mDisplay,&nothing,&nothing ) )  {   BOOL onoff;   CARD16 state;   DPMSInfo( mDisplay,&state,&onoff );   if ( onoff )    {      Status stat;      mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"Disabling DPMS.\n" );      dpms_disabled=1;      stat=DPMSDisable( mDisplay );  // monitor powersave off      mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"stat: %d.\n",stat );   }  }#endif XGetScreenSaver( mDisplay,&timeout_save,&interval,&prefer_blank,&allow_exp ); if ( timeout_save ) XSetScreenSaver( mDisplay,0,interval,prefer_blank,allow_exp ); // turning off screensaver}#endifvoid wsSetShape( wsTWindow * win,char * data ){#ifdef HAVE_XSHAPE if ( !wsUseXShape ) return; if ( data )  {   win->Mask=XCreateBitmapFromData( wsDisplay,win->WindowID,data,win->Width,win->Height );   XShapeCombineMask( wsDisplay,win->WindowID,ShapeBounding,0,0,win->Mask,ShapeSet );   XFreePixmap( wsDisplay,win->Mask );  }  else XShapeCombineMask( wsDisplay,win->WindowID,ShapeBounding,0,0,None,ShapeSet );#endif}void wsSetIcon( Display * dsp,Window win,Pixmap icon,Pixmap mask ){ XWMHints * wm; long	    data[2]; Atom	    iconatom;  wm=XGetWMHints( dsp,win ); if ( !wm ) wm=XAllocWMHints(); wm->icon_pixmap=icon; wm->icon_mask=mask; wm->flags|=IconPixmapHint | IconMaskHint; XSetWMHints( dsp,win,wm ); data[0]=icon; data[1]=mask; iconatom=XInternAtom( dsp,"KWM_WIN_ICON",0 ); XChangeProperty( dsp,win,iconatom,iconatom,32,PropModeReplace,(unsigned char *)data,2 );  XFree( wm );}#include "wsmkeys.h"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -