summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2016-11-16 21:14:00 +0200
committerTor Lillqvist <tml@collabora.com>2016-11-16 21:32:03 +0200
commit73302ce8b8cb1be588f2fb635b20faa792d5f4f8 (patch)
treed75c1a7a51b2aa0f1c450ff97908e70c5693dfa4
parent2a91304bddf3b1a7b788b120e6374cc1fb9ea045 (diff)
Exit GLyphy
Change-Id: Ib84e703d4c1528d022435c7695c97a3fc284563a
-rw-r--r--Makefile.fetch1
-rw-r--r--RepositoryExternal.mk38
-rw-r--r--config_host.mk.in3
-rw-r--r--configure.ac8
-rw-r--r--download.lst1
-rw-r--r--external/Module_external.mk1
-rw-r--r--external/glyphy/ExternalPackage_glyphy.mk22
-rw-r--r--external/glyphy/ExternalProject_glyphy.mk38
-rw-r--r--external/glyphy/Makefile7
-rw-r--r--external/glyphy/Module_glyphy.mk21
-rw-r--r--external/glyphy/README3
-rw-r--r--external/glyphy/UnpackedTarball_glyphy.mk21
-rw-r--r--external/glyphy/glyphy-upstream.patch.1211
-rw-r--r--external/glyphy/glyphy-windows.patch.1776
-rw-r--r--vcl/CppunitTest_vcl_wmf_test.mk6
-rw-r--r--vcl/Library_vcl.mk8
-rw-r--r--vcl/glyphy/demo.cxx19
-rw-r--r--vcl/glyphy/demo/demo-atlas.cc144
-rw-r--r--vcl/glyphy/demo/demo-buffer.cc191
-rw-r--r--vcl/glyphy/demo/demo-font.cc334
-rw-r--r--vcl/glyphy/demo/demo-shader.cc212
-rw-r--r--vcl/glyphy/demo/matrix4x4.c481
-rw-r--r--vcl/inc/glyphy/demo.hxx19
-rw-r--r--vcl/inc/glyphy/demo/demo-atlas-glsl.h18
-rw-r--r--vcl/inc/glyphy/demo/demo-atlas.h54
-rw-r--r--vcl/inc/glyphy/demo/demo-buffer.h64
-rw-r--r--vcl/inc/glyphy/demo/demo-common.h186
-rw-r--r--vcl/inc/glyphy/demo/demo-font.h88
-rw-r--r--vcl/inc/glyphy/demo/demo-fshader-glsl.h88
-rw-r--r--vcl/inc/glyphy/demo/demo-shader.h47
-rw-r--r--vcl/inc/glyphy/demo/demo-vshader-glsl.h24
-rw-r--r--vcl/inc/glyphy/demo/matrix4x4.h107
-rwxr-xr-xvcl/inc/win/winlayout.hxx12
-rw-r--r--vcl/win/gdi/winlayout.cxx311
34 files changed, 7 insertions, 3557 deletions
diff --git a/Makefile.fetch b/Makefile.fetch
index b91f3d6c2e5e..c552289c72a6 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -131,7 +131,6 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
$(call fetch_Optional,FREETYPE,FREETYPE_TARBALL) \
$(call fetch_Optional,GLEW,GLEW_TARBALL) \
$(call fetch_Optional,GLM,GLM_TARBALL) \
- $(call fetch_Optional,GLYPHY,GLYPHY_TARBALL) \
$(call fetch_Optional_pack,GOOGLE_DOCS_EXTENSION_PACK) \
$(call fetch_Optional,GRAPHITE,GRAPHITE_TARBALL) \
$(call fetch_Optional,HARFBUZZ,HARFBUZZ_TARBALL) \
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index b52927a10a6d..9650bf98253e 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -229,44 +229,6 @@ endef
endif # SYSTEM_GLEW
-ifneq ($(SYSTEM_GLYPHY),)
-
-define gb_LinkTarget__use_glyphy
-$(call gb_LinkTarget_set_include,$(1),\
- $$(INCLUDE) \
- $(GLYPHY_CFLAGS) \
-)
-$(call gb_LinkTarget_add_libs,$(1),$(GLYPHY_LIBS))
-
-endef
-else # !SYSTEM_GLYPHY
-
-$(eval $(call gb_Helper_optional,GLYPHY,$(call gb_Helper_register_packages_for_install,ooo,\
- glyphy \
-)))
-
-define gb_LinkTarget__use_glyphy
-$(call gb_LinkTarget_use_package,$(1),glyphy)
-
-$(call gb_LinkTarget_set_include,$(1),\
- -I$(call gb_UnpackedTarball_get_dir,glyphy/src) \
- $$(INCLUDE) \
-)
-
-ifeq ($(COM),MSC)
-$(call gb_LinkTarget_add_libs,$(1),\
- $(call gb_UnpackedTarball_get_dir,glyphy)/src/.libs/libglyphy.lib \
-)
-else
-$(call gb_LinkTarget_add_libs,$(1),\
- -L$(call gb_UnpackedTarball_get_dir,glyphy)/src/.libs -lglyphy \
-)
-endif
-
-endef
-
-endif # SYSTEM_GLYPHY
-
define gb_LinkTarget__use_iconv
$(call gb_LinkTarget_add_libs,$(1),-liconv)
diff --git a/config_host.mk.in b/config_host.mk.in
index 7eebae67d947..3d39dcddde94 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -204,8 +204,6 @@ export GIT_NEEDED_SUBMODULES=@GIT_NEEDED_SUBMODULES@
export GLEW_CFLAGS=$(gb_SPACE)@GLEW_CFLAGS@
export GLEW_LIBS=$(gb_SPACE)@GLEW_LIBS@
export GLM_CFLAGS=$(gb_SPACE)@GLM_CFLAGS@
-export GLYPHY_CFLAGS=$(gb_SPACE)@GLYPHY_CFLAGS@
-export GLYPHY_LIBS=$(gb_SPACE)@GLYPHY_LIBS@
export GNOMEVFS_CFLAGS=$(gb_SPACE)@GNOMEVFS_CFLAGS@
export GNOMEVFS_LIBS=$(gb_SPACE)@GNOMEVFS_LIBS@
export GNUTLS_CFLAGS=$(gb_SPACE)@GNUTLS_CFLAGS@
@@ -518,7 +516,6 @@ export SYSTEM_GENCCODE=@SYSTEM_GENCCODE@
export SYSTEM_GENCMN=@SYSTEM_GENCMN@
export SYSTEM_GLEW=@SYSTEM_GLEW@
export SYSTEM_GLM=@SYSTEM_GLM@
-export SYSTEM_GLYPHY=@SYSTEM_GLYPHY@
export SYSTEM_GRAPHITE=@SYSTEM_GRAPHITE@
export SYSTEM_HARFBUZZ=@SYSTEM_HARFBUZZ@
export SYSTEM_HSQLDB=@SYSTEM_HSQLDB@
diff --git a/configure.ac b/configure.ac
index a5ffd9984d7e..b1b277dff725 100644
--- a/configure.ac
+++ b/configure.ac
@@ -8949,14 +8949,6 @@ AS_IF([test "$with_system_glew" = "yes"],
[AC_DEFINE([HAVE_GLEW_1_12])])
dnl ===================================================================
-dnl Check for system glyphy
-dnl ===================================================================
-dnl We currently use GLyphy only on Windows
-if test $_os = WINNT; then
- libo_CHECK_SYSTEM_MODULE([glyphy], [GLYPHY], [glyphy >= 0.12.0], ["-I${WORKDIR}/UnpackedTarball/glyphy/src"])
-fi
-
-dnl ===================================================================
dnl Check for system odbc
dnl ===================================================================
AC_MSG_CHECKING([which odbc headers to use])
diff --git a/download.lst b/download.lst
index d3c887f6f72e..f114ba2671db 100644
--- a/download.lst
+++ b/download.lst
@@ -55,7 +55,6 @@ export FREEHAND_TARBALL := libfreehand-0.1.1.tar.bz2
export FREETYPE_TARBALL := dbf2caca1d3afd410a29217a9809d397-freetype-2.4.8.tar.bz2
export GLEW_TARBALL := 3941e9cab2f4f9d8faee3e8d57ae7664-glew-1.12.0.zip
export GLM_TARBALL := bae83fa5dc7f081768daace6e199adc3-glm-0.9.4.6-libreoffice.zip
-export GLYPHY_TARBALL := 5d303fb955beb9bf112267316ca9d021-glyphy-0.2.0.tar.bz2
export GRAPHITE_TARBALL := 3069842a88b8f40c6b83ad2850cda293-graphite2-minimal-1.3.9.tgz
export HARFBUZZ_MD5SUM := 5986e1bfcd983d1f6caa53ef64c4abc5
export HARFBUZZ_TARBALL := harfbuzz-1.3.2.tar.bz2
diff --git a/external/Module_external.mk b/external/Module_external.mk
index 2089546b6429..3b54b52ade88 100644
--- a/external/Module_external.mk
+++ b/external/Module_external.mk
@@ -46,7 +46,6 @@ $(eval $(call gb_Module_add_moduledirs,external,\
$(call gb_Helper_optional,FREETYPE,freetype) \
$(call gb_Helper_optional,GLEW,glew) \
$(call gb_Helper_optional,GLM,glm) \
- $(call gb_Helper_optional,GLYPHY,glyphy) \
$(call gb_Helper_optional,GRAPHITE,graphite) \
$(call gb_Helper_optional,HARFBUZZ,harfbuzz) \
$(call gb_Helper_optional,HSQLDB,hsqldb) \
diff --git a/external/glyphy/ExternalPackage_glyphy.mk b/external/glyphy/ExternalPackage_glyphy.mk
deleted file mode 100644
index b4a32fccc082..000000000000
--- a/external/glyphy/ExternalPackage_glyphy.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_ExternalPackage_ExternalPackage,glyphy,glyphy))
-
-$(eval $(call gb_ExternalPackage_use_external_project,glyphy,glyphy))
-
-ifeq ($(OS),MACOSX)
-$(eval $(call gb_ExternalPackage_add_file,glyphy,$(LIBO_LIB_FOLDER)/libglyphy.dylib,src/.libs/libglyphy.dylib))
-else ifeq ($(OS),WNT)
-# We build a static archive with MSVC, so nothing to add
-else ifeq ($(DISABLE_DYNLOADING),)
-$(eval $(call gb_ExternalPackage_add_file,glyphy,$(LIBO_LIB_FOLDER)/libglyphy.so.0,src/.libs/libglyphy.so.0.0.0))
-endif
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/glyphy/ExternalProject_glyphy.mk b/external/glyphy/ExternalProject_glyphy.mk
deleted file mode 100644
index 624318784d57..000000000000
--- a/external/glyphy/ExternalProject_glyphy.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_ExternalProject_ExternalProject,glyphy))
-
-$(eval $(call gb_ExternalProject_use_autoconf,glyphy,build))
-
-$(eval $(call gb_ExternalProject_register_targets,glyphy,\
- build \
-))
-
-$(eval $(call gb_ExternalProject_use_externals,glyphy, \
- glew \
-))
-
-$(call gb_ExternalProject_get_state_target,glyphy,build) :
- $(call gb_ExternalProject_run,build,\
- $(if $(filter MSC,$(COM)),CPPFLAGS=-D_USE_MATH_DEFINES) \
- MAKE=$(MAKE) ./configure \
- --with-pic \
- $(if $(DISABLE_DYNLOADING), \
- --enable-static --disable-shared \
- , \
- --enable-shared --disable-static \
- ) \
- $(if $(filter MACOSX,$(OS)),--prefix=/@.__________________________________________________OOO) \
- $(if $(CROSS_COMPILING),--build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM)) \
- && $(if $(verbose),V=1) \
- $(MAKE) \
- )
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/glyphy/Makefile b/external/glyphy/Makefile
deleted file mode 100644
index e4968cf85fb6..000000000000
--- a/external/glyphy/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-
-module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
-
-include $(module_directory)/../../solenv/gbuild/partial_build.mk
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/glyphy/Module_glyphy.mk b/external/glyphy/Module_glyphy.mk
deleted file mode 100644
index 6228bba24de7..000000000000
--- a/external/glyphy/Module_glyphy.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_Module_Module,glyphy))
-
-$(eval $(call gb_Module_add_targets,glyphy,\
- UnpackedTarball_glyphy \
-))
-
-$(eval $(call gb_Module_add_targets,glyphy,\
- ExternalPackage_glyphy \
- ExternalProject_glyphy \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/glyphy/README b/external/glyphy/README
deleted file mode 100644
index 7d6445c9dc0d..000000000000
--- a/external/glyphy/README
+++ /dev/null
@@ -1,3 +0,0 @@
-GLyphy is a text renderer that uses OpenGL
-
-https://github.com/behdad/glyphy
diff --git a/external/glyphy/UnpackedTarball_glyphy.mk b/external/glyphy/UnpackedTarball_glyphy.mk
deleted file mode 100644
index 08512b9a761f..000000000000
--- a/external/glyphy/UnpackedTarball_glyphy.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_UnpackedTarball_UnpackedTarball,glyphy))
-
-$(eval $(call gb_UnpackedTarball_set_tarball,glyphy,$(GLYPHY_TARBALL)))
-
-$(eval $(call gb_UnpackedTarball_set_patchlevel,glyphy,1))
-
-$(eval $(call gb_UnpackedTarball_add_patches,glyphy,\
- external/glyphy/glyphy-upstream.patch.1 \
- external/glyphy/glyphy-windows.patch.1 \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/external/glyphy/glyphy-upstream.patch.1 b/external/glyphy/glyphy-upstream.patch.1
deleted file mode 100644
index f898918f4c8f..000000000000
--- a/external/glyphy/glyphy-upstream.patch.1
+++ /dev/null
@@ -1,211 +0,0 @@
-From d6d6c61c8d0e336c34ba3f5d9adbe923ffa1cbe3 Mon Sep 17 00:00:00 2001
-From: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu, 6 Aug 2015 15:34:38 +0100
-Subject: [PATCH 2/6] Implement more robust winding-direction algorithm
-
-Fixes 'p' in Comic Sans Bold for example. That font has many
-self-intersecting contours. The one in 'p' was causing complete
-winding direction reversal using old algorithm. Implement area-based
-algorithm.
----
- src/glyphy-outline.cc | 67 ++++++++++-----------------------------------------
- 1 file changed, 13 insertions(+), 54 deletions(-)
-
-diff --git a/src/glyphy-outline.cc b/src/glyphy-outline.cc
-index 3543f3b..ef71247 100644
---- a/src/glyphy-outline.cc
-+++ b/src/glyphy-outline.cc
-@@ -55,65 +55,24 @@ winding (const glyphy_arc_endpoint_t *endpoints,
- /*
- * Algorithm:
- *
-- * - Find the lowest-x part of the contour,
-- * - If the point is an endpoint:
-- * o compare the angle of the incoming and outgoing edges of that point
-- * to find out whether it's CW or CCW,
-- * - Otherwise, compare the y of the two endpoints of the arc with lowest-x point.
-- *
-- * Note:
-- *
-- * We can use a simpler algorithm here: Act as if arcs are lines, then use the
-- * triangle method to calculate the signed area of the contour and get the sign.
-- * It should work for all cases we care about. The only case failing would be
-- * that of two endpoints and two arcs. But we can even special-case that.
-+ * - Approximate arcs with triangles passing through the mid- and end-points,
-+ * - Calculate the area of the contour,
-+ * - Return sign.
- */
-
-- unsigned int corner = 1;
-- for (unsigned int i = 2; i < num_endpoints; i++)
-- if (endpoints[i].p.x < endpoints[corner].p.x ||
-- (endpoints[i].p.x == endpoints[corner].p.x &&
-- endpoints[i].p.y < endpoints[corner].p.y))
-- corner = i;
--
-- double min_x = endpoints[corner].p.x;
-- int winner = -1;
-- Point p0 (0, 0);
-- for (unsigned int i = 0; i < num_endpoints; i++) {
-- const glyphy_arc_endpoint_t &endpoint = endpoints[i];
-- if (endpoint.d == GLYPHY_INFINITY || endpoint.d == 0 /* arcs only, not lines */) {
-- p0 = endpoint.p;
-- continue;
-- }
-- Arc arc (p0, endpoint.p, endpoint.d);
-- p0 = endpoint.p;
-+ double area = 0;
-+ for (unsigned int i = 1; i < num_endpoints; i++)
-+ {
-+ const glyphy_point_t &p0 = endpoints[i - 1].p;
-+ const glyphy_point_t &p1 = endpoints[i].p;
-+ double d = endpoints[i].d;
-
-- Point c = arc.center ();
-- double r = arc.radius ();
-- if (c.x - r < min_x && arc.wedge_contains_point (c - Vector (r, 0))) {
-- min_x = c.x - r;
-- winner = i;
-- }
-- }
-+ assert (d != GLYPHY_INFINITY);
-
-- if (winner == -1)
-- {
-- // Corner is lowest-x. Find the tangents of the two arcs connected to the
-- // corner and compare the tangent angles to get contour direction.
-- const glyphy_arc_endpoint_t ethis = endpoints[corner];
-- const glyphy_arc_endpoint_t eprev = endpoints[corner - 1];
-- const glyphy_arc_endpoint_t enext = endpoints[corner < num_endpoints - 1 ? corner + 1 : 1];
-- double in = (-Arc (eprev.p, ethis.p, ethis.d).tangents ().second).angle ();
-- double out = (+Arc (ethis.p, enext.p, enext.d).tangents ().first ).angle ();
-- return out > in;
-+ area += p0.x*p1.y - p0.y*p1.x;
-+ area -= .5 * d * ((p1.x-p0.x)*(p1.x-p0.x) + (p1.y-p0.y)*(p1.y-p0.y));
- }
-- else
-- {
-- // Easy.
-- return endpoints[winner].d < 0;
-- }
--
-- return false;
-+ return area < 0;
- }
-
-
---
-2.5.0
-
-From 644c5bab6e7f0e5af8f42fa7a8075372716c66d3 Mon Sep 17 00:00:00 2001
-From: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu, 6 Aug 2015 15:49:37 +0100
-Subject: [PATCH 3/6] Start handling fully-degenerate curves
-
----
- src/glyphy-arcs-bezier.hh | 7 +++++++
- src/glyphy-geometry.hh | 4 ++++
- 2 files changed, 11 insertions(+)
-
-diff --git a/src/glyphy-arcs-bezier.hh b/src/glyphy-arcs-bezier.hh
-index ab729cb..32b7c8c 100644
---- a/src/glyphy-arcs-bezier.hh
-+++ b/src/glyphy-arcs-bezier.hh
-@@ -103,6 +103,13 @@ class ArcsBezierApproximatorSpringSystem
- double *perror,
- unsigned int max_segments = 100)
- {
-+ /* Handle fully-degenerate cases. */
-+ Vector v1 (b.p1 - b.p0);
-+ Vector v2 (b.p2 - b.p0);
-+ Vector v3 (b.p3 - b.p0);
-+ if (fabs (v1.cross(v2)) < GLYPHY_EPSILON && fabs (v2.cross(v3)) < GLYPHY_EPSILON)
-+ ;//TODO
-+
- std::vector<double> t;
- std::vector<double> e;
- double max_e, min_e;
-diff --git a/src/glyphy-geometry.hh b/src/glyphy-geometry.hh
-index f5f6003..3c60856 100644
---- a/src/glyphy-geometry.hh
-+++ b/src/glyphy-geometry.hh
-@@ -99,6 +99,7 @@ struct Vector {
- inline const Vector normal (void) const; /* ortho().normalized() */
- inline double angle (void) const;
-
-+ inline double cross (const Vector &other) const;
- inline const Vector rebase (const Vector &bx, const Vector &by) const;
- inline const Vector rebase (const Vector &bx) const;
-
-@@ -345,6 +346,9 @@ inline double Vector::angle (void) const {
- return atan2 (dy, dx);
- }
-
-+inline double Vector::cross (const Vector &other) const {
-+ return dx * other.dy - dy * other.dx;
-+}
- inline const Vector Vector::rebase (const Vector &bx,
- const Vector &by) const {
- return Vector (*this * bx, *this * by);
---
-2.5.0
-
-From 5667ab11a3d5f57bb89c4e8970d26b940d36964a Mon Sep 17 00:00:00 2001
-From: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu, 6 Aug 2015 15:51:15 +0100
-Subject: [PATCH 4/6] Simplify winding()
-
----
- src/glyphy-outline.cc | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/glyphy-outline.cc b/src/glyphy-outline.cc
-index ef71247..7fded28 100644
---- a/src/glyphy-outline.cc
-+++ b/src/glyphy-outline.cc
-@@ -69,8 +69,8 @@ winding (const glyphy_arc_endpoint_t *endpoints,
-
- assert (d != GLYPHY_INFINITY);
-
-- area += p0.x*p1.y - p0.y*p1.x;
-- area -= .5 * d * ((p1.x-p0.x)*(p1.x-p0.x) + (p1.y-p0.y)*(p1.y-p0.y));
-+ area += Vector(p0).cross (Vector(p1));
-+ area -= .5 * d * (Point(p1) - Point(p0)).len2 ();
- }
- return area < 0;
- }
---
-2.5.0
-
-From 16fa0a713295a76f3075e6732007dca2dd38d11e Mon Sep 17 00:00:00 2001
-From: Behdad Esfahbod <behdad@behdad.org>
-Date: Thu, 6 Aug 2015 16:00:19 +0100
-Subject: [PATCH 5/6] Better handle fully-degenerate curves
-
----
- src/glyphy-arcs-bezier.hh | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/src/glyphy-arcs-bezier.hh b/src/glyphy-arcs-bezier.hh
-index 32b7c8c..ac210c0 100644
---- a/src/glyphy-arcs-bezier.hh
-+++ b/src/glyphy-arcs-bezier.hh
-@@ -108,7 +108,14 @@ class ArcsBezierApproximatorSpringSystem
- Vector v2 (b.p2 - b.p0);
- Vector v3 (b.p3 - b.p0);
- if (fabs (v1.cross(v2)) < GLYPHY_EPSILON && fabs (v2.cross(v3)) < GLYPHY_EPSILON)
-- ;//TODO
-+ {
-+ /* Curve has no area. If endpoints are NOT the same, replace with single
-+ * line segment. Otherwise fully skip. */
-+ arcs.clear ();
-+ if (b.p0 != b.p1)
-+ arcs.push_back (Arc (b.p0, b.p1, 0));
-+ return;
-+ }
-
- std::vector<double> t;
- std::vector<double> e;
---
-2.5.0
-
diff --git a/external/glyphy/glyphy-windows.patch.1 b/external/glyphy/glyphy-windows.patch.1
deleted file mode 100644
index 99f7bccc5c14..000000000000
--- a/external/glyphy/glyphy-windows.patch.1
+++ /dev/null
@@ -1,776 +0,0 @@
-From cfc3157868f691b70c2f0a6daa3c387ca6ef42a9 Mon Sep 17 00:00:00 2001
-From: Tor Lillqvist <tml@collabora.com>
-Date: Tue, 10 Nov 2015 00:20:42 +0200
-Subject: [PATCH 1/3] Port glyphy-demo to Windows
-
-You will need glew and freeglut to build and run it.
-
-I have a VS solution for glyphy-demo, but did not commit that as I did
-not bother to do it "properly", with different projects for the
-library and the demo executable, Release and Debug configurations etc.
----
- demo/demo-buffer.cc | 11 ++++
- demo/demo-common.h | 6 ++
- demo/demo-font.cc | 131 +++++++++++++++++++++++++++++++++++---------
- demo/demo-font.h | 21 ++++++-
- demo/demo-view.cc | 3 +-
- demo/glyphy-demo.cc | 134 ++++++++++++++++++++++++++++++++++++++++++++-
- src/Makefile.am | 1 +
- src/glyphy-windows.h | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++
- 8 files changed, 429 insertions(+), 30 deletions(-)
- create mode 100755 src/glyphy-windows.h
-
-diff --git a/demo/demo-buffer.cc b/demo/demo-buffer.cc
-index 698f4ee..8ce5b34 100644
---- a/demo/demo-buffer.cc
-+++ b/demo/demo-buffer.cc
-@@ -106,7 +106,11 @@ demo_buffer_add_text (demo_buffer_t *buffer,
- demo_font_t *font,
- double font_size)
- {
-+#ifndef _WIN32
- FT_Face face = demo_font_get_face (font);
-+#else
-+ HDC hdc = demo_font_get_face (font);
-+#endif
- glyphy_point_t top_left = buffer->cursor;
- buffer->cursor.y += font_size /* * font->ascent */;
- unsigned int unicode;
-@@ -138,7 +142,14 @@ demo_buffer_add_text (demo_buffer_t *buffer,
- continue;
- }
-
-+#ifndef _WIN32
- unsigned int glyph_index = FT_Get_Char_Index (face, unicode);
-+#else
-+ wchar_t wc = unicode; /* FIXME: What about non-BMP chars? */
-+ WORD glyph_index;
-+ if (GetGlyphIndicesW (hdc, &wc, 1, &glyph_index, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR)
-+ die ("GetGlyphIndicesW failed");
-+#endif
- glyph_info_t gi;
- demo_font_lookup_glyph (font, glyph_index, &gi);
-
-diff --git a/demo/demo-common.h b/demo/demo-common.h
-index dd0feb9..da56a88 100644
---- a/demo/demo-common.h
-+++ b/demo/demo-common.h
-@@ -44,6 +44,12 @@
- # define HAVE_GLUT 1
- #endif
-
-+#ifdef _WIN32
-+# define HAVE_GL 1
-+# define HAVE_GLEW 1
-+# define HAVE_GLUT 1
-+#endif
-+
- /* Get Glew out of the way. */
- #ifdef HAVE_GLEW
- # include <GL/glew.h>
-diff --git a/demo/demo-font.cc b/demo/demo-font.cc
-index 4ed4b53..b43b1e3 100644
---- a/demo/demo-font.cc
-+++ b/demo/demo-font.cc
-@@ -22,19 +22,30 @@
-
- #include "demo-font.h"
-
-+#ifndef _WIN32
- #include <glyphy-freetype.h>
-+#endif
-
--#include <ext/hash_map>
--
--using namespace __gnu_cxx; /* This is ridiculous */
-+#ifdef _WIN32
-+#include <glyphy-windows.h>
-+#endif
-
-+#include <map>
-+#include <vector>
-
--typedef hash_map<unsigned int, glyph_info_t> glyph_cache_t;
-+typedef std::map<unsigned int, glyph_info_t> glyph_cache_t;
-
- struct demo_font_t {
- unsigned int refcount;
-
-+#ifndef _WIN32
- FT_Face face;
-+#endif
-+
-+#ifdef _WIN32
-+ HDC face; /* A memory DC that has the font instance selected into it */
-+#endif
-+
- glyph_cache_t *glyph_cache;
- demo_atlas_t *atlas;
- glyphy_arc_accumulator_t *acc;
-@@ -48,7 +59,13 @@ struct demo_font_t {
- };
-
- demo_font_t *
--demo_font_create (FT_Face face,
-+demo_font_create (
-+#ifndef _WIN32
-+ FT_Face face,
-+#endif
-+#ifdef _WIN32
-+ HDC face,
-+#endif
- demo_atlas_t *atlas)
- {
- demo_font_t *font = (demo_font_t *) calloc (1, sizeof (demo_font_t));
-@@ -88,7 +105,12 @@ demo_font_destroy (demo_font_t *font)
- }
-
-
-+#ifndef _WIN32
- FT_Face
-+#endif
-+#ifdef _WIN32
-+HDC
-+#endif
- demo_font_get_face (demo_font_t *font)
- {
- return font->face;
-@@ -103,27 +125,28 @@ demo_font_get_atlas (demo_font_t *font)
-
- static glyphy_bool_t
- accumulate_endpoint (glyphy_arc_endpoint_t *endpoint,
-- vector<glyphy_arc_endpoint_t> *endpoints)
-+ std::vector<glyphy_arc_endpoint_t> *endpoints)
- {
- endpoints->push_back (*endpoint);
- return true;
- }
-
- static void
--encode_ft_glyph (demo_font_t *font,
-- unsigned int glyph_index,
-- double tolerance_per_em,
-- glyphy_rgba_t *buffer,
-- unsigned int buffer_len,
-- unsigned int *output_len,
-- unsigned int *nominal_width,
-- unsigned int *nominal_height,
-- glyphy_extents_t *extents,
-- double *advance)
-+encode_glyph (demo_font_t *font,
-+ unsigned int glyph_index,
-+ double tolerance_per_em,
-+ glyphy_rgba_t *buffer,
-+ unsigned int buffer_len,
-+ unsigned int *output_len,
-+ unsigned int *nominal_width,
-+ unsigned int *nominal_height,
-+ glyphy_extents_t *extents,
-+ double *advance)
- {
- /* Used for testing only */
- #define SCALE (1. * (1 << 0))
-
-+#ifndef _WIN32
- FT_Face face = font->face;
- if (FT_Err_Ok != FT_Load_Glyph (face,
- glyph_index,
-@@ -141,7 +164,7 @@ encode_ft_glyph (demo_font_t *font,
- unsigned int upem = face->units_per_EM;
- double tolerance = upem * tolerance_per_em; /* in font design units */
- double faraway = double (upem) / (MIN_FONT_SIZE * M_SQRT2);
-- vector<glyphy_arc_endpoint_t> endpoints;
-+ std::vector<glyphy_arc_endpoint_t> endpoints;
-
- glyphy_arc_accumulator_reset (font->acc);
- glyphy_arc_accumulator_set_tolerance (font->acc, tolerance);
-@@ -151,6 +174,55 @@ encode_ft_glyph (demo_font_t *font,
-
- if (FT_Err_Ok != glyphy_freetype(outline_decompose) (&face->glyph->outline, font->acc))
- die ("Failed converting glyph outline to arcs");
-+#endif
-+
-+#ifdef _WIN32
-+ HDC hdc = font->face;
-+
-+ GLYPHMETRICS glyph_metrics;
-+ MAT2 matrix;
-+
-+ matrix.eM11.value = 1;
-+ matrix.eM11.fract = 0;
-+ matrix.eM12.value = 0;
-+ matrix.eM12.fract = 0;
-+ matrix.eM21.value = 0;
-+ matrix.eM21.fract = 0;
-+ matrix.eM22.value = 1;
-+ matrix.eM22.fract = 0;
-+
-+ DWORD size = GetGlyphOutlineW (hdc, glyph_index, GGO_NATIVE|GGO_GLYPH_INDEX, &glyph_metrics, 0, NULL, &matrix);
-+ if (size == GDI_ERROR)
-+ die ("GetGlyphOutlineW failed");
-+ std::vector<char> buf(size);
-+ size = GetGlyphOutlineW (hdc, glyph_index, GGO_NATIVE|GGO_GLYPH_INDEX, &glyph_metrics, size, buf.data(), &matrix);
-+ if (size == GDI_ERROR)
-+ die ("GetGlyphOutlineW failed");
-+
-+ size = GetGlyphOutlineW (hdc, glyph_index, GGO_METRICS|GGO_GLYPH_INDEX, &glyph_metrics, 0, NULL, &matrix);
-+ if (size == GDI_ERROR)
-+ die ("GetGlyphOutlineW failed");
-+
-+ OUTLINETEXTMETRICW outline_text_metric;
-+ if (!GetOutlineTextMetricsW (hdc, sizeof (OUTLINETEXTMETRICW), &outline_text_metric))
-+ die ("GetOutlineTextMetricsW failed");
-+
-+ unsigned int upem = outline_text_metric.otmEMSquare;
-+ double tolerance = upem * tolerance_per_em; /* in font design units */
-+ double faraway = double (upem) / (MIN_FONT_SIZE * M_SQRT2);
-+ std::vector<glyphy_arc_endpoint_t> endpoints;
-+
-+ fprintf(stderr, "upem=%u tolerance=%f faraway=%f\n", upem, tolerance, faraway);
-+
-+ glyphy_arc_accumulator_reset (font->acc);
-+ glyphy_arc_accumulator_set_tolerance (font->acc, tolerance);
-+ glyphy_arc_accumulator_set_callback (font->acc,
-+ (glyphy_arc_endpoint_accumulator_callback_t) accumulate_endpoint,
-+ &endpoints);
-+
-+ if (0 != glyphy_windows(outline_decompose) ((TTPOLYGONHEADER *) buf.data(), buf.size(), font->acc))
-+ die ("Failed converting glyph outline to arcs");
-+#endif
-
- assert (glyphy_arc_accumulator_get_error (font->acc) <= tolerance);
-
-@@ -192,7 +264,14 @@ encode_ft_glyph (demo_font_t *font,
- glyphy_extents_scale (extents, 1. / upem, 1. / upem);
- glyphy_extents_scale (extents, SCALE, SCALE);
-
-+#ifndef _WIN32
- *advance = face->glyph->metrics.horiAdvance / (double) upem;
-+#endif
-+
-+#ifdef _WIN32
-+ *advance = glyph_metrics.gmCellIncX / (double) upem; /* ??? */
-+ fprintf(stderr, "======> Advance: %f\n", *advance);
-+#endif
-
- if (0)
- LOGI ("gid%3u: endpoints%3d; err%3g%%; tex fetch%4.1f; mem%4.1fkb\n",
-@@ -217,15 +296,15 @@ _demo_font_upload_glyph (demo_font_t *font,
- glyphy_rgba_t buffer[4096 * 16];
- unsigned int output_len;
-
-- encode_ft_glyph (font,
-- glyph_index,
-- TOLERANCE,
-- buffer, ARRAY_LEN (buffer),
-- &output_len,
-- &glyph_info->nominal_w,
-- &glyph_info->nominal_h,
-- &glyph_info->extents,
-- &glyph_info->advance);
-+ encode_glyph (font,
-+ glyph_index,
-+ TOLERANCE,
-+ buffer, ARRAY_LEN (buffer),
-+ &output_len,
-+ &glyph_info->nominal_w,
-+ &glyph_info->nominal_h,
-+ &glyph_info->extents,
-+ &glyph_info->advance);
-
- glyph_info->is_empty = glyphy_extents_is_empty (&glyph_info->extents);
- if (!glyph_info->is_empty)
-diff --git a/demo/demo-font.h b/demo/demo-font.h
-index ddc45ed..d4e75ff 100644
---- a/demo/demo-font.h
-+++ b/demo/demo-font.h
-@@ -22,9 +22,17 @@
- #include "demo-common.h"
- #include "demo-atlas.h"
-
-+#ifndef _WIN32
- #include <ft2build.h>
- #include FT_FREETYPE_H
-+#endif
-
-+#ifdef _WIN32
-+#include <windows.h>
-+#define DEFAULT_FONT "Calibri"
-+#undef near
-+#undef far
-+#endif
-
- typedef struct {
- glyphy_extents_t extents;
-@@ -40,7 +48,13 @@ typedef struct {
- typedef struct demo_font_t demo_font_t;
-
- demo_font_t *
--demo_font_create (FT_Face face,
-+demo_font_create (
-+#ifndef _WIN32
-+ FT_Face face,
-+#endif
-+#ifdef _WIN32
-+ HDC hdc,
-+#endif
- demo_atlas_t *atlas);
-
- demo_font_t *
-@@ -50,7 +64,12 @@ void
- demo_font_destroy (demo_font_t *font);
-
-
-+#ifndef _WIN32
- FT_Face
-+#endif
-+#ifdef _WIN32
-+HDC
-+#endif
- demo_font_get_face (demo_font_t *font);
-
- demo_atlas_t *
-diff --git a/demo/demo-view.cc b/demo/demo-view.cc
-index b60fc24..fee3e23 100644
---- a/demo/demo-view.cc
-+++ b/demo/demo-view.cc
-@@ -27,8 +27,9 @@ extern "C" {
- #include "matrix4x4.h"
- }
-
-+#ifndef _WIN32
- #include <sys/time.h>
--
-+#endif
-
- struct demo_view_t {
- unsigned int refcount;
-diff --git a/demo/glyphy-demo.cc b/demo/glyphy-demo.cc
-index cf412cc..bc71dff 100644
---- a/demo/glyphy-demo.cc
-+++ b/demo/glyphy-demo.cc
-@@ -20,14 +20,15 @@
- #include <config.h>
- #endif
-
-+#ifndef _WIN32
- #include <libgen.h>
-+#include <unistd.h>
-+#endif
- #include <stdio.h>
- #include <string.h>
--#include <unistd.h>
- #include <ctype.h>
- #include <stdlib.h>
-
--
- #include "demo-buffer.h"
- #include "demo-font.h"
- #include "demo-view.h"
-@@ -39,6 +40,90 @@ static demo_buffer_t *buffer;
- #define WINDOW_W 700
- #define WINDOW_H 700
-
-+#ifdef _WIN32
-+
-+static int isroot(const char *path)
-+{
-+ return ((strlen(path) == 1 && path[0] == '/') ||
-+ (strlen(path) == 3 && isalpha(path[0]) && path[1] == ':' && (path[2] == '/' || path[2] == '\\')));
-+}
-+
-+static char *basename(char *path)
-+{
-+ if (path == NULL || *path == '\0')
-+ return ".";
-+
-+ while ((path[strlen(path)-1] == '/' ||
-+ path[strlen(path)-1] == '\\') &&
-+ !isroot(path))
-+ path[strlen(path)-1] = '\0';
-+
-+ if (isroot(path))
-+ return path;
-+
-+ char *slash = strrchr(path, '/');
-+ char *backslash = strrchr(path, '\\');
-+
-+ if (slash != NULL && (backslash == NULL || backslash < slash))
-+ return slash + 1;
-+ else if (backslash != NULL && (slash == NULL || slash < backslash))
-+ return backslash + 1;
-+ else
-+ return path;
-+}
-+
-+static int opterr = 1;
-+static int optind = 1;
-+static int optopt;
-+static char *optarg;
-+
-+static int getopt(int argc, char *argv[], char *opts)
-+{
-+ static int sp = 1;
-+ int c;
-+ char *cp;
-+
-+ if (sp == 1) {
-+ if (optind >= argc ||
-+ argv[optind][0] != '-' || argv[optind][1] == '\0')
-+ return EOF;
-+ else if (!strcmp(argv[optind], "--")) {
-+ optind++;
-+ return EOF;
-+ }
-+ }
-+ optopt = c = argv[optind][sp];
-+ if (c == ':' || !(cp = strchr(opts, c))) {
-+ fprintf(stderr, ": illegal option -- %c\n", c);
-+ if (argv[optind][++sp] == '\0') {
-+ optind++;
-+ sp = 1;
-+ }
-+ return '?';
-+ }
-+ if (*++cp == ':') {
-+ if (argv[optind][sp+1] != '\0')
-+ optarg = &argv[optind++][sp+1];
-+ else if(++optind >= argc) {
-+ fprintf(stderr, ": option requires an argument -- %c\n", c);
-+ sp = 1;
-+ return '?';
-+ } else
-+ optarg = argv[optind++];
-+ sp = 1;
-+ } else {
-+ if (argv[optind][++sp] == '\0') {
-+ sp = 1;
-+ optind++;
-+ }
-+ optarg = NULL;
-+ }
-+
-+ return c;
-+}
-+
-+#endif
-+
- static void
- reshape_func (int width, int height)
- {
-@@ -161,6 +246,7 @@ main (int argc, char** argv)
- vu = demo_view_create (st);
- demo_view_print_help (vu);
-
-+#ifndef _WIN32
- FT_Library ft_library;
- FT_Init_FreeType (&ft_library);
- FT_Face ft_face;
-@@ -173,6 +259,42 @@ main (int argc, char** argv)
- if (!ft_face)
- die ("Failed to open font file");
- demo_font_t *font = demo_font_create (ft_face, demo_glstate_get_atlas (st));
-+#endif
-+
-+#ifdef _WIN32
-+ HDC hdc = CreateCompatibleDC (GetDC (NULL));
-+ if (hdc == NULL)
-+ die ("GetDC or CreateCompatibleDC failed");
-+
-+ /* First create an instance of the font at size 10 to get the OUTLINETEXTMETRIC from which to get
-+ * the font's em unit. Then, to get an unmodified not grid-fitted glyph outline, create it anew at
-+ * that size. That is as the doc for GetGlyphOutline() suggests.
-+ */
-+ HFONT hfont = CreateFontA(10, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_DONTCARE, font_path);
-+ if (hfont == NULL)
-+ die ("CreateFontA failed");
-+
-+ HFONT old_hfont = (HFONT) SelectObject (hdc, hfont);
-+ if (old_hfont == NULL)
-+ die ("SelectObject failed");
-+
-+ OUTLINETEXTMETRICW outline_text_metric;
-+ if (!GetOutlineTextMetricsW (hdc, sizeof (OUTLINETEXTMETRICW), &outline_text_metric))
-+ die ("GetOutlineTextMetricsW failed");
-+
-+ SelectObject (hdc, old_hfont);
-+
-+ hfont = CreateFontA (outline_text_metric.otmEMSquare, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FF_DONTCARE, font_path);
-+ if (hfont == NULL)
-+ die ("CreateFontA failed");
-+
-+ old_hfont = (HFONT) SelectObject (hdc, hfont);
-+ if (old_hfont == NULL)
-+ die ("SelectObject failed");
-+
-+ demo_font_t *font = demo_font_create (hdc, demo_glstate_get_atlas (st));
-+
-+#endif
-
- buffer = demo_buffer_create ();
- glyphy_point_t top_left = {0, 0};
-@@ -187,8 +309,16 @@ main (int argc, char** argv)
- demo_buffer_destroy (buffer);
- demo_font_destroy (font);
-
-+#ifndef _WIN32
- FT_Done_Face (ft_face);
- FT_Done_FreeType (ft_library);
-+#endif
-+
-+#ifdef _WIN32
-+ SelectObject (hdc, old_hfont);
-+ DeleteObject (hfont);
-+ DeleteDC (hdc);
-+#endif
-
- demo_view_destroy (vu);
- demo_glstate_destroy (st);
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 004afd3..ecb76e0 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -32,6 +32,7 @@ libglyphy_la_SOURCES = \
- PUBLICHEADERS = \
- glyphy.h \
- glyphy-freetype.h \
-+ glyphy-windows.h \
- $(NULL)
- SHADERS = \
- glyphy-common.glsl \
---- a/src/Makefile.in
-+++ b/src/Makefile.in
-@@ -32,6 +32,7 @@ libglyphy_la_SOURCES = \
- PUBLICHEADERS = \
- glyphy.h \
- glyphy-freetype.h \
-+ glyphy-windows.h \
- $(NULL)
-
- SHADERS = \
-diff --git a/src/glyphy-windows.h b/src/glyphy-windows.h
-new file mode 100755
-index 0000000..b3c11c8
---- /dev/null
-+++ b/src/glyphy-windows.h
-@@ -0,0 +1,152 @@
-+/*
-+ * Copyright 2012 Google, Inc. All Rights Reserved.
-+ *
-+ * Licensed under the Apache License, Version 2.0 (the "License");
-+ * you may not use this file except in compliance with the License.
-+ * You may obtain a copy of the License at
-+ *
-+ * http://www.apache.org/licenses/LICENSE-2.0
-+ *
-+ * Unless required by applicable law or agreed to in writing, software
-+ * distributed under the License is distributed on an "AS IS" BASIS,
-+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-+ * See the License for the specific language governing permissions and
-+ * limitations under the License.
-+ *
-+ * Google Author(s): Behdad Esfahbod, Maysum Panju
-+ */
-+
-+/* Intentionally doesn't have include guards */
-+
-+#include "glyphy.h"
-+
-+#include <windows.h>
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+
-+#ifndef GLYPHY_WINDOWS__PREFIX
-+#define GLYPHY_WINDOWS_PREFIX glyphy_windows_
-+#endif
-+
-+#ifndef glyphy_windows
-+#define glyphy_windows(name) GLYPHY_PASTE (GLYPHY_WINDOWS_PREFIX, name)
-+#endif
-+
-+static double fixed_to_double(FIXED f)
-+{
-+ return f.value + f.fract / double(0x10000);
-+}
-+
-+static int
-+glyphy_windows(move_to) (const POINTFX *to,
-+ glyphy_arc_accumulator_t *acc)
-+{
-+ glyphy_point_t p1 = {fixed_to_double(to->x), fixed_to_double(to->y)};
-+ glyphy_arc_accumulator_close_path (acc);
-+ glyphy_arc_accumulator_move_to (acc, &p1);
-+ return glyphy_arc_accumulator_successful (acc) ? 0 : -1;
-+}
-+
-+static int
-+glyphy_windows(line_to) (const POINTFX *to,
-+ glyphy_arc_accumulator_t *acc)
-+{
-+ glyphy_point_t p1 = {fixed_to_double(to->x), fixed_to_double(to->y)};
-+ glyphy_arc_accumulator_line_to (acc, &p1);
-+ return glyphy_arc_accumulator_successful (acc) ? 0 : -1;
-+}
-+
-+static int
-+glyphy_windows(conic_to) (const POINTFX *control,
-+ const glyphy_point_t *p2,
-+ glyphy_arc_accumulator_t *acc)
-+{
-+ glyphy_point_t p1 = {fixed_to_double(control->x), fixed_to_double(control->y)};
-+ glyphy_arc_accumulator_conic_to (acc, &p1, p2);
-+ return glyphy_arc_accumulator_successful (acc) ? 0 : -1;
-+}
-+
-+/* See https://support.microsoft.com/en-us/kb/87115 */
-+
-+static int
-+glyphy_windows(outline_decompose) (const TTPOLYGONHEADER *outline,
-+ size_t outline_size,
-+ glyphy_arc_accumulator_t *acc)
-+{
-+ const TTPOLYGONHEADER *polygon = outline;
-+ const TTPOLYGONHEADER *outline_end = (const TTPOLYGONHEADER*) ((char *)outline + outline_size);
-+
-+ int polygon_count = 0;
-+ while (polygon < outline_end)
-+ {
-+ if (((char *)polygon + polygon->cb) > (char *) outline_end)
-+ die ("TTPOLYGONHEADER record too large for enclosing data");
-+
-+ assert(polygon->dwType == TT_POLYGON_TYPE);
-+
-+ if (glyphy_windows(move_to) (&polygon->pfxStart, acc) == -1)
-+ return -1;
-+
-+ const TTPOLYCURVE *curve = (const TTPOLYCURVE*) (polygon + 1);
-+ const TTPOLYCURVE *curve_end = (const TTPOLYCURVE*) ((char *)polygon + polygon->cb);
-+ int curve_count = 0;
-+ while (curve < curve_end)
-+ {
-+ if (((char *) &curve->apfx[curve->cpfx]) > (char *) curve_end)
-+ die ("TTPOLYCURVE record too large for enclosing TTPOLYGONHEADER\n");
-+
-+ switch (curve->wType)
-+ {
-+ case TT_PRIM_LINE:
-+ {
-+ int i;
-+ for (i = 0; i < curve->cpfx; i++) {
-+ if (glyphy_windows(line_to) (&curve->apfx[i], acc) == -1)
-+ return -1;
-+ }
-+
-+ /* A final TT_PRIM_LINE in a contour automatically closes to the contour start */
-+ if ((const TTPOLYCURVE *) ((char *) &curve->apfx[curve->cpfx]) == curve_end)
-+ if (glyphy_windows(line_to) (&polygon->pfxStart, acc) == -1)
-+ return -1;
-+ }
-+ break;
-+ case TT_PRIM_QSPLINE:
-+ {
-+ int i = 0;
-+ while (i < curve->cpfx) {
-+ const POINTFX *control = &curve->apfx[i];
-+ i++;
-+ const POINTFX *p2 = &curve->apfx[i];
-+ glyphy_point_t p2pt = {fixed_to_double(p2->x), fixed_to_double(p2->y)};
-+ if (i == curve->cpfx - 1) {
-+ i++;
-+ } else {
-+ p2pt.x = (p2pt.x + fixed_to_double(control->x)) / 2;
-+ p2pt.y = (p2pt.y + fixed_to_double(control->y)) / 2;
-+ }
-+ if (glyphy_windows(conic_to) (control, &p2pt, acc) == -1)
-+ return -1;
-+ }
-+ /* If the last point of the contour was not the start point, draw a closing line to it */
-+ if ((const TTPOLYCURVE *) ((char *) &curve->apfx[curve->cpfx]) == curve_end)
-+ if (glyphy_windows(line_to) (&polygon->pfxStart, acc) == -1)
-+ return -1;
-+ }
-+ break;
-+ default:
-+ die ("Unexpected record in TTPOLYCURVE");
-+ }
-+ curve = (const TTPOLYCURVE *) ((char *) &curve->apfx[curve->cpfx]);
-+ }
-+ polygon = (const TTPOLYGONHEADER *) curve_end;
-+ }
-+ return 0;
-+}
-+
-+#ifdef __cplusplus
-+}
-+#endif
---
-2.4.3
-
-From 6d4196a2dc59324d14d3d4d721929e851277da97 Mon Sep 17 00:00:00 2001
-From: Tor Lillqvist <tml@collabora.com>
-Date: Tue, 10 Nov 2015 13:35:17 +0200
-Subject: [PATCH 2/3] Bin leftover printf
-
----
- demo/demo-font.cc | 3 ---
- 1 file changed, 3 deletions(-)
-
-diff --git a/demo/demo-font.cc b/demo/demo-font.cc
-index b43b1e3..c28778e 100644
---- a/demo/demo-font.cc
-+++ b/demo/demo-font.cc
-@@ -212,8 +212,6 @@ encode_glyph (demo_font_t *font,
- double faraway = double (upem) / (MIN_FONT_SIZE * M_SQRT2);
- std::vector<glyphy_arc_endpoint_t> endpoints;
-
-- fprintf(stderr, "upem=%u tolerance=%f faraway=%f\n", upem, tolerance, faraway);
--
- glyphy_arc_accumulator_reset (font->acc);
- glyphy_arc_accumulator_set_tolerance (font->acc, tolerance);
- glyphy_arc_accumulator_set_callback (font->acc,
-@@ -270,7 +268,6 @@ encode_glyph (demo_font_t *font,
-
- #ifdef _WIN32
- *advance = glyph_metrics.gmCellIncX / (double) upem; /* ??? */
-- fprintf(stderr, "======> Advance: %f\n", *advance);
- #endif
-
- if (0)
---
-2.4.3
-
-From 45ad6c9336e78b0fc5aeec4cd7d602333751a93f Mon Sep 17 00:00:00 2001
-From: Tor Lillqvist <tml@collabora.com>
-Date: Thu, 19 Nov 2015 15:31:04 +0200
-Subject: [PATCH] Bin two initialized but unused variables
-
----
- src/glyphy-windows.h | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/src/glyphy-windows.h b/src/glyphy-windows.h
-index b3c11c8..5912073 100644
---- a/src/glyphy-windows.h
-+++ b/src/glyphy-windows.h
-@@ -79,7 +79,6 @@ glyphy_windows(outline_decompose) (const TTPOLYGONHEADER *outline,
- const TTPOLYGONHEADER *polygon = outline;
- const TTPOLYGONHEADER *outline_end = (const TTPOLYGONHEADER*) ((char *)outline + outline_size);
-
-- int polygon_count = 0;
- while (polygon < outline_end)
- {
- if (((char *)polygon + polygon->cb) > (char *) outline_end)
-@@ -92,7 +91,6 @@ glyphy_windows(outline_decompose) (const TTPOLYGONHEADER *outline,
-
- const TTPOLYCURVE *curve = (const TTPOLYCURVE*) (polygon + 1);
- const TTPOLYCURVE *curve_end = (const TTPOLYCURVE*) ((char *)polygon + polygon->cb);
-- int curve_count = 0;
- while (curve < curve_end)
- {
- if (((char *) &curve->apfx[curve->cpfx]) > (char *) curve_end)
---
-2.5.0
-
diff --git a/vcl/CppunitTest_vcl_wmf_test.mk b/vcl/CppunitTest_vcl_wmf_test.mk
index 1de86d83fff5..369c79254aff 100644
--- a/vcl/CppunitTest_vcl_wmf_test.mk
+++ b/vcl/CppunitTest_vcl_wmf_test.mk
@@ -186,12 +186,6 @@ $(eval $(call gb_CppunitTest_use_system_win32_libs,vcl_wmf_test,\
#$(eval $(call gb_CppunitTest_add_nativeres,vcl_wmf_test,vcl/salsrc))
endif
-ifeq ($(OS), WNT)
-$(eval $(call gb_CppunitTest_use_externals,vcl_wmf_test,\
- glyphy \
-))
-endif
-
ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS)))
$(eval $(call gb_CppunitTest_add_libs,vcl_wmf_test,\
-lm $(DLOPEN_LIBS) \
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 8b158fb57178..b8cb25748d3f 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -41,7 +41,6 @@ $(eval $(call gb_Library_set_include,vcl,\
$$(INCLUDE) \
-I$(SRCDIR)/vcl/inc \
$(if $(filter WNTGCC,$(OS)$(COM)),-I$(MINGW_SYSROOT)/include/gdiplus) \
- $(if $(filter WNT,$(OS)),-I$(SRCDIR)/vcl/inc/glyphy/demo) \
))
$(eval $(call gb_Library_add_defs,vcl,\
@@ -699,7 +698,6 @@ endif
ifeq ($(OS),WNT)
$(eval $(call gb_Library_add_exception_objects,vcl,\
- vcl/glyphy/demo \
vcl/opengl/win/gdiimpl \
vcl/opengl/win/WinDeviceInfo \
vcl/opengl/win/blocklist_parser \
@@ -748,12 +746,6 @@ $(eval $(call gb_Library_use_system_win32_libs,vcl,\
$(eval $(call gb_Library_add_nativeres,vcl,vcl/salsrc))
endif
-ifeq ($(OS), WNT)
-$(eval $(call gb_Library_use_externals,vcl,\
- glyphy \
-))
-endif
-
ifeq ($(OS), $(filter LINUX %BSD SOLARIS, $(OS)))
$(eval $(call gb_Library_add_libs,vcl,\
-lm $(DLOPEN_LIBS) \
diff --git a/vcl/glyphy/demo.cxx b/vcl/glyphy/demo.cxx
deleted file mode 100644
index 746a6dcfe84c..000000000000
--- a/vcl/glyphy/demo.cxx
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <sal/config.h>
-
-#include <prewin.h>
-#include <postwin.h>
-
-#include "demo/demo-atlas.cc"
-#include "demo/demo-buffer.cc"
-#include "demo/demo-font.cc"
-#include "demo/demo-shader.cc"
-#include "demo/matrix4x4.c"
diff --git a/vcl/glyphy/demo/demo-atlas.cc b/vcl/glyphy/demo/demo-atlas.cc
deleted file mode 100644
index dbf8ec95fcda..000000000000
--- a/vcl/glyphy/demo/demo-atlas.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "demo-atlas.h"
-
-
-struct demo_atlas_t {
- unsigned int refcount;
-
- GLuint tex_unit;
- GLuint tex_name;
- GLuint tex_w;
- GLuint tex_h;
- GLuint item_w;
- GLuint item_h_q; /* height quantum */
- GLuint cursor_x;
- GLuint cursor_y;
-};
-
-
-demo_atlas_t *
-demo_atlas_create (unsigned int w,
- unsigned int h,
- unsigned int item_w,
- unsigned int item_h_quantum)
-{
- TRACE();
-
- demo_atlas_t *at = static_cast<demo_atlas_t *>(calloc (1, sizeof (demo_atlas_t)));
- at->refcount = 1;
-
- glGetIntegerv (GL_ACTIVE_TEXTURE, reinterpret_cast<GLint *>(&at->tex_unit));
- glGenTextures (1, &at->tex_name);
- at->tex_w = w;
- at->tex_h = h;
- at->item_w = item_w;
- at->item_h_q = item_h_quantum;
- at->cursor_x = 0;
- at->cursor_y = 0;
-
- demo_atlas_bind_texture (at);
-
- glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- gl(TexImage2D) (GL_TEXTURE_2D, 0, GL_RGBA, at->tex_w, at->tex_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
-
- return at;
-}
-
-demo_atlas_t *
-demo_atlas_reference (demo_atlas_t *at)
-{
- if (at) at->refcount++;
- return at;
-}
-
-void
-demo_atlas_destroy (demo_atlas_t *at)
-{
- if (!at || --at->refcount)
- return;
-
- glDeleteTextures (1, &at->tex_name);
- free (at);
-}
-
-void
-demo_atlas_bind_texture (demo_atlas_t *at)
-{
- glActiveTexture (at->tex_unit);
- glBindTexture (GL_TEXTURE_2D, at->tex_name);
-}
-
-void
-demo_atlas_set_uniforms (demo_atlas_t *at)
-{
- GLuint program;
- glGetIntegerv (GL_CURRENT_PROGRAM, reinterpret_cast<GLint *>(&program));
-
- glUniform4i (glGetUniformLocation (program, "u_atlas_info"),
- at->tex_w, at->tex_h, at->item_w, at->item_h_q);
- glUniform1i (glGetUniformLocation (program, "u_atlas_tex"), at->tex_unit - GL_TEXTURE0);
-}
-
-void
-demo_atlas_alloc (demo_atlas_t *at,
- glyphy_rgba_t *data,
- unsigned int len,
- unsigned int *px,
- unsigned int *py)
-{
- GLuint w, h, x = 0, y = 0;
-
- w = at->item_w;
- h = (len + w - 1) / w;
-
- if (at->cursor_y + h > at->tex_h) {
- /* Go to next column */
- at->cursor_x += at->item_w;
- at->cursor_y = 0;
- }
-
- if (at->cursor_x + w <= at->tex_w &&
- at->cursor_y + h <= at->tex_h)
- {
- x = at->cursor_x;
- y = at->cursor_y;
- at->cursor_y += (h + at->item_h_q - 1) & ~(at->item_h_q - 1);
- } else
- die ("Ran out of atlas memory");
-
- demo_atlas_bind_texture (at);
- if (w * h == len)
- gl(TexSubImage2D) (GL_TEXTURE_2D, 0, x, y, w, h, GL_RGBA, GL_UNSIGNED_BYTE, data);
- else {
- gl(TexSubImage2D) (GL_TEXTURE_2D, 0, x, y, w, h - 1, GL_RGBA, GL_UNSIGNED_BYTE, data);
- /* Upload the last row separately */
- gl(TexSubImage2D) (GL_TEXTURE_2D, 0, x, y + h - 1, len - (w * (h - 1)), 1, GL_RGBA, GL_UNSIGNED_BYTE,
- data + w * (h - 1));
- }
-
- *px = x / at->item_w;
- *py = y / at->item_h_q;
-}
diff --git a/vcl/glyphy/demo/demo-buffer.cc b/vcl/glyphy/demo/demo-buffer.cc
deleted file mode 100644
index 5101bee65552..000000000000
--- a/vcl/glyphy/demo/demo-buffer.cc
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "demo-buffer.h"
-
-struct demo_buffer_t {
- unsigned int refcount;
-
- glyphy_point_t cursor;
- std::vector<glyph_vertex_t> *vertices;
- glyphy_extents_t ink_extents;
- glyphy_extents_t logical_extents;
- bool dirty;
- GLuint buf_name;
-};
-
-demo_buffer_t *
-demo_buffer_create (void)
-{
- demo_buffer_t *buffer = static_cast<demo_buffer_t *>(calloc (1, sizeof (demo_buffer_t)));
- buffer->refcount = 1;
-
- buffer->vertices = new std::vector<glyph_vertex_t>;
- glGenBuffers (1, &buffer->buf_name);
-
- demo_buffer_clear (buffer);
-
- return buffer;
-}
-
-demo_buffer_t *
-demo_buffer_reference (demo_buffer_t *buffer)
-{
- if (buffer) buffer->refcount++;
- return buffer;
-}
-
-void
-demo_buffer_destroy (demo_buffer_t *buffer)
-{
- if (!buffer || --buffer->refcount)
- return;
-
- glDeleteBuffers (1, &buffer->buf_name);
- delete buffer->vertices;
- free (buffer);
-}
-
-
-void
-demo_buffer_clear (demo_buffer_t *buffer)
-{
- buffer->vertices->clear ();
- glyphy_extents_clear (&buffer->ink_extents);
- glyphy_extents_clear (&buffer->logical_extents);
- buffer->dirty = true;
-}
-
-void
-demo_buffer_extents (demo_buffer_t *buffer,
- glyphy_extents_t *ink_extents,
- glyphy_extents_t *logical_extents)
-{
- if (ink_extents)
- *ink_extents = buffer->ink_extents;
- if (logical_extents)
- *logical_extents = buffer->logical_extents;
-}
-
-void
-demo_buffer_move_to (demo_buffer_t *buffer,
- const glyphy_point_t *p)
-{
- buffer->cursor = *p;
-}
-
-void
-demo_buffer_current_point (demo_buffer_t *buffer,
- glyphy_point_t *p)
-{
- *p = buffer->cursor;
-}
-
-void
-demo_buffer_add_text (demo_buffer_t *buffer,
- const char *utf8,
- demo_font_t *font,
- double font_size)
-{
-#ifndef _WIN32
- FT_Face face = demo_font_get_face (font);
-#else
- HDC hdc = demo_font_get_face (font);
-#endif
- glyphy_point_t top_left = buffer->cursor;
- buffer->cursor.y += font_size /* * font->ascent */;
- unsigned int unicode;
- for (const unsigned char *p = reinterpret_cast<const unsigned char *>(utf8); *p; p++) {
- if (*p < 128) {
- unicode = *p;
- } else {
- unsigned int j;
- if (*p < 0xE0) {
- unicode = *p & ~0xE0;
- j = 1;
- } else if (*p < 0xF0) {
- unicode = *p & ~0xF0;
- j = 2;
- } else {
- unicode = *p & ~0xF8;
- j = 3;
- continue;
- }
- p++;
- for (; j && *p; j--, p++)
- unicode = (unicode << 6) | (*p & ~0xC0);
- p--;
- }
-
- if (unicode == '\n') {
- buffer->cursor.y += font_size;
- buffer->cursor.x = top_left.x;
- continue;
- }
-
-#ifndef _WIN32
- unsigned int glyph_index = FT_Get_Char_Index (face, unicode);
-#else
- wchar_t wc = unicode; /* FIXME: What about non-BMP chars? */
- WORD glyph_index;
- if (GetGlyphIndicesW (hdc, &wc, 1, &glyph_index, GGI_MARK_NONEXISTING_GLYPHS) == GDI_ERROR)
- die ("GetGlyphIndicesW failed");
-#endif
- glyph_info_t gi;
- demo_font_lookup_glyph (font, glyph_index, &gi);
-
- /* Update ink extents */
- glyphy_extents_t ink_extents;
- demo_shader_add_glyph_vertices (buffer->cursor, font_size, &gi, buffer->vertices, &ink_extents);
- glyphy_extents_extend (&buffer->ink_extents, &ink_extents);
-
- /* Update logical extents */
- glyphy_point_t corner;
- corner.x = buffer->cursor.x;
- corner.y = buffer->cursor.y - font_size;
- glyphy_extents_add (&buffer->logical_extents, &corner);
- corner.x = buffer->cursor.x + font_size * gi.advance;
- corner.y = buffer->cursor.y;
- glyphy_extents_add (&buffer->logical_extents, &corner);
-
- buffer->cursor.x += font_size * gi.advance;
- }
-
- buffer->dirty = true;
-}
-
-void
-demo_buffer_draw (demo_buffer_t *buffer)
-{
- GLint program;
- glGetIntegerv (GL_CURRENT_PROGRAM, &program);
- GLuint a_glyph_vertex_loc = glGetAttribLocation (program, "a_glyph_vertex");
- glBindBuffer (GL_ARRAY_BUFFER, buffer->buf_name);
- if (buffer->dirty) {
- glBufferData (GL_ARRAY_BUFFER, sizeof (glyph_vertex_t) * buffer->vertices->size (), &(*buffer->vertices)[0], GL_STATIC_DRAW);
- buffer->dirty = false;
- }
- glEnableVertexAttribArray (a_glyph_vertex_loc);
- glVertexAttribPointer (a_glyph_vertex_loc, 4, GL_FLOAT, GL_FALSE, sizeof (glyph_vertex_t), nullptr);
- glDrawArrays (GL_TRIANGLES, 0, buffer->vertices->size ());
- glDisableVertexAttribArray (a_glyph_vertex_loc);
-}
diff --git a/vcl/glyphy/demo/demo-font.cc b/vcl/glyphy/demo/demo-font.cc
deleted file mode 100644
index 2f03069d5447..000000000000
--- a/vcl/glyphy/demo/demo-font.cc
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "demo-font.h"
-
-#ifndef _WIN32
-#include <glyphy-freetype.h>
-#endif
-
-#ifdef _WIN32
-#include <glyphy-windows.h>
-#endif
-
-#include <map>
-#include <vector>
-
-typedef std::map<unsigned int, glyph_info_t> glyph_cache_t;
-
-struct demo_font_t {
- unsigned int refcount;
-
-#ifndef _WIN32
- FT_Face face;
-#endif
-
-#ifdef _WIN32
- HDC face; /* A memory DC that has the font instance selected into it */
-#endif
-
- glyph_cache_t *glyph_cache;
- demo_atlas_t *atlas;
- glyphy_arc_accumulator_t *acc;
-
- /* stats */
- unsigned int num_glyphs;
- double sum_error;
- unsigned int sum_endpoints;
- double sum_fetch;
- unsigned int sum_bytes;
-};
-
-demo_font_t *
-demo_font_create (
-#ifndef _WIN32
- FT_Face face,
-#endif
-#ifdef _WIN32
- HDC face,
-#endif
- demo_atlas_t *atlas)
-{
- demo_font_t *font = static_cast<demo_font_t *>(calloc (1, sizeof (demo_font_t)));
- font->refcount = 1;
-
- font->face = face;
- font->glyph_cache = new glyph_cache_t ();
- font->atlas = demo_atlas_reference (atlas);
- font->acc = glyphy_arc_accumulator_create ();
-
- font->num_glyphs = 0;
- font->sum_error = 0;
- font->sum_endpoints = 0;
- font->sum_fetch = 0;
- font->sum_bytes = 0;
-
- return font;
-}
-
-demo_font_t *
-demo_font_reference (demo_font_t *font)
-{
- if (font) font->refcount++;
- return font;
-}
-
-void
-demo_font_destroy (demo_font_t *font)
-{
- if (!font || --font->refcount)
- return;
-
- glyphy_arc_accumulator_destroy (font->acc);
- demo_atlas_destroy (font->atlas);
- delete font->glyph_cache;
- free (font);
-}
-
-
-#ifndef _WIN32
-FT_Face
-#endif
-#ifdef _WIN32
-HDC
-#endif
-demo_font_get_face (demo_font_t *font)
-{
- return font->face;
-}
-
-demo_atlas_t *
-demo_font_get_atlas (demo_font_t *font)
-{
- return font->atlas;
-}
-
-
-static glyphy_bool_t
-accumulate_endpoint (glyphy_arc_endpoint_t *endpoint,
- std::vector<glyphy_arc_endpoint_t> *endpoints)
-{
- endpoints->push_back (*endpoint);
- return true;
-}
-
-static void
-encode_glyph (demo_font_t *font,
- unsigned int glyph_index,
- double tolerance_per_em,
- glyphy_rgba_t *buffer,
- unsigned int buffer_len,
- unsigned int *output_len,
- unsigned int *nominal_width,
- unsigned int *nominal_height,
- glyphy_extents_t *extents,
- double *advance)
-{
-/* Used for testing only */
-#define SCALE (1. * (1 << 0))
-
-#ifndef _WIN32
- FT_Face face = font->face;
- if (FT_Err_Ok != FT_Load_Glyph (face,
- glyph_index,
- FT_LOAD_NO_BITMAP |
- FT_LOAD_NO_HINTING |
- FT_LOAD_NO_AUTOHINT |
- FT_LOAD_NO_SCALE |
- FT_LOAD_LINEAR_DESIGN |
- FT_LOAD_IGNORE_TRANSFORM))
- die ("Failed loading FreeType glyph");
-
- if (face->glyph->format != FT_GLYPH_FORMAT_OUTLINE)
- die ("FreeType loaded glyph format is not outline");
-
- unsigned int upem = face->units_per_EM;
- double tolerance = upem * tolerance_per_em; /* in font design units */
- double faraway = double (upem) / (MIN_FONT_SIZE * M_SQRT2);
- std::vector<glyphy_arc_endpoint_t> endpoints;
-
- glyphy_arc_accumulator_reset (font->acc);
- glyphy_arc_accumulator_set_tolerance (font->acc, tolerance);
- glyphy_arc_accumulator_set_callback (font->acc,
- (glyphy_arc_endpoint_accumulator_callback_t) accumulate_endpoint,
- &endpoints);
-
- if (FT_Err_Ok != glyphy_freetype(outline_decompose) (&face->glyph->outline, font->acc))
- die ("Failed converting glyph outline to arcs");
-#endif
-
-#ifdef _WIN32
- HDC hdc = font->face;
-
- GLYPHMETRICS glyph_metrics;
- MAT2 matrix;
-
- matrix.eM11.value = 1;
- matrix.eM11.fract = 0;
- matrix.eM12.value = 0;
- matrix.eM12.fract = 0;
- matrix.eM21.value = 0;
- matrix.eM21.fract = 0;
- matrix.eM22.value = 1;
- matrix.eM22.fract = 0;
-
- DWORD size = GetGlyphOutlineW (hdc, glyph_index, GGO_NATIVE|GGO_GLYPH_INDEX, &glyph_metrics, 0, nullptr, &matrix);
- if (size == GDI_ERROR)
- die ("GetGlyphOutlineW failed");
- std::vector<char> buf(size);
- size = GetGlyphOutlineW (hdc, glyph_index, GGO_NATIVE|GGO_GLYPH_INDEX, &glyph_metrics, size, buf.data(), &matrix);
- if (size == GDI_ERROR)
- die ("GetGlyphOutlineW failed");
-
- size = GetGlyphOutlineW (hdc, glyph_index, GGO_METRICS|GGO_GLYPH_INDEX, &glyph_metrics, 0, nullptr, &matrix);
- if (size == GDI_ERROR)
- die ("GetGlyphOutlineW failed");
-
- OUTLINETEXTMETRICW outline_text_metric;
- if (!GetOutlineTextMetricsW (hdc, sizeof (OUTLINETEXTMETRICW), &outline_text_metric))
- die ("GetOutlineTextMetricsW failed");
-
- unsigned int upem = outline_text_metric.otmEMSquare;
- double tolerance = upem * tolerance_per_em; /* in font design units */
- double faraway = double (upem) / (MIN_FONT_SIZE * M_SQRT2);
- std::vector<glyphy_arc_endpoint_t> endpoints;
-
- glyphy_arc_accumulator_reset (font->acc);
- glyphy_arc_accumulator_set_tolerance (font->acc, tolerance);
- glyphy_arc_accumulator_set_callback (font->acc,
- reinterpret_cast<glyphy_arc_endpoint_accumulator_callback_t>(accumulate_endpoint),
- &endpoints);
-
- if (0 != glyphy_windows(outline_decompose) (reinterpret_cast<TTPOLYGONHEADER *>(buf.data()), buf.size(), font->acc))
- die ("Failed converting glyph outline to arcs");
-#endif
-
- assert (glyphy_arc_accumulator_get_error (font->acc) <= tolerance);
-
- if (endpoints.size ())
- {
-#if 0
- /* Technically speaking, we want the following code,
- * however, crappy fonts have crappy flags. So we just
- * fixup unconditionally... */
- if (face->glyph->outline.flags & FT_OUTLINE_EVEN_ODD_FILL)
- glyphy_outline_winding_from_even_odd (&endpoints[0], endpoints.size (), false);
- else if (face->glyph->outline.flags & FT_OUTLINE_REVERSE_FILL)
- glyphy_outline_reverse (&endpoints[0], endpoints.size ());
-#else
- glyphy_outline_winding_from_even_odd (&endpoints[0], endpoints.size (), false);
-#endif
- }
-
- if (SCALE != 1.)
- for (std::vector<glyphy_arc_endpoint_t>::size_type i = 0; i < endpoints.size (); i++)
- {
- endpoints[i].p.x /= SCALE;
- endpoints[i].p.y /= SCALE;
- }
-
- double avg_fetch_achieved;
- if (!glyphy_arc_list_encode_blob (endpoints.size () ? &endpoints[0] : nullptr, endpoints.size (),
- buffer,
- buffer_len,
- faraway / SCALE,
- 4, /* UNUSED */
- &avg_fetch_achieved,
- output_len,
- nominal_width,
- nominal_height,
- extents))
- die ("Failed encoding arcs");
-
- glyphy_extents_scale (extents, 1. / upem, 1. / upem);
- glyphy_extents_scale (extents, SCALE, SCALE);
-
-#ifndef _WIN32
- *advance = face->glyph->metrics.horiAdvance / (double) upem;
-#endif
-
-#ifdef _WIN32
- *advance = glyph_metrics.gmCellIncX / (double) upem; /* ??? */
-#endif
-
- if (false)
- LOGI ("gid%3u: endpoints%3d; err%3g%%; tex fetch%4.1f; mem%4.1fkb\n",
- glyph_index,
- (unsigned int) glyphy_arc_accumulator_get_num_endpoints (font->acc),
- round (100 * glyphy_arc_accumulator_get_error (font->acc) / tolerance),
- avg_fetch_achieved,
- (*output_len * sizeof (glyphy_rgba_t)) / 1024.);
-
- font->num_glyphs++;
- font->sum_error += glyphy_arc_accumulator_get_error (font->acc) / tolerance;
- font->sum_endpoints += glyphy_arc_accumulator_get_num_endpoints (font->acc);
- font->sum_fetch += avg_fetch_achieved;
- font->sum_bytes += (*output_len * sizeof (glyphy_rgba_t));
-}
-
-static void
-demo_font_upload_glyph (demo_font_t *font,
- unsigned int glyph_index,
- glyph_info_t *glyph_info)
-{
- glyphy_rgba_t buffer[4096 * 16];
- unsigned int output_len;
-
- encode_glyph (font,
- glyph_index,
- TOLERANCE,
- buffer, ARRAY_LEN (buffer),
- &output_len,
- &glyph_info->nominal_w,
- &glyph_info->nominal_h,
- &glyph_info->extents,
- &glyph_info->advance);
-
- glyph_info->is_empty = glyphy_extents_is_empty (&glyph_info->extents);
- if (!glyph_info->is_empty)
- demo_atlas_alloc (font->atlas, buffer, output_len,
- &glyph_info->atlas_x, &glyph_info->atlas_y);
-}
-
-void
-demo_font_lookup_glyph (demo_font_t *font,
- unsigned int glyph_index,
- glyph_info_t *glyph_info)
-{
- if (font->glyph_cache->find (glyph_index) == font->glyph_cache->end ()) {
- demo_font_upload_glyph (font, glyph_index, glyph_info);
- (*font->glyph_cache)[glyph_index] = *glyph_info;
- } else
- *glyph_info = (*font->glyph_cache)[glyph_index];
-}
-
-void
-demo_font_print_stats (demo_font_t *font)
-{
- (void) font;
- LOGI ("%3d glyphs; avg num endpoints%6.2f; avg error%5.1f%%; avg tex fetch%5.2f; avg %5.2fkb per glyph\n",
- font->num_glyphs,
- (double) font->sum_endpoints / font->num_glyphs,
- 100. * font->sum_error / font->num_glyphs,
- font->sum_fetch / font->num_glyphs,
- font->sum_bytes / 1024. / font->num_glyphs);
-}
diff --git a/vcl/glyphy/demo/demo-shader.cc b/vcl/glyphy/demo/demo-shader.cc
deleted file mode 100644
index 395068d22db4..000000000000
--- a/vcl/glyphy/demo/demo-shader.cc
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "demo-shader.h"
-
-#include "demo-atlas-glsl.h"
-#include "demo-vshader-glsl.h"
-#include "demo-fshader-glsl.h"
-
-
-static unsigned int
-glyph_encode (unsigned int atlas_x , /* 7 bits */
- unsigned int atlas_y, /* 7 bits */
- unsigned int corner_x, /* 1 bit */
- unsigned int corner_y, /* 1 bit */
- unsigned int nominal_w, /* 6 bits */
- unsigned int nominal_h /* 6 bits */)
-{
- assert (0 == (atlas_x & ~0x7F));
- assert (0 == (atlas_y & ~0x7F));
- assert (0 == (corner_x & ~1));
- assert (0 == (corner_y & ~1));
- assert (0 == (nominal_w & ~0x3F));
- assert (0 == (nominal_h & ~0x3F));
-
- unsigned int x = (((atlas_x << 6) | nominal_w) << 1) | corner_x;
- unsigned int y = (((atlas_y << 6) | nominal_h) << 1) | corner_y;
-
- return (x << 16) | y;
-}
-
-static void
-glyph_vertex_encode (double x, double y,
- unsigned int corner_x, unsigned int corner_y,
- const glyph_info_t *gi,
- glyph_vertex_t *v)
-{
- unsigned int encoded = glyph_encode (gi->atlas_x, gi->atlas_y,
- corner_x, corner_y,
- gi->nominal_w, gi->nominal_h);
- v->x = x;
- v->y = y;
- v->g16hi = encoded >> 16;
- v->g16lo = encoded & 0xFFFF;
-}
-
-void
-demo_shader_add_glyph_vertices (const glyphy_point_t &p,
- double font_size,
- glyph_info_t *gi,
- std::vector<glyph_vertex_t> *vertices,
- glyphy_extents_t *extents)
-{
- if (gi->is_empty)
- return;
-
- glyph_vertex_t v[4];
-
-#define ENCODE_CORNER(_cx, _cy) \
- do { \
- double _vx = p.x + font_size * ((1-_cx) * gi->extents.min_x + _cx * gi->extents.max_x); \
- double _vy = p.y - font_size * ((1-_cy) * gi->extents.min_y + _cy * gi->extents.max_y); \
- glyph_vertex_encode (_vx, _vy, _cx, _cy, gi, &v[_cx * 2 + _cy]); \
- } while (false)
- ENCODE_CORNER (0, 0);
- ENCODE_CORNER (0, 1);
- ENCODE_CORNER (1, 0);
- ENCODE_CORNER (1, 1);
-#undef ENCODE_CORNER
-
- vertices->push_back (v[0]);
- vertices->push_back (v[1]);
- vertices->push_back (v[2]);
-
- vertices->push_back (v[1]);
- vertices->push_back (v[2]);
- vertices->push_back (v[3]);
-
- if (extents) {
- glyphy_extents_clear (extents);
- for (unsigned int i = 0; i < 4; i++) {
- glyphy_point_t p2 = {v[i].x, v[i].y};
- glyphy_extents_add (extents, &p2);
- }
- }
-}
-
-
-
-
-static GLuint
-compile_shader (GLenum type,
- GLsizei count,
- const GLchar** sources)
-{
- TRACE();
-
- GLuint shader;
- GLint compiled;
-
- if (!(shader = glCreateShader (type)))
- return shader;
-
- glShaderSource (shader, count, sources, nullptr);
- glCompileShader (shader);
-
- glGetShaderiv (shader, GL_COMPILE_STATUS, &compiled);
- if (!compiled) {
- GLint info_len = 0;
- LOGW ("%s shader failed to compile\n",
- type == GL_VERTEX_SHADER ? "Vertex" : "Fragment");
- glGetShaderiv (shader, GL_INFO_LOG_LENGTH, &info_len);
-
- if (info_len > 0) {
- char *info_log = static_cast<char*>(malloc (info_len));
- glGetShaderInfoLog (shader, info_len, nullptr, info_log);
-
- LOGW ("%s\n", info_log);
- free (info_log);
- }
-
- abort ();
- }
-
- return shader;
-}
-
-static GLuint
-link_program (GLuint vshader,
- GLuint fshader)
-{
- TRACE();
-
- GLuint program;
- GLint linked;
-
- program = glCreateProgram ();
- glAttachShader (program, vshader);
- glAttachShader (program, fshader);
- glLinkProgram (program);
- glDeleteShader (vshader);
- glDeleteShader (fshader);
-
- glGetProgramiv (program, GL_LINK_STATUS, &linked);
- if (!linked) {
- GLint info_len = 0;
- LOGW ("Program failed to link\n");
- glGetProgramiv (program, GL_INFO_LOG_LENGTH, &info_len);
-
- if (info_len > 0) {
- char *info_log = static_cast<char*>(malloc (info_len));
- glGetProgramInfoLog (program, info_len, nullptr, info_log);
-
- LOGW ("%s\n", info_log);
- free (info_log);
- }
-
- abort ();
- }
-
- return program;
-}
-
-#ifdef GL_ES_VERSION_2_0
-# define GLSL_HEADER_STRING \
- "#extension GL_OES_standard_derivatives : enable\n" \
- "precision highp float;\n" \
- "precision highp int;\n"
-#else
-# define GLSL_HEADER_STRING \
- "#version 110\n"
-#endif
-
-GLuint
-demo_shader_create_program (void)
-{
- TRACE();
-
- GLuint vshader, fshader, program;
- const GLchar *vshader_sources[] = {GLSL_HEADER_STRING,
- demo_vshader_glsl};
- vshader = compile_shader (GL_VERTEX_SHADER, ARRAY_LEN (vshader_sources), vshader_sources);
- const GLchar *fshader_sources[] = {GLSL_HEADER_STRING,
- demo_atlas_glsl,
- glyphy_common_shader_source (),
- "#define GLYPHY_SDF_PSEUDO_DISTANCE 1\n",
- glyphy_sdf_shader_source (),
- demo_fshader_glsl};
- fshader = compile_shader (GL_FRAGMENT_SHADER, ARRAY_LEN (fshader_sources), fshader_sources);
-
- program = link_program (vshader, fshader);
- return program;
-}
diff --git a/vcl/glyphy/demo/matrix4x4.c b/vcl/glyphy/demo/matrix4x4.c
deleted file mode 100644
index f103589e6593..000000000000
--- a/vcl/glyphy/demo/matrix4x4.c
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright (c) 2009, Mozilla Corp
- * Copyright (c) 2012, Google, Inc.
- * All rights reserved.
- *
- * 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 the <organization> 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 <copyright holder> ''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 <copyright holder> 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.
- */
-
-/*
- * Based on sample code from the OpenGL(R) ES 2.0 Programming Guide, which carriers
- * the following header:
- *
- * Book: OpenGL(R) ES 2.0 Programming Guide
- * Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
- * ISBN-10: 0321502795
- * ISBN-13: 9780321502797
- * Publisher: Addison-Wesley Professional
- * URLs: http://safari.informit.com/9780321563835
- * http://www.opengles-book.com
- */
-
-/*
- * Ported from JavaScript to C by Behdad Esfahbod, 2012.
- * Added MultMatrix. Converting from fixed-function OpenGL matrix
- * operations to these functions should be as simple as renaming the
- * 'gl' prefix to 'm4' and adding the matrix argument to the call.
- *
- * The C version lives at http://code.google.com/p/matrix4x4-c/
- */
-
-#include "matrix4x4.h"
-#include <math.h>
-
-/*
- * A simple 4x4 matrix utility implementation
- */
-
-
-float *
-m4LoadIdentity (float *mat) {
- unsigned int i;
- for (i = 0; i < 16; i++)
- mat[i] = 0;
- mat[0*4+0] = 1.0;
- mat[1*4+1] = 1.0;
- mat[2*4+2] = 1.0;
- mat[3*4+3] = 1.0;
- return mat;
-}
-
-/* Copies other matrix into mat */
-float *
-m4Copy (float *mat, const float *other) {
- unsigned int i;
- for (i = 0; i < 16; i++) {
- mat[i] = other[i];
- }
- return mat;
-}
-
-float *
-m4Multiply (float *mat, const float *right) {
- float tmp[16];
- unsigned int i;
-
- for (i = 0; i < 4; i++) {
- tmp[i*4+0] =
- (mat[i*4+0] * right[0*4+0]) +
- (mat[i*4+1] * right[1*4+0]) +
- (mat[i*4+2] * right[2*4+0]) +
- (mat[i*4+3] * right[3*4+0]) ;
-
- tmp[i*4+1] =
- (mat[i*4+0] * right[0*4+1]) +
- (mat[i*4+1] * right[1*4+1]) +
- (mat[i*4+2] * right[2*4+1]) +
- (mat[i*4+3] * right[3*4+1]) ;
-
- tmp[i*4+2] =
- (mat[i*4+0] * right[0*4+2]) +
- (mat[i*4+1] * right[1*4+2]) +
- (mat[i*4+2] * right[2*4+2]) +
- (mat[i*4+3] * right[3*4+2]) ;
-
- tmp[i*4+3] =
- (mat[i*4+0] * right[0*4+3]) +
- (mat[i*4+1] * right[1*4+3]) +
- (mat[i*4+2] * right[2*4+3]) +
- (mat[i*4+3] * right[3*4+3]) ;
- }
-
- return m4Copy (mat, tmp);
-}
-
-float
-m4Get (float *mat, unsigned int row, unsigned int col) {
- return mat[4*row+col];
-}
-
-float *
-m4MultMatrix (float *mat, const float *left) {
- float tmp[16];
- return m4Copy (mat, m4Multiply (m4Copy (tmp, left), mat));
-}
-
-float *
-m4Scale (float *mat, float sx, float sy, float sz) {
- mat[0*4+0] *= sx;
- mat[0*4+1] *= sx;
- mat[0*4+2] *= sx;
- mat[0*4+3] *= sx;
-
- mat[1*4+0] *= sy;
- mat[1*4+1] *= sy;
- mat[1*4+2] *= sy;
- mat[1*4+3] *= sy;
-
- mat[2*4+0] *= sz;
- mat[2*4+1] *= sz;
- mat[2*4+2] *= sz;
- mat[2*4+3] *= sz;
-
- return mat;
-}
-
-float *
-m4Translate (float *mat, float tx, float ty, float tz) {
- mat[3*4+0] += mat[0*4+0] * tx + mat[1*4+0] * ty + mat[2*4+0] * tz;
- mat[3*4+1] += mat[0*4+1] * tx + mat[1*4+1] * ty + mat[2*4+1] * tz;
- mat[3*4+2] += mat[0*4+2] * tx + mat[1*4+2] * ty + mat[2*4+2] * tz;
- mat[3*4+3] += mat[0*4+3] * tx + mat[1*4+3] * ty + mat[2*4+3] * tz;
-
- return mat;
-}
-
-float *
-m4Rotate (float *mat, float angle, float x, float y, float z) {
- float mag = sqrt(x*x + y*y + z*z);
- float sinAngle = sin(angle * M_PI / 180.0);
- float cosAngle = cos(angle * M_PI / 180.0);
-
- float xx, yy, zz, xy, yz, zx, xs, ys, zs;
- float oneMinusCos;
-
- float rotMat[16];
-
- if (mag <= 0)
- return mat;
-
- m4LoadIdentity (rotMat);
-
- x /= mag;
- y /= mag;
- z /= mag;
-
- xx = x * x;
- yy = y * y;
- zz = z * z;
- xy = x * y;
- yz = y * z;
- zx = z * x;
- xs = x * sinAngle;
- ys = y * sinAngle;
- zs = z * sinAngle;
- oneMinusCos = 1.0 - cosAngle;
-
- rotMat[0*4+0] = (oneMinusCos * xx) + cosAngle;
- rotMat[0*4+1] = (oneMinusCos * xy) - zs;
- rotMat[0*4+2] = (oneMinusCos * zx) + ys;
- rotMat[0*4+3] = 0.0;
-
- rotMat[1*4+0] = (oneMinusCos * xy) + zs;
- rotMat[1*4+1] = (oneMinusCos * yy) + cosAngle;
- rotMat[1*4+2] = (oneMinusCos * yz) - xs;
- rotMat[1*4+3] = 0.0;
-
- rotMat[2*4+0] = (oneMinusCos * zx) - ys;
- rotMat[2*4+1] = (oneMinusCos * yz) + xs;
- rotMat[2*4+2] = (oneMinusCos * zz) + cosAngle;
- rotMat[2*4+3] = 0.0;
-
- rotMat[3*4+0] = 0.0;
- rotMat[3*4+1] = 0.0;
- rotMat[3*4+2] = 0.0;
- rotMat[3*4+3] = 1.0;
-
- return m4Copy (mat, m4Multiply (rotMat, mat));
-}
-
-float *
-m4Frustum (float *mat, float left, float right, float bottom, float top, float nearZ, float farZ) {
- float deltaX = right - left;
- float deltaY = top - bottom;
- float deltaZ = farZ - nearZ;
-
- float frust[16];
-
- if ( (nearZ <= 0.0) || (farZ <= 0.0) ||
- (deltaX <= 0.0) || (deltaY <= 0.0) || (deltaZ <= 0.0) )
- return mat;
-
- m4LoadIdentity (frust);
-
- frust[0*4+0] = 2.0 * nearZ / deltaX;
- frust[0*4+1] = frust[0*4+2] = frust[0*4+3] = 0.0;
-
- frust[1*4+1] = 2.0 * nearZ / deltaY;
- frust[1*4+0] = frust[1*4+2] = frust[1*4+3] = 0.0;
-
- frust[2*4+0] = (right + left) / deltaX;
- frust[2*4+1] = (top + bottom) / deltaY;
- frust[2*4+2] = -(nearZ + farZ) / deltaZ;
- frust[2*4+3] = -1.0;
-
- frust[3*4+2] = -2.0 * nearZ * farZ / deltaZ;
- frust[3*4+0] = frust[3*4+1] = frust[3*4+3] = 0.0;
-
- return m4Copy (mat, m4Multiply (frust, mat));
-}
-
-float *
-m4Perspective (float *mat, float fovy, float aspect, float nearZ, float farZ) {
- float frustumH = tan(fovy / 360.0 * M_PI) * nearZ;
- float frustumW = frustumH * aspect;
-
- return m4Frustum(mat, -frustumW, frustumW, -frustumH, frustumH, nearZ, farZ);
-}
-
-float *
-m4Ortho (float *mat, float left, float right, float bottom, float top, float nearZ, float farZ) {
- float deltaX = right - left;
- float deltaY = top - bottom;
- float deltaZ = farZ - nearZ;
-
- float ortho[16];
-
- if ( (deltaX == 0.0) || (deltaY == 0.0) || (deltaZ == 0.0) )
- return mat;
-
- m4LoadIdentity (ortho);
-
- ortho[0*4+0] = 2.0 / deltaX;
- ortho[3*4+0] = -(right + left) / deltaX;
- ortho[1*4+1] = 2.0 / deltaY;
- ortho[3*4+1] = -(top + bottom) / deltaY;
- ortho[2*4+2] = -2.0 / deltaZ;
- ortho[3*4+2] = -(nearZ + farZ) / deltaZ;
-
- return m4Copy (mat, m4Multiply (ortho, mat));
-}
-
-/* In-place inversion */
-float *
-m4Invert (float *mat) {
- float tmp_0 = m4Get(mat,2,2) * m4Get(mat,3,3);
- float tmp_1 = m4Get(mat,3,2) * m4Get(mat,2,3);
- float tmp_2 = m4Get(mat,1,2) * m4Get(mat,3,3);
- float tmp_3 = m4Get(mat,3,2) * m4Get(mat,1,3);
- float tmp_4 = m4Get(mat,1,2) * m4Get(mat,2,3);
- float tmp_5 = m4Get(mat,2,2) * m4Get(mat,1,3);
- float tmp_6 = m4Get(mat,0,2) * m4Get(mat,3,3);
- float tmp_7 = m4Get(mat,3,2) * m4Get(mat,0,3);
- float tmp_8 = m4Get(mat,0,2) * m4Get(mat,2,3);
- float tmp_9 = m4Get(mat,2,2) * m4Get(mat,0,3);
- float tmp_10 = m4Get(mat,0,2) * m4Get(mat,1,3);
- float tmp_11 = m4Get(mat,1,2) * m4Get(mat,0,3);
- float tmp_12 = m4Get(mat,2,0) * m4Get(mat,3,1);
- float tmp_13 = m4Get(mat,3,0) * m4Get(mat,2,1);
- float tmp_14 = m4Get(mat,1,0) * m4Get(mat,3,1);
- float tmp_15 = m4Get(mat,3,0) * m4Get(mat,1,1);
- float tmp_16 = m4Get(mat,1,0) * m4Get(mat,2,1);
- float tmp_17 = m4Get(mat,2,0) * m4Get(mat,1,1);
- float tmp_18 = m4Get(mat,0,0) * m4Get(mat,3,1);
- float tmp_19 = m4Get(mat,3,0) * m4Get(mat,0,1);
- float tmp_20 = m4Get(mat,0,0) * m4Get(mat,2,1);
- float tmp_21 = m4Get(mat,2,0) * m4Get(mat,0,1);
- float tmp_22 = m4Get(mat,0,0) * m4Get(mat,1,1);
- float tmp_23 = m4Get(mat,1,0) * m4Get(mat,0,1);
-
- float t0 = ((tmp_0 * m4Get(mat,1,1) + tmp_3 * m4Get(mat,2,1) + tmp_4 * m4Get(mat,3,1)) -
- (tmp_1 * m4Get(mat,1,1) + tmp_2 * m4Get(mat,2,1) + tmp_5 * m4Get(mat,3,1)));
- float t1 = ((tmp_1 * m4Get(mat,0,1) + tmp_6 * m4Get(mat,2,1) + tmp_9 * m4Get(mat,3,1)) -
- (tmp_0 * m4Get(mat,0,1) + tmp_7 * m4Get(mat,2,1) + tmp_8 * m4Get(mat,3,1)));
- float t2 = ((tmp_2 * m4Get(mat,0,1) + tmp_7 * m4Get(mat,1,1) + tmp_10 * m4Get(mat,3,1)) -
- (tmp_3 * m4Get(mat,0,1) + tmp_6 * m4Get(mat,1,1) + tmp_11 * m4Get(mat,3,1)));
- float t3 = ((tmp_5 * m4Get(mat,0,1) + tmp_8 * m4Get(mat,1,1) + tmp_11 * m4Get(mat,2,1)) -
- (tmp_4 * m4Get(mat,0,1) + tmp_9 * m4Get(mat,1,1) + tmp_10 * m4Get(mat,2,1)));
-
- float d = 1.0 / (m4Get(mat,0,0) * t0 + m4Get(mat,1,0) * t1 + m4Get(mat,2,0) * t2 + m4Get(mat,3,0) * t3);
-
- float out_00 = d * t0;
- float out_01 = d * t1;
- float out_02 = d * t2;
- float out_03 = d * t3;
-
- float out_10 = d * ((tmp_1 * m4Get(mat,1,0) + tmp_2 * m4Get(mat,2,0) + tmp_5 * m4Get(mat,3,0)) -
- (tmp_0 * m4Get(mat,1,0) + tmp_3 * m4Get(mat,2,0) + tmp_4 * m4Get(mat,3,0)));
- float out_11 = d * ((tmp_0 * m4Get(mat,0,0) + tmp_7 * m4Get(mat,2,0) + tmp_8 * m4Get(mat,3,0)) -
- (tmp_1 * m4Get(mat,0,0) + tmp_6 * m4Get(mat,2,0) + tmp_9 * m4Get(mat,3,0)));
- float out_12 = d * ((tmp_3 * m4Get(mat,0,0) + tmp_6 * m4Get(mat,1,0) + tmp_11 * m4Get(mat,3,0)) -
- (tmp_2 * m4Get(mat,0,0) + tmp_7 * m4Get(mat,1,0) + tmp_10 * m4Get(mat,3,0)));
- float out_13 = d * ((tmp_4 * m4Get(mat,0,0) + tmp_9 * m4Get(mat,1,0) + tmp_10 * m4Get(mat,2,0)) -
- (tmp_5 * m4Get(mat,0,0) + tmp_8 * m4Get(mat,1,0) + tmp_11 * m4Get(mat,2,0)));
-
- float out_20 = d * ((tmp_12 * m4Get(mat,1,3) + tmp_15 * m4Get(mat,2,3) + tmp_16 * m4Get(mat,3,3)) -
- (tmp_13 * m4Get(mat,1,3) + tmp_14 * m4Get(mat,2,3) + tmp_17 * m4Get(mat,3,3)));
- float out_21 = d * ((tmp_13 * m4Get(mat,0,3) + tmp_18 * m4Get(mat,2,3) + tmp_21 * m4Get(mat,3,3)) -
- (tmp_12 * m4Get(mat,0,3) + tmp_19 * m4Get(mat,2,3) + tmp_20 * m4Get(mat,3,3)));
- float out_22 = d * ((tmp_14 * m4Get(mat,0,3) + tmp_19 * m4Get(mat,1,3) + tmp_22 * m4Get(mat,3,3)) -
- (tmp_15 * m4Get(mat,0,3) + tmp_18 * m4Get(mat,1,3) + tmp_23 * m4Get(mat,3,3)));
- float out_23 = d * ((tmp_17 * m4Get(mat,0,3) + tmp_20 * m4Get(mat,1,3) + tmp_23 * m4Get(mat,2,3)) -
- (tmp_16 * m4Get(mat,0,3) + tmp_21 * m4Get(mat,1,3) + tmp_22 * m4Get(mat,2,3)));
-
- float out_30 = d * ((tmp_14 * m4Get(mat,2,2) + tmp_17 * m4Get(mat,3,2) + tmp_13 * m4Get(mat,1,2)) -
- (tmp_16 * m4Get(mat,3,2) + tmp_12 * m4Get(mat,1,2) + tmp_15 * m4Get(mat,2,2)));
- float out_31 = d * ((tmp_20 * m4Get(mat,3,2) + tmp_12 * m4Get(mat,0,2) + tmp_19 * m4Get(mat,2,2)) -
- (tmp_18 * m4Get(mat,2,2) + tmp_21 * m4Get(mat,3,2) + tmp_13 * m4Get(mat,0,2)));
- float out_32 = d * ((tmp_18 * m4Get(mat,1,2) + tmp_23 * m4Get(mat,3,2) + tmp_15 * m4Get(mat,0,2)) -
- (tmp_22 * m4Get(mat,3,2) + tmp_14 * m4Get(mat,0,2) + tmp_19 * m4Get(mat,1,2)));
- float out_33 = d * ((tmp_22 * m4Get(mat,2,2) + tmp_16 * m4Get(mat,0,2) + tmp_21 * m4Get(mat,1,2)) -
- (tmp_20 * m4Get(mat,1,2) + tmp_23 * m4Get(mat,2,2) + tmp_17 * m4Get(mat,0,2)));
-
- mat[0*4+0] = out_00;
- mat[0*4+1] = out_01;
- mat[0*4+2] = out_02;
- mat[0*4+3] = out_03;
- mat[1*4+0] = out_10;
- mat[1*4+1] = out_11;
- mat[1*4+2] = out_12;
- mat[1*4+3] = out_13;
- mat[2*4+0] = out_20;
- mat[2*4+1] = out_21;
- mat[2*4+2] = out_22;
- mat[2*4+3] = out_23;
- mat[3*4+0] = out_30;
- mat[3*4+1] = out_31;
- mat[3*4+2] = out_32;
- mat[3*4+3] = out_33;
- return mat;
-}
-
-/* Puts the inverse of other matrix into mat */
-float *
-m4Inverse (float *mat, const float *other) {
- m4Copy (mat, other);
- m4Invert (mat);
- return mat;
-}
-
-/* In-place transpose */
-float *
-m4Transpose (float *mat) {
- float tmp = mat[0*4+1];
- mat[0*4+1] = mat[1*4+0];
- mat[1*4+0] = tmp;
-
- tmp = mat[0*4+2];
- mat[0*4+2] = mat[2*4+0];
- mat[2*4+0] = tmp;
-
- tmp = mat[0*4+3];
- mat[0*4+3] = mat[3*4+0];
- mat[3*4+0] = tmp;
-
- tmp = mat[1*4+2];
- mat[1*4+2] = mat[2*4+1];
- mat[2*4+1] = tmp;
-
- tmp = mat[1*4+3];
- mat[1*4+3] = mat[3*4+1];
- mat[3*4+1] = tmp;
-
- tmp = mat[2*4+3];
- mat[2*4+3] = mat[3*4+2];
- mat[3*4+2] = tmp;
-
- return mat;
-}
-
-float *
-m4ApplyToVect (float *mat, float *vec)
-{
- float tmp[4] = {vec[0], vec[1], vec[2], vec[3]};
-
- vec[0] = mat[0]*tmp[0] + mat[4]*tmp[1] + mat[8]*tmp[2] + mat[12]*tmp[3];
- vec[1] = mat[1]*tmp[0] + mat[5]*tmp[1] + mat[9]*tmp[2] + mat[13]*tmp[3];
- vec[2] = mat[2]*tmp[0] + mat[6]*tmp[1] + mat[10]*tmp[2] + mat[14]*tmp[3];
- vec[3] = mat[3]*tmp[0] + mat[7]*tmp[1] + mat[11]*tmp[2] + mat[15]*tmp[3];
-
- return vec;
-}
-
-#ifdef TEST
-
-#include <stdio.h>
-
-static void setvec (float *vec, float x, float y, float z, float w)
-{
- vec[0] = x;
- vec[1] = y;
- vec[2] = z;
- vec[3] = w;
-}
-
-static void printmat (float *mat)
-{
- printf("(%f,%f,%f,%f,\n", mat[0], mat[1], mat[2], mat[3]);
- printf(" %f,%f,%f,%f,\n", mat[4], mat[5], mat[6], mat[7]);
- printf(" %f,%f,%f,%f,\n", mat[8], mat[9], mat[10], mat[11]);
- printf(" %f,%f,%f,%f)\n", mat[12], mat[13], mat[14], mat[15]);
-}
-
-static void printvec (float *vec)
-{
- printf("(%f,%f,%f,%f)\n", vec[0], vec[1], vec[2], vec[3]);
-}
-
-int main(int argc, char **argv)
-{
- float mat[16];
- float vec[4];
-
- setvec (vec, 1, 2, 3, 1);
- printf ("vec:\n");
- printvec (vec);
-
- m4LoadIdentity (mat);
- printf ("Identity matrix:\n");
- printmat (mat);
-
- m4Scale (mat, 2, 2, 2);
- printf ("Scale by 2:\n");
- printmat (mat);
-
- m4LoadIdentity (mat);
- m4Translate (mat, 2, 3, 0);
- printf ("Translate by (2,3,0):\n");
- printmat (mat);
-
- printf ("Apply that to vec:\n");
- m4ApplyToVect (mat, vec);
- printvec (vec);
-
- m4LoadIdentity (mat);
- m4Scale (mat, 2, 2, 2);
- m4ApplyToVect (mat, vec);
- printf ("Scale then by 2:\n");
- printvec (vec);
-
- setvec (vec, 1, 2, 3, 1);
- m4LoadIdentity (mat);
- m4Scale (mat, 2, 2, 2);
- m4Translate (mat, 2, 3, 0);
- m4ApplyToVect (mat, vec);
- printf ("Both in one step:\n");
- printvec (vec);
-
- return 0;
-}
-
-#endif
diff --git a/vcl/inc/glyphy/demo.hxx b/vcl/inc/glyphy/demo.hxx
deleted file mode 100644
index ef716b969c56..000000000000
--- a/vcl/inc/glyphy/demo.hxx
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_VCL_INC_GLYPHY_DEMO_HXX
-#define INCLUDED_VCL_INC_GLYPHY_DEMO_HXX
-
-#include "demo-atlas.h"
-#include "demo-buffer.h"
-#include "demo-font.h"
-#include "demo-shader.h"
-#include "matrix4x4.h"
-
-#endif // INCLUDED_VCL_INC_GLYPHY_DEMO_HXX
diff --git a/vcl/inc/glyphy/demo/demo-atlas-glsl.h b/vcl/inc/glyphy/demo/demo-atlas-glsl.h
deleted file mode 100644
index 9b93c2ab129f..000000000000
--- a/vcl/inc/glyphy/demo/demo-atlas-glsl.h
+++ /dev/null
@@ -1,18 +0,0 @@
-static const char *demo_atlas_glsl =
-"uniform sampler2D u_atlas_tex;\n"
-"uniform ivec4 u_atlas_info;\n"
-"\n"
-"#define GLYPHY_TEXTURE1D_EXTRA_DECLS , sampler2D _tex, ivec4 _atlas_info, ivec2 _atlas_pos\n"
-"#define GLYPHY_TEXTURE1D_EXTRA_ARGS , _tex, _atlas_info, _atlas_pos\n"
-"#define GLYPHY_DEMO_EXTRA_ARGS , u_atlas_tex, u_atlas_info, gi.atlas_pos\n"
-"\n"
-"vec4\n"
-"glyphy_texture1D_func (int offset GLYPHY_TEXTURE1D_EXTRA_DECLS)\n"
-"{\n"
-" ivec2 item_geom = _atlas_info.zw;\n"
-" vec2 pos = (vec2 (_atlas_pos.xy * item_geom +\n"
-" ivec2 (mod (float (offset), float (item_geom.x)), offset / item_geom.x)) +\n"
-" + vec2 (.5, .5)) / vec2(_atlas_info.xy);\n"
-" return texture2D (_tex, pos);\n"
-"}\n"
-;
diff --git a/vcl/inc/glyphy/demo/demo-atlas.h b/vcl/inc/glyphy/demo/demo-atlas.h
deleted file mode 100644
index 729403f472fa..000000000000
--- a/vcl/inc/glyphy/demo/demo-atlas.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod, Maysum Panju
- */
-
-#ifndef DEMO_ATLAS_H
-#define DEMO_ATLAS_H
-
-#include "demo-common.h"
-
-
-typedef struct demo_atlas_t demo_atlas_t;
-
-demo_atlas_t *
-demo_atlas_create (unsigned int w,
- unsigned int h,
- unsigned int item_w,
- unsigned int item_h_quantum);
-
-demo_atlas_t *
-demo_atlas_reference (demo_atlas_t *at);
-
-void
-demo_atlas_destroy (demo_atlas_t *at);
-
-
-void
-demo_atlas_alloc (demo_atlas_t *at,
- glyphy_rgba_t *data,
- unsigned int len,
- unsigned int *px,
- unsigned int *py);
-
-void
-demo_atlas_bind_texture (demo_atlas_t *at);
-
-void
-demo_atlas_set_uniforms (demo_atlas_t *at);
-
-
-#endif /* DEMO_ATLAS_H */
diff --git a/vcl/inc/glyphy/demo/demo-buffer.h b/vcl/inc/glyphy/demo/demo-buffer.h
deleted file mode 100644
index 2948a7ff0a04..000000000000
--- a/vcl/inc/glyphy/demo/demo-buffer.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef DEMO_BUFFER_H
-#define DEMO_BUFFER_H
-
-#include "demo-common.h"
-#include "demo-font.h"
-#include "demo-shader.h"
-
-typedef struct demo_buffer_t demo_buffer_t;
-
-demo_buffer_t *
-demo_buffer_create (void);
-
-demo_buffer_t *
-demo_buffer_reference (demo_buffer_t *buffer);
-
-void
-demo_buffer_destroy (demo_buffer_t *buffer);
-
-
-void
-demo_buffer_clear (demo_buffer_t *buffer);
-
-void
-demo_buffer_extents (demo_buffer_t *buffer,
- glyphy_extents_t *ink_extents,
- glyphy_extents_t *logical_extents);
-
-void
-demo_buffer_move_to (demo_buffer_t *buffer,
- const glyphy_point_t *p);
-
-void
-demo_buffer_current_point (demo_buffer_t *buffer,
- glyphy_point_t *p);
-
-void
-demo_buffer_add_text (demo_buffer_t *buffer,
- const char *utf8,
- demo_font_t *font,
- double font_size);
-
-void
-demo_buffer_draw (demo_buffer_t *buffer);
-
-
-#endif /* DEMO_BUFFER_H */
diff --git a/vcl/inc/glyphy/demo/demo-common.h b/vcl/inc/glyphy/demo/demo-common.h
deleted file mode 100644
index 1c070f23d945..000000000000
--- a/vcl/inc/glyphy/demo/demo-common.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod, Maysum Panju
- */
-
-#ifndef DEMO_COMMON_H
-#define DEMO_COMMON_H
-
-#include <glyphy.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <assert.h>
-
-#include <algorithm>
-#include <vector>
-
-/* Tailor config for various platforms. */
-
-#ifdef EMSCRIPTEN
-/* https://github.com/kripken/emscripten/issues/340 */
-# undef HAVE_GLEW
- /* WebGL shaders are ES2 */
-# define GL_ES_VERSION_2_0 1
-#endif
-
-#if defined(__ANDROID__)
-# define HAVE_GLES2 1
-# define HAVE_GLUT 1
-#endif
-
-#ifdef _WIN32
-# define HAVE_GL 1
-# define HAVE_GLEW 1
-#endif
-
-/* Get Glew out of the way. */
-#ifdef HAVE_GLEW
-# include <GL/glew.h>
-#else
-# define GLEW_OK 0
- static inline int glewInit (void) { return GLEW_OK; }
- static inline int glewIsSupported (const char *s)
- { return 0 == strcmp ("GL_VERSION_2_0", s); }
-#endif /* HAVE_GLEW */
-
-/* WTF this block?! */
-#if defined(HAVE_GLES2)
-# include <GLES2/gl2.h>
-#elif defined(HAVE_GL)
-# ifndef HAVE_GLEW
-# define GL_GLEXT_PROTOTYPES 1
-# if defined(__APPLE__)
-# include <OpenGL/gl.h>
-# else
-# include <GL/gl.h>
-# endif
-# endif
-# if defined(__APPLE__)
-# include <OpenGL/OpenGL.h>
-# else
-# ifdef HAVE_GLEW
-# ifdef _WIN32
-# include <GL/wglew.h>
-# else
-# include <GL/glxew.h>
-# endif
-# endif
-# endif
-#endif /* HAVE_GL */
-
-/* Finally, Glut. */
-#ifdef HAVE_GLUT
-# if defined(__APPLE__)
-# include <GLUT/glut.h>
-# else
-# include <GL/glut.h>
-# endif
-#endif
-
-
-
-
-/* Logging. */
-#ifdef __ANDROID__
-# include <android/log.h>
-# define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "glyphy-demo", __VA_ARGS__))
-# define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "glyphy-demo", __VA_ARGS__))
-# define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "glyphy-demo", __VA_ARGS__))
-#else /* !__ANDROID__ */
-#if 0
-# define LOGI(...) ((void) fprintf (stderr, __VA_ARGS__))
-# define LOGW(...) ((void) fprintf (stderr, __VA_ARGS__))
-# define LOGE(...) ((void) fprintf (stderr, __VA_ARGS__), abort ())
-#else
-# define LOGI(...) do { } while(false)
-# define LOGW(...) do { } while(false)
-# define LOGE(...) do { } while(false)
-#endif
-#endif
-
-
-
-#define STRINGIZE1(Src) #Src
-#define STRINGIZE(Src) STRINGIZE1(Src)
-
-#define ARRAY_LEN(Array) (sizeof (Array) / sizeof (*Array))
-
-
-#define MIN_FONT_SIZE 10
-#define TOLERANCE (1./2048)
-
-
-#define gl(name) \
- for (GLint ee_, ii_ = 0; \
- ii_ < 1; \
- (ii_++, \
- (ee_ = glGetError()) && \
- (reportGLerror (ee_, #name, __LINE__, __FILE__), 0))) \
- gl##name
-
-
-static inline void
-reportGLerror(GLint e, const char *api, int line, const char *file)
-{
- fflush(stdout);
- fprintf(stderr, "\nwglGetCurrentDC=%p wglGetCurrentContext=%p\n", wglGetCurrentDC(), wglGetCurrentContext());
- fprintf (stderr, "gl%s failed with error %04X on %s:%d\n", api, e, file, line);
- fflush (stderr);
- exit (1);
-}
-
-static inline void
-die (const char *msg)
-{
- fprintf (stderr, "%s\n", msg);
- exit (1);
-}
-
-template <typename T>
-T clamp (T v, T m, T M)
-{
- return v < m ? m : v > M ? M : v;
-}
-
-
-#if defined(_MSC_VER)
-#define DEMO_FUNC __FUNCSIG__
-#else
-#define DEMO_FUNC __func__
-#endif
-
-struct auto_trace_t
-{
- auto_trace_t (const char *func_) : func (func_)
- { printf ("Enter: %s\n", func); }
-
- ~auto_trace_t (void)
- { printf ("Leave: %s\n", func); }
-
- private:
- const char * const func;
-};
-
-#if 0
-#define TRACE() auto_trace_t trace(DEMO_FUNC)
-#else
-#define TRACE() do { } while(false)
-#endif
-
-#endif /* DEMO_COMMON_H */
diff --git a/vcl/inc/glyphy/demo/demo-font.h b/vcl/inc/glyphy/demo/demo-font.h
deleted file mode 100644
index d4e75ff3f2d6..000000000000
--- a/vcl/inc/glyphy/demo/demo-font.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef DEMO_FONT_H
-#define DEMO_FONT_H
-
-#include "demo-common.h"
-#include "demo-atlas.h"
-
-#ifndef _WIN32
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#endif
-
-#ifdef _WIN32
-#include <windows.h>
-#define DEFAULT_FONT "Calibri"
-#undef near
-#undef far
-#endif
-
-typedef struct {
- glyphy_extents_t extents;
- double advance;
- glyphy_bool_t is_empty; /* has no outline; eg. space; don't draw it */
- unsigned int nominal_w;
- unsigned int nominal_h;
- unsigned int atlas_x;
- unsigned int atlas_y;
-} glyph_info_t;
-
-
-typedef struct demo_font_t demo_font_t;
-
-demo_font_t *
-demo_font_create (
-#ifndef _WIN32
- FT_Face face,
-#endif
-#ifdef _WIN32
- HDC hdc,
-#endif
- demo_atlas_t *atlas);
-
-demo_font_t *
-demo_font_reference (demo_font_t *font);
-
-void
-demo_font_destroy (demo_font_t *font);
-
-
-#ifndef _WIN32
-FT_Face
-#endif
-#ifdef _WIN32
-HDC
-#endif
-demo_font_get_face (demo_font_t *font);
-
-demo_atlas_t *
-demo_font_get_atlas (demo_font_t *font);
-
-
-void
-demo_font_lookup_glyph (demo_font_t *font,
- unsigned int glyph_index,
- glyph_info_t *glyph_info);
-
-void
-demo_font_print_stats (demo_font_t *font);
-
-
-#endif /* DEMO_FONT_H */
diff --git a/vcl/inc/glyphy/demo/demo-fshader-glsl.h b/vcl/inc/glyphy/demo/demo-fshader-glsl.h
deleted file mode 100644
index d80a6cc82b26..000000000000
--- a/vcl/inc/glyphy/demo/demo-fshader-glsl.h
+++ /dev/null
@@ -1,88 +0,0 @@
-static const char *demo_fshader_glsl =
-"uniform float u_contrast;\n"
-"uniform float u_gamma_adjust;\n"
-"uniform float u_outline_thickness;\n"
-"uniform bool u_outline;\n"
-"uniform float u_boldness;\n"
-"uniform bool u_debug;\n"
-"\n"
-"varying vec4 v_glyph;\n"
-"\n"
-"\n"
-"#define SQRT2_2 0.70710678118654757 /* 1 / sqrt(2.) */\n"
-"#define SQRT2 1.4142135623730951\n"
-"\n"
-"struct glyph_info_t {\n"
-" ivec2 nominal_size;\n"
-" ivec2 atlas_pos;\n"
-"};\n"
-"\n"
-"glyph_info_t\n"
-"glyph_info_decode (vec4 v)\n"
-"{\n"
-" glyph_info_t gi;\n"
-" gi.nominal_size = (ivec2 (mod (v.zw, 256.)) + 2) / 4;\n"
-" gi.atlas_pos = ivec2 (v_glyph.zw) / 256;\n"
-" return gi;\n"
-"}\n"
-"\n"
-"\n"
-"float\n"
-"antialias (float d)\n"
-"{\n"
-" return smoothstep (-.75, +.75, d);\n"
-"}\n"
-"\n"
-"vec4\n"
-"source_over (const vec4 src, const vec4 dst)\n"
-"{\n"
-" // http://dev.w3.org/fxtf/compositing-1/#porterduffcompositingoperators_srcover\n"
-" float alpha = src.a + (dst.a * (1. - src.a));\n"
-" return vec4 (((src.rgb * src.a) + (dst.rgb * dst.a * (1. - src.a))) / alpha, alpha);\n"
-"}\n"
-"\n"
-"void\n"
-"main()\n"
-"{\n"
-" vec2 p = v_glyph.xy;\n"
-" glyph_info_t gi = glyph_info_decode (v_glyph);\n"
-"\n"
-" /* isotropic antialiasing */\n"
-" vec2 dpdx = dFdx (p);\n"
-" vec2 dpdy = dFdy (p);\n"
-" float m = length (vec2 (length (dpdx), length (dpdy))) * SQRT2_2;\n"
-"\n"
-" vec4 color = vec4 (0,0,0,1);\n"
-"\n"
-" float gsdist = glyphy_sdf (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);\n"
-" float sdist = gsdist / m * u_contrast;\n"
-"\n"
-" if (!u_debug) {\n"
-" sdist -= u_boldness * 10.;\n"
-" if (u_outline)\n"
-" sdist = abs (sdist) - u_outline_thickness * .5;\n"
-" if (sdist > 1.)\n"
-" discard;\n"
-" float alpha = antialias (-sdist);\n"
-" if (u_gamma_adjust != 1.)\n"
-" alpha = pow (alpha, 1./u_gamma_adjust);\n"
-" color = vec4 (color.rgb,color.a * alpha);\n"
-" } else {\n"
-" float gudist = abs (gsdist);\n"
-" float debug_color = 0.4;\n"
-" // Color the distance field red inside and green outside\n"
-" if (!glyphy_isinf (gudist))\n"
-" color = source_over (vec4 (debug_color * smoothstep (1., -1., sdist), debug_color * smoothstep (-1., 1., sdist), 0, 1. - gudist), color);\n"
-"\n"
-" glyphy_arc_list_t arc_list = glyphy_arc_list (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);\n"
-" // Color the number of endpoints per cell blue\n"
-" color = source_over (vec4 (0, 0, debug_color, float(arc_list.num_endpoints) / float(GLYPHY_MAX_NUM_ENDPOINTS)), color);\n"
-"\n"
-" float pdist = glyphy_point_dist (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);\n"
-" // Color points yellow\n"
-" color = source_over (vec4 (1, 1, 0, smoothstep (.06, .05, pdist)), color);\n"
-" }\n"
-"\n"
-" gl_FragColor = color;\n"
-"}\n"
-;
diff --git a/vcl/inc/glyphy/demo/demo-shader.h b/vcl/inc/glyphy/demo/demo-shader.h
deleted file mode 100644
index dfa548091039..000000000000
--- a/vcl/inc/glyphy/demo/demo-shader.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012 Google, Inc. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#ifndef DEMO_SHADERS_H
-#define DEMO_SHADERS_H
-
-#include "demo-common.h"
-#include "demo-font.h"
-
-
-struct glyph_vertex_t {
- /* Position */
- GLfloat x;
- GLfloat y;
- /* Glyph info */
- GLfloat g16hi;
- GLfloat g16lo;
-};
-
-void
-demo_shader_add_glyph_vertices (const glyphy_point_t &p,
- double font_size,
- glyph_info_t *gi,
- std::vector<glyph_vertex_t> *vertices,
- glyphy_extents_t *extents);
-
-
-GLuint
-demo_shader_create_program (void);
-
-
-#endif /* DEMO_SHADERS_H */
diff --git a/vcl/inc/glyphy/demo/demo-vshader-glsl.h b/vcl/inc/glyphy/demo/demo-vshader-glsl.h
deleted file mode 100644
index c952ab719b2c..000000000000
--- a/vcl/inc/glyphy/demo/demo-vshader-glsl.h
+++ /dev/null
@@ -1,24 +0,0 @@
-static const char *demo_vshader_glsl =
-"uniform mat4 u_matViewProjection;\n"
-"\n"
-"attribute vec4 a_glyph_vertex;\n"
-"\n"
-"varying vec4 v_glyph;\n"
-"\n"
-"vec4\n"
-"glyph_vertex_transcode (vec2 v)\n"
-"{\n"
-" ivec2 g = ivec2 (v);\n"
-" ivec2 corner = ivec2 (mod (v, 2.));\n"
-" g /= 2;\n"
-" ivec2 nominal_size = ivec2 (mod (vec2(g), 64.));\n"
-" return vec4 (corner * nominal_size, g * 4);\n"
-"}\n"
-"\n"
-"void\n"
-"main()\n"
-"{\n"
-" gl_Position = u_matViewProjection * vec4 (a_glyph_vertex.xy, 0, 1);\n"
-" v_glyph = glyph_vertex_transcode (a_glyph_vertex.zw);\n"
-"}\n"
-;
diff --git a/vcl/inc/glyphy/demo/matrix4x4.h b/vcl/inc/glyphy/demo/matrix4x4.h
deleted file mode 100644
index 2169561007e3..000000000000
--- a/vcl/inc/glyphy/demo/matrix4x4.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2009, Mozilla Corp
- * Copyright (c) 2012, Google, Inc.
- * All rights reserved.
- *
- * 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 the <organization> 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 <copyright holder> ''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 <copyright holder> 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.
- */
-
-/*
- * Based on sample code from the OpenGL(R) ES 2.0 Programming Guide, which carriers
- * the following header:
- *
- * Book: OpenGL(R) ES 2.0 Programming Guide
- * Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner
- * ISBN-10: 0321502795
- * ISBN-13: 9780321502797
- * Publisher: Addison-Wesley Professional
- * URLs: http://safari.informit.com/9780321563835
- * http://www.opengles-book.com
- */
-
-/*
- * Ported from JavaScript to C by Behdad Esfahbod, 2012.
- * Added MultMatrix. Converting from fixed-function OpenGL matrix
- * operations to these functions should be as simple as renaming the
- * 'gl' prefix to 'm4' and adding the matrix argument to the call.
- *
- * The C version lives at http://code.google.com/p/matrix4x4-c/
- */
-
-/*
- * A simple 4x4 matrix utility implementation
- */
-
-#ifndef MATRIX4x4_H
-#define MATRIX4x4_H
-
-/* Copies other matrix into mat */
-float *
-m4Copy (float *mat, const float *other);
-
-float *
-m4Multiply (float *mat, const float *right);
-
-float *
-m4MultMatrix (float *mat, const float *left);
-
-float
-m4Get (float *mat, unsigned int row, unsigned int col);
-
-float *
-m4Scale (float *mat, float sx, float sy, float sz);
-
-float *
-m4Translate (float *mat, float tx, float ty, float tz);
-
-float *
-m4Rotate (float *mat, float angle, float x, float y, float z);
-
-float *
-m4Frustum (float *mat, float left, float right, float bottom, float top, float nearZ, float farZ);
-
-float *
-m4Perspective (float *mat, float fovy, float aspect, float nearZ, float farZ);
-
-float *
-m4Ortho (float *mat, float left, float right, float bottom, float top, float nearZ, float farZ);
-
-/* In-place inversion */
-float *
-m4Invert (float *mat);
-
-/* Puts the inverse of other matrix into mat */
-float *
-m4Inverse (float *mat, const float *other);
-
-/* In-place transpose */
-float *
-m4Transpose (float *mat);
-
-float *
-m4LoadIdentity (float *mat);
-
-float *
-m4ApplyToVect (float *mat, float *vec);
-
-#endif
diff --git a/vcl/inc/win/winlayout.hxx b/vcl/inc/win/winlayout.hxx
index 0e30e071050b..7b15e7e4f5f3 100755
--- a/vcl/inc/win/winlayout.hxx
+++ b/vcl/inc/win/winlayout.hxx
@@ -42,9 +42,6 @@ typedef std::unordered_map<int,int> IntMap;
#include <graphite_features.hxx>
#endif
-// This needs to come after any includes for d2d1.h, otherwise we get lots of errors
-#include "glyphy/demo.hxx"
-
class WinFontInstance;
struct VisualItem;
@@ -166,7 +163,6 @@ class WinFontInstance : public LogicalFontInstance
public:
explicit WinFontInstance( FontSelectPattern& );
virtual ~WinFontInstance() override;
- void setupGLyphy(HDC hDC);
private:
// TODO: also add HFONT??? Watch out for issues with too many active fonts...
@@ -194,10 +190,6 @@ public:
int GetMinKashidaWidth() const { return mnMinKashidaWidth; }
int GetMinKashidaGlyph() const { return mnMinKashidaGlyph; }
- static GLuint mnGLyphyProgram;
- demo_atlas_t* mpGLyphyAtlas;
- demo_font_t* mpGLyphyFont;
-
private:
GlyphCache maGlyphCache;
public:
@@ -212,7 +204,6 @@ private:
std::unordered_map<int, int> maWidthMap;
mutable int mnMinKashidaWidth;
mutable int mnMinKashidaGlyph;
- bool mbGLyphySetupCalled;
};
class WinLayout : public SalLayout
@@ -357,9 +348,6 @@ private:
int mnMinKashidaWidth;
int mnMinKashidaGlyph;
bool mbDisableGlyphInjection;
- bool mbUseGLyphy;
- bool DrawCachedGlyphsUsingGLyphy(SalGraphics& rGraphics) const;
- bool DrawCachedGlyphsUsingTextures(SalGraphics& rGraphics) const;
};
#if ENABLE_GRAPHITE
diff --git a/vcl/win/gdi/winlayout.cxx b/vcl/win/gdi/winlayout.cxx
index f4ead1d845de..671fa3fd0d08 100644
--- a/vcl/win/gdi/winlayout.cxx
+++ b/vcl/win/gdi/winlayout.cxx
@@ -52,7 +52,6 @@
// static initialization
std::unique_ptr<GlobalGlyphCache> GlyphCache::gGlobalGlyphCache(new GlobalGlyphCache);
-GLuint WinFontInstance::mnGLyphyProgram = 0;
inline void WinFontInstance::CacheGlyphWidth( int nCharCode, int nCharWidth )
{
@@ -964,61 +963,6 @@ void SimpleWinLayout::Simplify( bool /*bIsBase*/ )
mnWidth = mnBaseAdv = 0;
}
-void WinFontInstance::setupGLyphy(HDC hDC)
-{
- if (mbGLyphySetupCalled)
- return;
-
- mbGLyphySetupCalled = true;
-
- // First get the OUTLINETEXTMETRIC to find the font's em unit. Then, to get an unmodified (not
- // grid-fitted) glyph outline, create the font anew at that size. That is as the doc for
- // GetGlyphOutline() suggests.
- OUTLINETEXTMETRICW aOutlineTextMetric;
- if (!GetOutlineTextMetricsW (hDC, sizeof (OUTLINETEXTMETRICW), &aOutlineTextMetric))
- {
- SAL_WARN("vcl.gdi", "GetOutlineTextMetricsW failed: " << WindowsErrorString(GetLastError()));
- return;
- }
-
- HFONT hFont = static_cast<HFONT>(GetCurrentObject(hDC, OBJ_FONT));
- LOGFONTW aLogFont;
- GetObjectW(hFont, sizeof(LOGFONTW), &aLogFont);
-
- HDC hNewDC = GetDC(nullptr);
- if (hNewDC == nullptr)
- {
- SAL_WARN("vcl.gdi", "GetDC failed: " << WindowsErrorString(GetLastError()));
- return;
- }
-
- hNewDC = CreateCompatibleDC(hNewDC);
- if (hNewDC == nullptr)
- {
- SAL_WARN("vcl.gdi", "CreateCompatibleDC failed: " << WindowsErrorString(GetLastError()));
- return;
- }
-
- aLogFont.lfHeight = aOutlineTextMetric.otmEMSquare;
- hFont = CreateFontIndirectW(&aLogFont);
- if (hFont == nullptr)
- {
- SAL_WARN("vcl.gdi", "CreateFontIndirectW failed: " << WindowsErrorString(GetLastError()));
- return;
- }
- if (SelectObject(hNewDC, hFont) == nullptr)
- {
- SAL_WARN("vcl.gdi", "SelectObject failed: " << WindowsErrorString(GetLastError()));
- return;
- }
-
- if (mnGLyphyProgram == 0)
- mnGLyphyProgram = demo_shader_create_program();
-
- mpGLyphyAtlas = demo_atlas_create(2048, 1024, 64, 8);
- mpGLyphyFont = demo_font_create(hNewDC, mpGLyphyAtlas);
-}
-
WinLayout::WinLayout(HDC hDC, const WinFontFace& rWFD, WinFontInstance& rWFE, bool bUseOpenGL)
: mhDC( hDC ),
mhFont( static_cast<HFONT>(GetCurrentObject(hDC,OBJ_FONT)) ),
@@ -1348,11 +1292,8 @@ UniscribeLayout::UniscribeLayout(HDC hDC, const WinFontFace& rWinFontData,
mpGlyphs2Chars( nullptr ),
mnMinKashidaWidth( 0 ),
mnMinKashidaGlyph( 0 ),
- mbDisableGlyphInjection( false ),
- mbUseGLyphy( false )
+ mbDisableGlyphInjection( false )
{
- static bool bUseGLyphy = std::getenv("SAL_USE_GLYPHY") != nullptr;
- mbUseGLyphy = bUseGLyphy;
}
UniscribeLayout::~UniscribeLayout()
@@ -2446,246 +2387,20 @@ bool UniscribeLayout::CacheGlyphs(SalGraphics& rGraphics) const
if (!bDoGlyphCaching)
return false;
- if (mbUseGLyphy)
- {
- if (!mrWinFontEntry.mxFontMetric->IsTrueTypeFont())
- return false;
-
- mrWinFontEntry.setupGLyphy(mhDC);
-
- for (int i = 0; i < mnGlyphCount; i++)
- {
- if (mpOutGlyphs[i] == DROPPED_OUTGLYPH)
- continue;
-
- glyph_info_t aGI;
- VCL_GL_INFO("Calling demo_font_lookup_glyph");
- demo_font_lookup_glyph( mrWinFontEntry.mpGLyphyFont, mpOutGlyphs[i], &aGI );
- }
- }
- else
- {
- for (int i = 0; i < mnGlyphCount; i++)
- {
- int nCodePoint = mpOutGlyphs[i];
- if (!mrWinFontEntry.GetGlyphCache().IsGlyphCached(nCodePoint))
- {
- if (!mrWinFontEntry.CacheGlyphToAtlas(true, nCodePoint, *this, rGraphics))
- return false;
- }
- }
- }
-
- return true;
-}
-
-bool UniscribeLayout::DrawCachedGlyphsUsingGLyphy(SalGraphics& rGraphics) const
-{
- WinSalGraphics& rWinGraphics = static_cast<WinSalGraphics&>(rGraphics);
-
- Rectangle aRect;
- GetBoundRect(rGraphics, aRect);
-
- WinOpenGLSalGraphicsImpl *pImpl = dynamic_cast<WinOpenGLSalGraphicsImpl*>(rWinGraphics.mpImpl.get());
- if (!pImpl)
- return false;
-
- pImpl->PreDraw();
-
- rGraphics.GetOpenGLContext()->UseNoProgram();
-
- glUseProgram( WinFontInstance::mnGLyphyProgram );
- CHECK_GL_ERROR();
- demo_atlas_set_uniforms( mrWinFontEntry.mpGLyphyAtlas );
-
- GLint nLoc;
-
- nLoc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_debug" );
- CHECK_GL_ERROR();
- glUniform1f( nLoc, 0 );
- CHECK_GL_ERROR();
-
- nLoc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_contrast" );
- CHECK_GL_ERROR();
- glUniform1f( nLoc, 1 );
- CHECK_GL_ERROR();
-
- nLoc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_gamma_adjust" );
- CHECK_GL_ERROR();
- glUniform1f( nLoc, 1 );
- CHECK_GL_ERROR();
-
- nLoc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_outline" );
- CHECK_GL_ERROR();
- glUniform1f( nLoc, GLfloat(false) );
- CHECK_GL_ERROR();
-
- nLoc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_outline_thickness" );
- CHECK_GL_ERROR();
- glUniform1f( nLoc, 1 );
- CHECK_GL_ERROR();
-
- nLoc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_boldness" );
- CHECK_GL_ERROR();
- glUniform1f( nLoc, 0 );
- CHECK_GL_ERROR();
-
- glEnable(GL_BLEND);
- CHECK_GL_ERROR();
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- CHECK_GL_ERROR();
-
-#if 0
- // glyphy-demo sets sRGB on initially, and there it has a perhaps beneficial effect,
- // but doesn't help very much here, if at all
- GLboolean available = false;
- if ((glewIsSupported("GL_ARB_framebuffer_sRGB") || glewIsSupported("GL_EXT_framebuffer_sRGB")) &&
- (glGetBooleanv(GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, &available), available))
- {
- glEnable(GL_FRAMEBUFFER_SRGB);
- CHECK_GL_ERROR();
- }
-#endif
-
- // FIXME: This code snippet is mostly copied from the one in
- // UniscribeLayout::DrawTextImpl. Should be factored out.
- int nBaseClusterOffset = 0;
- int nBaseGlyphPos = -1;
- for( int nItem = 0; nItem < mnItemCount; ++nItem )
+ for (int i = 0; i < mnGlyphCount; i++)
{
- const VisualItem& rVisualItem = mpVisualItems[ nItem ];
-
- // skip if there is nothing to display
- int nMinGlyphPos, nEndGlyphPos;
- if( !GetItemSubrange( rVisualItem, nMinGlyphPos, nEndGlyphPos ) )
- continue;
-
- if( nBaseGlyphPos < 0 )
- {
- // adjust draw position relative to cluster start
- if( rVisualItem.IsRTL() )
- nBaseGlyphPos = nEndGlyphPos - 1;
- else
- nBaseGlyphPos = nMinGlyphPos;
-
- int i = mnMinCharPos;
- while( (--i >= rVisualItem.mnMinCharPos)
- && (nBaseGlyphPos == mpLogClusters[i]) )
- nBaseClusterOffset += mpCharWidths[i];
-
- if( !rVisualItem.IsRTL() )
- nBaseClusterOffset = -nBaseClusterOffset;
- }
-
- // now draw the matching glyphs in this item
- Point aRelPos( rVisualItem.mnXOffset + nBaseClusterOffset, 0 );
- Point aPos = GetDrawPosition( aRelPos );
-
- int nAdvance = 0;
-
- // This has to be in sync with UniscribeLayout::FillDXArray(), so that
- // actual and reported glyph positions (used for e.g. cursor caret
- // positioning) match.
- const int* pGlyphWidths = mpJustifications ? mpJustifications : mpGlyphAdvances;
-
- double font_size = mrWinFontEntry.maFontSelData.mfExactHeight; // ???
-
- // font_size = 1; // ???
-
- std::vector<glyph_vertex_t> vertices;
- for (int i = nMinGlyphPos; i < nEndGlyphPos; i++)
- {
- // Ignore dropped glyphs.
- if (mpOutGlyphs[i] == DROPPED_OUTGLYPH)
- continue;
-
- // Total crack
- glyphy_point_t pt;
- pt.x = nAdvance + aPos.X() + mpGlyphOffsets[i].du;
- pt.y = aPos.Y() + mpGlyphOffsets[i].dv;
- glyph_info_t gi;
- demo_font_lookup_glyph( mrWinFontEntry.mpGLyphyFont, mpOutGlyphs[i], &gi );
- demo_shader_add_glyph_vertices( pt, font_size, &gi, &vertices, nullptr );
-
- nAdvance += pGlyphWidths[i];
- }
-
- GLfloat mat[16];
- m4LoadIdentity( mat );
-
- GLint viewport[4];
- glGetIntegerv( GL_VIEWPORT, viewport );
- CHECK_GL_ERROR();
-
- double width = viewport[2];
- double height = viewport[3];
-
-#if 0
- // Based on demo_view_apply_transform(). I don't really understand it.
-
- // No scaling, no translation needed here
-
- // Perspective (but why would we want that in LO; it's needed in glyphy-demo because there
- // you can rotate the "sheet" the text is drawn on)
+ int nCodePoint = mpOutGlyphs[i];
+ if (!mrWinFontEntry.GetGlyphCache().IsGlyphCached(nCodePoint))
{
- double d = std::max( width, height );
- double near = d / 4;
- double far = near + d;
- double factor = near / (2 * near + d);
- m4Frustum( mat, -width * factor, width * factor, -height * factor, height * factor, near, far );
- m4Translate( mat, 0, 0, -(near + d * 0.5) );
+ if (!mrWinFontEntry.CacheGlyphToAtlas(true, nCodePoint, *this, rGraphics))
+ return false;
}
-
- // No rotation here
-
- // Fix 'up'
- m4Scale( mat, 1, -1, 1 );
-
- // Foo
- // m4Scale( mat, 0.5, 0.5, 1 );
-
- // The "Center buffer" part in demo_view_display()
- m4Translate( mat, width/2, height/2, 0 );
-
-#else
- // Crack that just happens to show something (even if not completely in correct location) in
- // some cases, but not all. I don't understand why.
- double scale = std::max( 2/width, 2/height );
- m4Scale( mat, scale, -scale, 1);
- m4Translate( mat, -width/2, -height/2, 0 );
-#endif
-
- GLuint u_matViewProjection_loc = glGetUniformLocation( WinFontInstance::mnGLyphyProgram, "u_matViewProjection" );
- CHECK_GL_ERROR();
- glUniformMatrix4fv( u_matViewProjection_loc, 1, GL_FALSE, mat );
- CHECK_GL_ERROR();
-
- GLuint a_glyph_vertex_loc = glGetAttribLocation( WinFontInstance::mnGLyphyProgram, "a_glyph_vertex" );
- GLuint buf_name;
- glGenBuffers( 1, &buf_name );
- CHECK_GL_ERROR();
- glBindBuffer( GL_ARRAY_BUFFER, buf_name );
- CHECK_GL_ERROR();
-
- glBufferData( GL_ARRAY_BUFFER, sizeof(glyph_vertex_t) * vertices.size(), &vertices[0], GL_STATIC_DRAW );
- CHECK_GL_ERROR();
- glEnableVertexAttribArray( a_glyph_vertex_loc );
- CHECK_GL_ERROR();
- glVertexAttribPointer( a_glyph_vertex_loc, 4, GL_FLOAT, GL_FALSE, sizeof(glyph_vertex_t), nullptr );
- CHECK_GL_ERROR();
- glDrawArrays( GL_TRIANGLES, 0, vertices.size() );
- CHECK_GL_ERROR();
- glDisableVertexAttribArray( a_glyph_vertex_loc );
- CHECK_GL_ERROR();
- glDeleteBuffers( 1, &buf_name );
- CHECK_GL_ERROR();
}
- pImpl->PostDraw();
return true;
}
-bool UniscribeLayout::DrawCachedGlyphsUsingTextures(SalGraphics& rGraphics) const
+bool UniscribeLayout::DrawCachedGlyphs(SalGraphics& rGraphics) const
{
WinSalGraphics& rWinGraphics = static_cast<WinSalGraphics&>(rGraphics);
HDC hDC = rWinGraphics.getHDC();
@@ -2781,14 +2496,6 @@ bool UniscribeLayout::DrawCachedGlyphsUsingTextures(SalGraphics& rGraphics) cons
return true;
}
-bool UniscribeLayout::DrawCachedGlyphs(SalGraphics& rGraphics) const
-{
- if (mbUseGLyphy)
- return DrawCachedGlyphsUsingGLyphy(rGraphics);
- else
- return DrawCachedGlyphsUsingTextures( rGraphics );
-}
-
DeviceCoordinate UniscribeLayout::FillDXArray( DeviceCoordinate* pDXArray ) const
{
// calculate width of the complete layout
@@ -3962,15 +3669,11 @@ WinFontInstance::WinFontInstance( FontSelectPattern& rFSD )
: LogicalFontInstance( rFSD )
, mpKerningPairs( nullptr )
, mnKerningPairs( -1 )
-, mpGLyphyAtlas( nullptr )
-, mpGLyphyFont( nullptr )
, maWidthMap( 512 )
, mnMinKashidaWidth( -1 )
, mnMinKashidaGlyph( -1 )
{
maScriptCache = nullptr;
- mpGLyphyFont = nullptr;
- mbGLyphySetupCalled = false;
}
WinFontInstance::~WinFontInstance()