X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Fwin32text.c;h=e3464674ed26ea50961fd1afe1b8455918d1fc0e;hb=6650cb888870a57b45165635a486d36d9afbcf87;hp=e8c430961943bb27f9eb6eea8e3e498598178d24;hpb=5e2c4b1a9c4a26bcaf02c95ba81a055bf9d4b12c;p=vlc diff --git a/modules/misc/win32text.c b/modules/misc/win32text.c index e8c4309619..e3464674ed 100644 --- a/modules/misc/win32text.c +++ b/modules/misc/win32text.c @@ -1,10 +1,11 @@ /***************************************************************************** * win32text.c : Text drawing routines using the TextOut win32 API ***************************************************************************** - * Copyright (C) 2002 - 2005 the VideoLAN team + * Copyright (C) 2002 - 2009 the VideoLAN team * $Id$ * * Authors: Gildas Bazin + * Pierre Ynard * * 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 @@ -239,7 +240,7 @@ static int Render( filter_t *p_filter, subpicture_region_t *p_region, fmt.p_palette->palette[i][3] = pi_gamma[i]; } - p_region->p_picture = picture_New( fmt.i_chroma, fmt.i_width, fmt.i_height, fmt.i_aspect ); + p_region->p_picture = picture_NewFromFormat( &fmt ); if( !p_region->p_picture ) { free( fmt.p_palette ); @@ -302,11 +303,13 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, int i, i_width, i_height; HBITMAP bitmap, bitmap_bak; BITMAPINFO *p_bmi; - RECT rect = {0}; - SIZE size; + RECT rect = { 0, 0, 0, 0 }; /* Sanity check */ if( !p_region_in || !p_region_out ) return VLC_EGENERIC; + if( !p_region_in->psz_text || !*p_region_in->psz_text ) + return VLC_EGENERIC; + psz_string = malloc( (strlen( p_region_in->psz_text )+1) * sizeof(TCHAR) ); if( !psz_string ) return VLC_ENOMEM; @@ -344,9 +347,9 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, SetTextColor( p_sys->hcdc, RGB( (i_font_color >> 16) & 0xff, (i_font_color >> 8) & 0xff, i_font_color & 0xff) ); - GetTextExtentExPoint( p_sys->hcdc, psz_string, _tcslen(psz_string), - 0, 0, 0, &size ); - i_width = rect.right = size.cx; i_height = rect.bottom = size.cy; + DrawText( p_sys->hcdc, psz_string, -1, &rect, + DT_CALCRECT | DT_CENTER | DT_NOPREFIX ); + i_width = rect.right; i_height = rect.bottom; p_bmi = malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*16); memset( p_bmi, 0, sizeof(BITMAPINFOHEADER) ); @@ -377,8 +380,8 @@ static int RenderText( filter_t *p_filter, subpicture_region_t *p_region_out, bitmap_bak = SelectObject( p_sys->hcdc, bitmap ); FillRect( p_sys->hcdc, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH) ); - //TextOut( p_sys->hcdc, 0, 0, psz_string, strlen(psz_string) ); - if( !DrawText( p_sys->hcdc, psz_string, -1, &rect, 0 ) ) + if( !DrawText( p_sys->hcdc, psz_string, -1, &rect, + DT_CENTER | DT_NOPREFIX ) ) { msg_Err( p_filter, "could not draw text" ); }