diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt index 529f4a9bd..88cb8a082 100644 --- a/plugins/zynaddsubfx/CMakeLists.txt +++ b/plugins/zynaddsubfx/CMakeLists.txt @@ -105,7 +105,9 @@ LINK_LIBRARIES(${FFTW3F_LIBRARIES} -lz -lpthread ${CMAKE_CURRENT_BINARY_DIR}/flt # FLTK needs X IF(LMMS_BUILD_LINUX) -LINK_LIBRARIES(-lX11) +FIND_PACKAGE(X11) +FIND_PACKAGE(Freetype) +LINK_LIBRARIES(${X11_LIBRARIES} ${X11_Xft_LIB} ${FREETYPE_LIBRARY}) ENDIF(LMMS_BUILD_LINUX) # link system-libraries when on win32 diff --git a/plugins/zynaddsubfx/fltk/CMakeLists.txt b/plugins/zynaddsubfx/fltk/CMakeLists.txt index 0fd101003..55653d0c0 100644 --- a/plugins/zynaddsubfx/fltk/CMakeLists.txt +++ b/plugins/zynaddsubfx/fltk/CMakeLists.txt @@ -65,6 +65,16 @@ ENDIF(APPLE) IF(UNIX) FIND_PACKAGE(X11) SET( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} -lm) + SET( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} -lm) + SET(USE_XFT 0) + IF(X11_Xft_FOUND) + FIND_PACKAGE(Freetype) + IF(FREETYPE_FOUND) + SET(FOUND_XFT 1) + SET(FLTK_PLATFORM_DEPENDENT_LIBS ${FLTK_PLATFORM_DEPENDENT_LIBS} ${X11_Xft_LIB} ${FREETYPE_LIBRARIES}) + INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS} ${X11_Xft_INCLUDE_PATH}) + ENDIF(FREETYPE_FOUND) + ENDIF(X11_Xft_FOUND) ENDIF(UNIX) IF(APPLE AND NOT FLTK_APPLE_X11) diff --git a/plugins/zynaddsubfx/fltk/FL/x.H b/plugins/zynaddsubfx/fltk/FL/x.H index 88802b98b..3a3139317 100644 --- a/plugins/zynaddsubfx/fltk/FL/x.H +++ b/plugins/zynaddsubfx/fltk/FL/x.H @@ -65,10 +65,34 @@ extern FL_EXPORT int fl_screen; extern FL_EXPORT XVisualInfo *fl_visual; extern FL_EXPORT Colormap fl_colormap; +#if USE_XFT +// access to core fonts +FL_EXPORT XFontStruct* fl_xxfont(); +class Fl_XFont_On_Demand +{ +public: + Fl_XFont_On_Demand(XFontStruct* p = NULL) : ptr(p) { } + Fl_XFont_On_Demand& operator=(const Fl_XFont_On_Demand& x) + { ptr = x.ptr; return *this; } + Fl_XFont_On_Demand& operator=(XFontStruct* p) + { ptr = p; return *this; } + XFontStruct* value() { if (!ptr) { ptr = fl_xxfont(); } return ptr; } + operator XFontStruct*() { return value(); } + XFontStruct& operator*() { return *value(); } + XFontStruct* operator->() { return value(); } + bool operator==(const Fl_XFont_On_Demand& x) { return ptr == x.ptr; } + bool operator!=(const Fl_XFont_On_Demand& x) { return ptr != x.ptr; } +private: + XFontStruct* ptr; +}; +extern FL_EXPORT Fl_XFont_On_Demand fl_xfont; +#else +extern FL_EXPORT XFontStruct* fl_xfont; +#endif + // drawing functions: extern FL_EXPORT GC fl_gc; extern FL_EXPORT Window fl_window; -extern FL_EXPORT XFontStruct* fl_xfont; extern FL_EXPORT void *fl_xftfont; FL_EXPORT ulong fl_xpixel(Fl_Color i); FL_EXPORT ulong fl_xpixel(uchar r, uchar g, uchar b); diff --git a/plugins/zynaddsubfx/fltk/configh.cmake.in b/plugins/zynaddsubfx/fltk/configh.cmake.in index 1be52e526..e3ffc70fb 100644 --- a/plugins/zynaddsubfx/fltk/configh.cmake.in +++ b/plugins/zynaddsubfx/fltk/configh.cmake.in @@ -80,8 +80,12 @@ * Use the new Xft library to draw anti-aliased text. */ +#cmakedefine FOUND_XFT +#ifdef FOUND_XFT +#define USE_XFT 1 +#else #define USE_XFT 0 - +#endif /* * HAVE_XDBE: * diff --git a/plugins/zynaddsubfx/fltk/src/fl_font_x.cxx b/plugins/zynaddsubfx/fltk/src/fl_font_x.cxx index be1be0a6f..5701c45f6 100644 --- a/plugins/zynaddsubfx/fltk/src/fl_font_x.cxx +++ b/plugins/zynaddsubfx/fltk/src/fl_font_x.cxx @@ -195,7 +195,9 @@ static Fl_FontSize* find(int fnum, int size) { int fl_font_ = 0; int fl_size_ = 0; +#if USE_XFT != 1 XFontStruct* fl_xfont = 0; +#endif void *fl_xftfont = 0; static GC font_gc;