x11_font.cpp

来自「VLC媒体播放程序」· C++ 代码 · 共 140 行

CPP
140
字号
/***************************************************************************** * x11_font.cpp: X11 implementation of the Font class ***************************************************************************** * Copyright (C) 2003 VideoLAN * $Id: x11_font.cpp,v 1.10 2003/06/09 22:02:13 asmax Exp $ * * Authors: 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>//--- VLC -------------------------------------------------------------------#include <vlc/intf.h>//--- SKIN ------------------------------------------------------------------#include "../src/skin_common.h"#include "../src/graphics.h"#include "../os_graphics.h"#include "../src/font.h"#include "../os_font.h"#include "../src/theme.h"#include "../os_theme.h"//---------------------------------------------------------------------------// Font object//---------------------------------------------------------------------------X11Font::X11Font( intf_thread_t *_p_intf, string fontname, int size,    int color, int weight, bool italic, bool underline )    : SkinFont( _p_intf, fontname, size, color, weight, italic, underline ){    display = g_pIntf->p_sys->display;    Underline = underline;    char name[256];    char slant = ( italic ? 'i' : 'r' );    // FIXME: a lot of work...    size = ( size < 10 ? 8 : 12 );    snprintf( name, 256, "-*-helvetica-bold-%c-*-*-*-%i-*-*-*-*-*-*",               slant, 10 * size );    XLOCK;    FontInfo = XLoadQueryFont( display, name );    font = FontInfo->fid;    Ascent = FontInfo->max_bounds.ascent;    Descent = FontInfo->max_bounds.descent;    XUNLOCK;}//---------------------------------------------------------------------------X11Font::~X11Font(){    XLOCK;    XFreeFont( display, FontInfo );    XUNLOCK;}//---------------------------------------------------------------------------void X11Font::AssignFont( Graphics *dest ){}//---------------------------------------------------------------------------void X11Font::GetSize( string text, int &w, int &h ){    int direction, fontAscent, fontDescent;    XCharStruct overall;        XLOCK;    XQueryTextExtents( display, font, text.c_str(), text.size(),                         &direction, &fontAscent, &fontDescent, &overall );    XUNLOCK;    w = overall.rbearing - overall.lbearing;    h = Ascent + Descent;}//---------------------------------------------------------------------------void X11Font::GenericPrint( Graphics *dest, string text, int x, int y,                                 int w, int h, int align, int color ){    // Get handles    Drawable drawable = ( (X11Graphics *)dest )->GetImage();    GC gc = ( (X11Graphics *)dest )->GetGC();    XGCValues gcVal;    // Change color to avoid transparency    gcVal.foreground = (color < 10 ? 10 : color);    gcVal.font = font;    XRectangle rect;    rect.x = x;    rect.y = y;    rect.width = w;    rect.height = h;    XLOCK;    XChangeGC( display, gc, GCForeground|GCFont, &gcVal );    // Set the clipping region    XSetClipRectangles( display, gc, 0, 0, &rect, 1, Unsorted );          // Render text no the drawable    XDrawString( display, drawable, gc, x, y+Ascent, text.c_str(), text.size());    if( Underline )    {        XDrawLine( display, drawable, gc, x, y+Ascent+1, x+w, y+Ascent+1 );    }        // Reset the clip mask    XSetClipMask( display, gc, None );    XUNLOCK;}//---------------------------------------------------------------------------void X11Font::Print( Graphics *dest, string text, int x, int y, int w,                       int h, int align ){    GenericPrint( dest, text, x, y, w, h, align, Color );}//---------------------------------------------------------------------------void X11Font::PrintColor( Graphics *dest, string text, int x, int y, int w,                            int h, int align, int color ){    GenericPrint( dest, text, x, y, w, h, align, color );}//---------------------------------------------------------------------------#endif

⌨️ 快捷键说明

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