[vlc-devel] [PATCH v2] freetype: link directly to dwrite in win32
Steve Lhomme
robux4 at ycbcr.xyz
Wed Jun 10 14:01:31 CEST 2020
Since we target Windows 7 we know the DLL is always there.
That's how the Winstore mode was already working.
---
modules/text_renderer/Makefile.am | 5 +--
.../text_renderer/freetype/fonts/dwrite.cpp | 41 +------------------
2 files changed, 4 insertions(+), 42 deletions(-)
diff --git a/modules/text_renderer/Makefile.am b/modules/text_renderer/Makefile.am
index d3cdf754aaaa..56cc82a1ab05 100644
--- a/modules/text_renderer/Makefile.am
+++ b/modules/text_renderer/Makefile.am
@@ -14,12 +14,11 @@ libfreetype_plugin_la_LDFLAGS = $(FREETYPE_LDFLAGS) -rpath '$(textdir)'
if HAVE_WIN32
libfreetype_plugin_la_SOURCES += text_renderer/freetype/fonts/dwrite.cpp
+libfreetype_plugin_la_LIBADD += -ldwrite -luuid
libfreetype_plugin_la_LINK = $(CXXLINK)
if HAVE_WIN32_DESKTOP
libfreetype_plugin_la_SOURCES += text_renderer/freetype/fonts/win32.c
-libfreetype_plugin_la_LIBADD += -liconv -lz -lusp10 -lgdi32 -luuid
-else
-libfreetype_plugin_la_LIBADD += -ldwrite -luuid
+libfreetype_plugin_la_LIBADD += -liconv -lz -lusp10 -lgdi32
endif
else
libfreetype_plugin_la_LINK = $(LINK)
diff --git a/modules/text_renderer/freetype/fonts/dwrite.cpp b/modules/text_renderer/freetype/fonts/dwrite.cpp
index 943c60f3a257..8a5f8392674e 100644
--- a/modules/text_renderer/freetype/fonts/dwrite.cpp
+++ b/modules/text_renderer/freetype/fonts/dwrite.cpp
@@ -46,31 +46,18 @@ typedef HRESULT ( WINAPI *DWriteCreateFactoryProc ) (
struct dw_sys_t
{
- HMODULE p_dw_dll;
ComPtr< IDWriteFactory2 > p_dw_factory;
ComPtr< IDWriteFontCollection > p_dw_system_fonts;
ComPtr< IDWriteNumberSubstitution > p_dw_substitution;
ComPtr< IDWriteFontFallback > p_dw_fallbacks;
vector< FT_Stream > streams;
- dw_sys_t( HMODULE p_dw_dll ) : p_dw_dll( p_dw_dll )
+ dw_sys_t( )
{
/* This will fail on versions of Windows prior to 8.1 */
-#if VLC_WINSTORE_APP
if( DWriteCreateFactory( DWRITE_FACTORY_TYPE_SHARED, __uuidof( IDWriteFactory2 ),
reinterpret_cast<IUnknown **>( p_dw_factory.GetAddressOf() ) ) )
throw runtime_error( "failed to create DWrite factory" );
-#else
- DWriteCreateFactoryProc pf =
- ( DWriteCreateFactoryProc ) GetProcAddress( p_dw_dll, "DWriteCreateFactory" );
-
- if( pf == NULL )
- throw runtime_error( "GetProcAddress() failed" );
-
- if( pf( DWRITE_FACTORY_TYPE_SHARED, __uuidof( IDWriteFactory2 ),
- reinterpret_cast<IUnknown **>( p_dw_factory.GetAddressOf() ) ) )
- throw runtime_error( "failed to create DWrite factory" );
-#endif
if( p_dw_factory->GetSystemFontCollection( p_dw_system_fonts.GetAddressOf() ) )
throw runtime_error( "GetSystemFontCollection() failed" );
@@ -106,29 +93,14 @@ static inline void AppendFamily( vlc_family_t **pp_list, vlc_family_t *p_family
extern "C" int InitDWrite( filter_t *p_filter )
{
dw_sys_t *p_dw_sys;
- HMODULE p_dw_dll = NULL;
try
{
-#if VLC_WINSTORE_APP
- p_dw_sys = new dw_sys_t( p_dw_dll );
-#else
- p_dw_dll = LoadLibrary( TEXT( "Dwrite.dll" ) );
- if( p_dw_dll == NULL )
- return VLC_EGENERIC;
-
- p_dw_sys = new dw_sys_t( p_dw_dll );
-#endif
+ p_dw_sys = new dw_sys_t( );
}
catch( const exception &e )
{
-#if !VLC_WINSTORE_APP
- FreeLibrary( p_dw_dll );
- (void)e;
-#else
msg_Err( p_filter, "InitDWrite(): %s", e.what() );
-#endif
-
return VLC_EGENERIC;
}
@@ -143,16 +115,7 @@ extern "C" int ReleaseDWrite( filter_t *p_filter )
filter_sys_t *p_sys = reinterpret_cast<filter_sys_t *>( p_filter->p_sys );
dw_sys_t *p_dw_sys = ( dw_sys_t * ) p_sys->p_dw_sys;
-#if VLC_WINSTORE_APP
delete p_dw_sys;
-#else
- HMODULE p_dw_dll = NULL;
- if( p_dw_sys && p_dw_sys->p_dw_dll )
- p_dw_dll = p_dw_sys->p_dw_dll;
-
- delete p_dw_sys;
- if( p_dw_dll ) FreeLibrary( p_dw_dll );
-#endif
return VLC_SUCCESS;
}
--
2.26.2
More information about the vlc-devel
mailing list