mirror of
https://github.com/aseprite/aseprite.git
synced 2025-01-02 11:59:58 +00:00
Merge branch 'ft' of https://github.com/winterheart/aseprite into winterheart-ft
This commit is contained in:
commit
7f9d1f64d8
@ -70,6 +70,7 @@ option(USE_SHARED_LIBWEBP "Use your installed copy of libwebp" off)
|
||||
option(USE_SHARED_TINYXML "Use your installed copy of tinyxml" off)
|
||||
option(USE_SHARED_PIXMAN "Use your installed copy of pixman" off)
|
||||
option(USE_SHARED_FREETYPE "Use shared FreeType library" off)
|
||||
option(USE_SHARED_HARFBUZZ "Use shared Harfbuzz library" off)
|
||||
option(USE_SHARED_ALLEGRO4 "Use shared Allegro 4 library (without resize support)" off)
|
||||
option(ENABLE_MEMLEAK "Enable memory-leaks detector (only for developers)" off)
|
||||
option(ENABLE_UPDATER "Enable automatic check for updates" on)
|
||||
@ -258,8 +259,13 @@ endif()
|
||||
include_directories(${FREETYPE_INCLUDE_DIRS})
|
||||
|
||||
# harfbuzz
|
||||
set(HARFBUZZ_LIBRARIES harfbuzz)
|
||||
set(HARFBUZZ_INCLUDE_DIRS ${HARFBUZZ_DIR}/src)
|
||||
if(USE_SHARED_HARFBUZZ)
|
||||
find_package(HarfBuzz)
|
||||
else()
|
||||
set(HARFBUZZ_LIBRARIES harfbuzz)
|
||||
set(HARFBUZZ_INCLUDE_DIRS ${HARFBUZZ_DIR}/src)
|
||||
endif()
|
||||
include_directories(${HARFBUZZ_INCLUDE_DIRS})
|
||||
|
||||
if(USE_SHARED_GIFLIB)
|
||||
find_package(GIF REQUIRED)
|
||||
|
72
cmake/FindHarfBuzz.cmake
Normal file
72
cmake/FindHarfBuzz.cmake
Normal file
@ -0,0 +1,72 @@
|
||||
# Copyright (c) 2012, Intel Corporation
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
# * Neither the name of Intel Corporation nor the names of its contributors may
|
||||
# be used to endorse or promote products derived from this software without
|
||||
# specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# Try to find Harfbuzz include and library directories.
|
||||
#
|
||||
# After successful discovery, this will set for inclusion where needed:
|
||||
# HARFBUZZ_INCLUDE_DIRS - containg the HarfBuzz headers
|
||||
# HARFBUZZ_LIBRARIES - containg the HarfBuzz library
|
||||
|
||||
include(FindPkgConfig)
|
||||
|
||||
pkg_check_modules(PC_HARFBUZZ harfbuzz>=0.9.7)
|
||||
|
||||
find_path(HARFBUZZ_INCLUDE_DIRS NAMES hb.h
|
||||
HINTS ${PC_HARFBUZZ_INCLUDE_DIRS} ${PC_HARFBUZZ_INCLUDEDIR}
|
||||
)
|
||||
|
||||
find_library(HARFBUZZ_LIBRARIES NAMES harfbuzz
|
||||
HINTS ${PC_HARFBUZZ_LIBRARY_DIRS} ${PC_HARFBUZZ_LIBDIR}
|
||||
)
|
||||
|
||||
# HarfBuzz 0.9.18 split ICU support into a separate harfbuzz-icu library.
|
||||
if ("${PC_HARFBUZZ_VERSION}" VERSION_GREATER "0.9.17")
|
||||
if (HarfBuzz_FIND_REQUIRED)
|
||||
set(_HARFBUZZ_REQUIRED REQUIRED)
|
||||
else ()
|
||||
set(_HARFBUZZ_REQUIRED "")
|
||||
endif ()
|
||||
pkg_check_modules(PC_HARFBUZZ_ICU harfbuzz-icu>=0.9.18 ${_HARFBUZZ_REQUIRED})
|
||||
find_library(HARFBUZZ_ICU_LIBRARIES NAMES harfbuzz-icu
|
||||
HINTS ${PC_HARFBUZZ_ICU_LIBRARY_DIRS} ${PC_HARFBUZZ_ICU_LIBDIR}
|
||||
)
|
||||
if (HARFBUZZ_ICU_LIBRARIES)
|
||||
list(APPEND HARFBUZZ_LIBRARIES "${HARFBUZZ_ICU_LIBRARIES}")
|
||||
endif ()
|
||||
set(_HARFBUZZ_EXTRA_REQUIRED_VAR "HARFBUZZ_ICU_LIBRARIES")
|
||||
else ()
|
||||
set(_HARFBUZZ_EXTRA_REQUIRED_VAR "")
|
||||
endif ()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(HarfBuzz DEFAULT_MSG HARFBUZZ_INCLUDE_DIRS
|
||||
HARFBUZZ_LIBRARIES ${_HARFBUZZ_EXTRA_REQUIRED_VAR})
|
||||
|
||||
mark_as_advanced(
|
||||
HARFBUZZ_ICU_LIBRARIES
|
||||
HARFBUZZ_INCLUDE_DIRS
|
||||
HARFBUZZ_LIBRARIES
|
||||
)
|
@ -27,7 +27,7 @@ Lib::~Lib()
|
||||
|
||||
FT_Face Lib::open(const std::string& filename)
|
||||
{
|
||||
FT_Stream stream = ft::open_stream(m_ft, filename);
|
||||
FT_Stream stream = ft::open_stream(filename);
|
||||
FT_Open_Args args;
|
||||
memset(&args, 0, sizeof(args));
|
||||
args.flags = FT_OPEN_STREAM;
|
||||
|
@ -8,9 +8,7 @@
|
||||
|
||||
#include "base/file_handle.h"
|
||||
|
||||
#include <freetype/internal/internal.h>
|
||||
#include <freetype/internal/ftstream.h>
|
||||
#include <freetype/internal/ftmemory.h>
|
||||
#include <ft2build.h>
|
||||
|
||||
#define STREAM_FILE(stream) ((FILE*)stream->descriptor.pointer)
|
||||
|
||||
@ -19,10 +17,7 @@ namespace ft {
|
||||
static void ft_stream_close(FT_Stream stream)
|
||||
{
|
||||
fclose(STREAM_FILE(stream));
|
||||
|
||||
stream->descriptor.pointer = nullptr;
|
||||
stream->size = 0;
|
||||
stream->base = nullptr;
|
||||
free(stream);
|
||||
}
|
||||
|
||||
static unsigned long ft_stream_io(FT_Stream stream,
|
||||
@ -40,29 +35,20 @@ static unsigned long ft_stream_io(FT_Stream stream,
|
||||
return (unsigned long)fread(buffer, 1, count, file);
|
||||
}
|
||||
|
||||
FT_Stream open_stream(FT_Library lib,
|
||||
const std::string& utf8Filename)
|
||||
FT_Stream open_stream(const std::string& utf8Filename)
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Memory memory = lib->memory;
|
||||
|
||||
FT_Stream stream = nullptr;
|
||||
if (FT_NEW(stream))
|
||||
stream = (FT_Stream)malloc(sizeof(*stream));
|
||||
memset(stream, 0, sizeof(*stream));
|
||||
if(stream == NULL)
|
||||
return nullptr;
|
||||
|
||||
stream->memory = lib->memory;
|
||||
stream->descriptor.pointer = nullptr;
|
||||
stream->pathname.pointer = nullptr;
|
||||
stream->base = nullptr;
|
||||
stream->pos = 0;
|
||||
stream->read = nullptr;
|
||||
stream->close = nullptr;
|
||||
|
||||
TRACE("FT: Loading font %s... ", utf8Filename.c_str());
|
||||
|
||||
FILE* file = base::open_file_raw(utf8Filename, "rb");
|
||||
if (!file) {
|
||||
FT_FREE(stream);
|
||||
free(stream);
|
||||
TRACE("FAIL\n");
|
||||
return nullptr;
|
||||
}
|
||||
@ -71,13 +57,15 @@ FT_Stream open_stream(FT_Library lib,
|
||||
stream->size = (unsigned long)ftell(file);
|
||||
if (!stream->size) {
|
||||
fclose(file);
|
||||
FT_FREE(stream);
|
||||
free(stream);
|
||||
TRACE("FAIL\n");
|
||||
return nullptr;
|
||||
}
|
||||
fseek(file, 0, SEEK_SET);
|
||||
|
||||
stream->descriptor.pointer = file;
|
||||
stream->base = nullptr;
|
||||
stream->pos = 0;
|
||||
stream->read = ft_stream_io;
|
||||
stream->close = ft_stream_close;
|
||||
|
||||
|
@ -14,8 +14,7 @@
|
||||
|
||||
namespace ft {
|
||||
|
||||
FT_Stream open_stream(FT_Library lib,
|
||||
const std::string& utf8Filename);
|
||||
FT_Stream open_stream(const std::string& utf8Filename);
|
||||
|
||||
} // namespace ft
|
||||
|
||||
|
5
third_party/CMakeLists.txt
vendored
5
third_party/CMakeLists.txt
vendored
@ -86,7 +86,10 @@ if(NOT USE_SHARED_FREETYPE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_subdirectory(harfbuzz-cmake)
|
||||
if(NOT USE_SHARED_HARFBUZZ)
|
||||
add_subdirectory(harfbuzz-cmake)
|
||||
endif()
|
||||
|
||||
add_subdirectory(simpleini)
|
||||
add_subdirectory(fmt)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user