Merge branch 'ft' of https://github.com/winterheart/aseprite into winterheart-ft

This commit is contained in:
David Capello 2017-12-20 15:09:17 -03:00
commit 7f9d1f64d8
6 changed files with 96 additions and 28 deletions

View File

@ -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
View 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
)

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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)