From 0d02568ff8bd59cd9be9f7e09a444e9cf6689ae2 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Tue, 12 Mar 2024 10:26:55 +0200 Subject: [PATCH] Update ICU and msdfgen. --- modules/msdfgen/SCsub | 3 +- modules/text_server_adv/SCsub | 1 + .../gdextension_build/SConstruct | 4 +- modules/text_server_adv/text_server_adv.cpp | 6 + modules/text_server_fb/SCsub | 1 + .../gdextension_build/SConstruct | 2 + modules/text_server_fb/text_server_fb.cpp | 6 + thirdparty/README.md | 4 +- thirdparty/icu4c/common/unicode/uvernum.h | 6 +- thirdparty/icu4c/icudt74l.dat | Bin 4419920 -> 4419952 bytes thirdparty/msdfgen/LICENSE.txt | 2 +- thirdparty/msdfgen/core/Bitmap.h | 10 +- thirdparty/msdfgen/core/Bitmap.hpp | 10 +- thirdparty/msdfgen/core/BitmapRef.hpp | 8 +- thirdparty/msdfgen/core/Contour.cpp | 2 +- thirdparty/msdfgen/core/Contour.h | 2 +- thirdparty/msdfgen/core/EdgeColor.h | 2 + thirdparty/msdfgen/core/EdgeHolder.cpp | 12 +- thirdparty/msdfgen/core/EdgeHolder.h | 12 +- .../msdfgen/core/MSDFErrorCorrection.cpp | 8 +- thirdparty/msdfgen/core/Projection.h | 2 +- thirdparty/msdfgen/core/Scanline.cpp | 2 +- thirdparty/msdfgen/core/Scanline.h | 1 + thirdparty/msdfgen/core/Shape.cpp | 41 +++-- thirdparty/msdfgen/core/Shape.h | 2 +- thirdparty/msdfgen/core/ShapeDistanceFinder.h | 2 +- .../msdfgen/core/ShapeDistanceFinder.hpp | 6 +- thirdparty/msdfgen/core/SignedDistance.cpp | 29 --- thirdparty/msdfgen/core/SignedDistance.h | 23 --- thirdparty/msdfgen/core/SignedDistance.hpp | 38 ++++ thirdparty/msdfgen/core/Vector2.cpp | 146 --------------- thirdparty/msdfgen/core/Vector2.h | 66 ------- thirdparty/msdfgen/core/Vector2.hpp | 167 ++++++++++++++++++ thirdparty/msdfgen/core/arithmetics.hpp | 2 +- thirdparty/msdfgen/core/base.h | 16 ++ .../msdfgen/core/bitmap-interpolation.hpp | 2 +- thirdparty/msdfgen/core/contour-combiners.cpp | 4 +- thirdparty/msdfgen/core/contour-combiners.h | 4 +- thirdparty/msdfgen/core/edge-coloring.cpp | 11 +- thirdparty/msdfgen/core/edge-segments.cpp | 32 +++- thirdparty/msdfgen/core/edge-segments.h | 36 +++- thirdparty/msdfgen/core/edge-selectors.h | 4 +- thirdparty/msdfgen/core/equation-solver.cpp | 2 +- thirdparty/msdfgen/core/equation-solver.h | 2 + thirdparty/msdfgen/core/generator-config.h | 1 - .../msdfgen/core/msdf-error-correction.h | 2 +- thirdparty/msdfgen/core/pixel-conversion.hpp | 2 - thirdparty/msdfgen/core/rasterization.h | 2 +- thirdparty/msdfgen/core/render-sdf.h | 2 +- .../msdfgen/core/sdf-error-estimation.h | 2 +- thirdparty/msdfgen/core/shape-description.cpp | 59 ++++--- thirdparty/msdfgen/core/shape-description.h | 1 - thirdparty/msdfgen/msdfgen.h | 5 +- 53 files changed, 421 insertions(+), 396 deletions(-) delete mode 100644 thirdparty/msdfgen/core/SignedDistance.cpp delete mode 100644 thirdparty/msdfgen/core/SignedDistance.h create mode 100644 thirdparty/msdfgen/core/SignedDistance.hpp delete mode 100644 thirdparty/msdfgen/core/Vector2.cpp delete mode 100644 thirdparty/msdfgen/core/Vector2.h create mode 100644 thirdparty/msdfgen/core/Vector2.hpp create mode 100644 thirdparty/msdfgen/core/base.h diff --git a/modules/msdfgen/SCsub b/modules/msdfgen/SCsub index 0c269bc7f4..f4316a74e7 100644 --- a/modules/msdfgen/SCsub +++ b/modules/msdfgen/SCsub @@ -20,8 +20,6 @@ if env["builtin_msdfgen"]: "core/Projection.cpp", "core/Scanline.cpp", "core/Shape.cpp", - "core/SignedDistance.cpp", - "core/Vector2.cpp", "core/contour-combiners.cpp", "core/edge-coloring.cpp", "core/edge-segments.cpp", @@ -36,6 +34,7 @@ if env["builtin_msdfgen"]: ] thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] + env_msdfgen.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) env_msdfgen.Prepend(CPPPATH=["#thirdparty/freetype/include", "#thirdparty/msdfgen", "#thirdparty/nanosvg"]) lib = env_msdfgen.add_library("msdfgen_builtin", thirdparty_sources) diff --git a/modules/text_server_adv/SCsub b/modules/text_server_adv/SCsub index 6b53353ec9..b04ad77bc9 100644 --- a/modules/text_server_adv/SCsub +++ b/modules/text_server_adv/SCsub @@ -531,6 +531,7 @@ module_obj = [] if env["builtin_msdfgen"] and msdfgen_enabled: # Treat msdfgen headers as system headers to avoid raising warnings. Not supported on MSVC. + env_text_server_adv.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) if not env.msvc: env_text_server_adv.Append(CPPFLAGS=["-isystem", Dir("#thirdparty/msdfgen").path]) else: diff --git a/modules/text_server_adv/gdextension_build/SConstruct b/modules/text_server_adv/gdextension_build/SConstruct index cd4331b60e..1f27f5ade9 100644 --- a/modules/text_server_adv/gdextension_build/SConstruct +++ b/modules/text_server_adv/gdextension_build/SConstruct @@ -133,8 +133,6 @@ if env["msdfgen_enabled"] and env["freetype_enabled"]: "core/Projection.cpp", "core/Scanline.cpp", "core/Shape.cpp", - "core/SignedDistance.cpp", - "core/Vector2.cpp", "core/contour-combiners.cpp", "core/edge-coloring.cpp", "core/edge-segments.cpp", @@ -149,8 +147,10 @@ if env["msdfgen_enabled"] and env["freetype_enabled"]: ] thirdparty_msdfgen_sources = [thirdparty_msdfgen_dir + file for file in thirdparty_msdfgen_sources] + env_msdfgen.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) env_msdfgen.Append(CPPPATH=["../../../thirdparty/freetype/include", "../../../thirdparty/msdfgen"]) env.Append(CPPPATH=["../../../thirdparty/msdfgen"]) + env.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) env.Append(CPPDEFINES=["MODULE_MSDFGEN_ENABLED"]) lib = env_msdfgen.Library( diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index 5d9bc69d03..1a44e22ab2 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -67,10 +67,16 @@ using namespace godot; // Thirdparty headers. #ifdef MODULE_MSDFGEN_ENABLED +#ifdef _MSC_VER +#pragma warning(disable : 4458) +#endif #include #include #include #include +#ifdef _MSC_VER +#pragma warning(default : 4458) +#endif #endif #ifdef MODULE_SVG_ENABLED diff --git a/modules/text_server_fb/SCsub b/modules/text_server_fb/SCsub index e808864512..fc0a8727c6 100644 --- a/modules/text_server_fb/SCsub +++ b/modules/text_server_fb/SCsub @@ -17,6 +17,7 @@ if "svg" in env.module_list: if env["builtin_msdfgen"] and msdfgen_enabled: # Treat msdfgen headers as system headers to avoid raising warnings. Not supported on MSVC. + env_text_server_fb.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) if not env.msvc: env_text_server_fb.Append(CPPFLAGS=["-isystem", Dir("#thirdparty/msdfgen").path]) else: diff --git a/modules/text_server_fb/gdextension_build/SConstruct b/modules/text_server_fb/gdextension_build/SConstruct index 0efced0bfc..29801ede8e 100644 --- a/modules/text_server_fb/gdextension_build/SConstruct +++ b/modules/text_server_fb/gdextension_build/SConstruct @@ -144,8 +144,10 @@ if env["msdfgen_enabled"] and env["freetype_enabled"]: ] thirdparty_msdfgen_sources = [thirdparty_msdfgen_dir + file for file in thirdparty_msdfgen_sources] + env_msdfgen.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) env_msdfgen.Append(CPPPATH=["../../../thirdparty/freetype/include", "../../../thirdparty/msdfgen"]) env.Append(CPPPATH=["../../../thirdparty/msdfgen"]) + env.Append(CPPDEFINES=[("MSDFGEN_PUBLIC", "")]) env.Append(CPPDEFINES=["MODULE_MSDFGEN_ENABLED"]) lib = env_msdfgen.Library( diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index 75374ecab4..44c5478dff 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -59,10 +59,16 @@ using namespace godot; // Thirdparty headers. #ifdef MODULE_MSDFGEN_ENABLED +#ifdef _MSC_VER +#pragma warning(disable : 4458) +#endif #include #include #include #include +#ifdef _MSC_VER +#pragma warning(default : 4458) +#endif #endif #ifdef MODULE_SVG_ENABLED diff --git a/thirdparty/README.md b/thirdparty/README.md index a36a8f209f..2c9bc36545 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -390,7 +390,7 @@ Files extracted from upstream source: ## icu4c - Upstream: https://github.com/unicode-org/icu -- Version: 74.1 (9edac7b78327a1cb58db29e2714b15f9fa14e4d7, 2023) +- Version: 74.2 (2d029329c82c7792b985024b2bdab5fc7278fbc8, 2023) - License: Unicode Files extracted from upstream source: @@ -690,7 +690,7 @@ Collection of single-file libraries used in Godot components. ## msdfgen - Upstream: https://github.com/Chlumsky/msdfgen -- Version: 1.10 (64a91eec3ca3787e6f78b4c99fcd3052ad3e37c0, 2021) +- Version: 1.11 (f12d7ca00091a632a289865b85c3f2e0bfc6542d, 2023) - License: MIT Files extracted from the upstream source: diff --git a/thirdparty/icu4c/common/unicode/uvernum.h b/thirdparty/icu4c/common/unicode/uvernum.h index 9fc98e7380..1cdf8912f9 100644 --- a/thirdparty/icu4c/common/unicode/uvernum.h +++ b/thirdparty/icu4c/common/unicode/uvernum.h @@ -59,7 +59,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_MINOR_NUM 1 +#define U_ICU_VERSION_MINOR_NUM 2 /** The current ICU patchlevel version as an integer. * This value will change in the subsequent releases of ICU @@ -132,7 +132,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "74.1" +#define U_ICU_VERSION "74.2" /** * The current ICU library major version number as a string, for library name suffixes. @@ -151,7 +151,7 @@ /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "74.1" +#define U_ICU_DATA_VERSION "74.2" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/thirdparty/icu4c/icudt74l.dat b/thirdparty/icu4c/icudt74l.dat index 8576067fd0f4ab0983f37c95da029d9bf3e854a8..e4ce73e23c84ae8c580ff1eb44a4b7076e062fad 100644 GIT binary patch delta 96104 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

;Qy6jLYW6>4ijQ-w1 z-QO4{ z%b=jLmO(*(ErWvPS_TEXwG0YQYeCJjUY4sYjP(Ze%SyrvO#KIU5xE9phgYa*# zFb3RaVGLkoC}z3G!WaNk_mG7#;0Y4{ISXUJD?j2@G@CADa!naUoNXP*5As$@5mO-I@HQ0yMEZI;4HiP-a zEcsxAi&=`GbSaX{D_9u=s*(70tc(GTV0FzbElA?+tc(F&Nc>(_#()V({K>40^#Rks z8jD$GB1z0)Wek`P6<>rTzLb?QUkKW zx*26JlFy&7Wl(qx4yk%bP#k1s3^;vvd1XNs_jWM7el)dDT z6ezPX2B;zNHQ5*gbf6mak;IMI7z0d^_!ex80oGu3y)2Gwh+JgH#u(rV4GC8y^bnA^uS4njTTsSbDE$CQ<6}0)fEQ5l*HHQ$ zl>P{%zkum#mhWt!lCYTN;5tMR{)>$<;4hMS4D5^n%smYuOafRh~(1w2R+g6xa| zB2aO0Fx|`|1*VHxWRcVLJ7d61B!M~Xi~$S58jD$$KQ419@DLZ4p3osvI@jG_L2|1Yz39$CUYj(zfM5x6dq58i->F?~&{QnCo@E1%svoLT# z5+ySSBDHdGFa~fV@dY>-1B9XK#Gte^nC@j!fzs?ynu`+@f)EFS8YH}&h>$tHo}per0IUFFkT54>fEZX~Gm9ix9HQ~u z5rzbLB#knhi~(1X9H7L>7@!K)*UO@dq)vmAG2kK8BL-meAodt@G6q>$rx}5iC=$|lQG}~lE7(B#(;B3{EM870au_FUx(7SkmT=jG6p<=ia$mYf5yoe z@DhpthLbViJy=~c%O@~h%<`3!u^!yM{{r5@eiQi~&4g z@n#l&FkQ?d1g4u=#F5lVaWMwSg2k&@6u1zHE_DNgf-+oP{i;=JT#NylV1>mjI$*k) zMITHTvlxNtY8F#2Q1)wPDct}m!7RZBK+*sx8`&UPP`!ac!5*xym&FxH+=+`Zpc$&) z11w+6;$06m2;wt8F2;aBBz_1NV?a1mVHA{(N0LwCVhl(Hi&wK`fF0P&l8t2H+zkv0 z^Pv{zA?YjRVhkvO^6NoeuW~NNfGVf}h+oUa7|;MVxR|9GEDrH$FBjv42}l-na4`mK z-2f`tAo5eV7$>M@ftuUJEPKJ?5RXmgVhorCHm{jwE|@N6SpYV-xE|d1Tg=56una1( z5+VT>U&F;1upTPD2}yh_7h}KrwL#(;fLbqA5ek8v>uoJ8WE<6;cB2vv6lEDpY` zebp*Z9A1Y8;VmQ|zTUu~@E#h3_rMw;K6=Q-81MvY&~q@|%kmLP-y1H*fWJ_EU%~Rl zEI*L+|K?&0VBls9U<9@QnL!MOW)?OuUChGCjY#c0+>8PINPHn~#sG1!x@HzBFkQ?d zizKhW%^0AJ#8=~H4A6wC(}U86Nb>b2+>8O{U;#)R+Hx~akYhwtpH|$A0lFI@sonue z9VoEGX_kB zO3XmgIGdX>U>;O_A(UPMrI#bATgA;7uof!50ZDu_H)FsysQ6AOy$2=_YX9%&W(+t4 z6JS}j>L@p3zzL|r(@^>xlKe$(#(*nO@ta8Eceoh??nA{NLFuPZ`UR4@*W8Q&@1WxK zACV-!a5DycN8ZBmzko+&t!x*3h5di0VRUXCw4Y0yy7HzON#A3T63<-KXkVI$5gGh9j zH!>((-v}y*AQqeOFb0@|^+EVnJd6RhVDpMu9H6u_n658oaRW1oSv-+6`0y|W_#^Ry zco+jhq3R-_bTpED91mkaB3QhdB?ZZ0e>XBHq=UtaS+byXE|e|+(V#n>i=jR$N7Bf- zi9vyT6T(MTJd6RgAPo$~EDcB&H}fzCv_ZwYp>!XVo(QF}yQVy&J8_>+M4oYtZ)5R>?p!7~83-|Ca2JA=T zAL3yQI0{vFf(KgvpGHz}frl~RGE~7eD18%3-$7D$pNBEv5m>yMUmoY#aCcv_4l^!o+fFTm! zgqJbE5~|S#N!*^7F~A9l@5;*<-~m?G%;F8Ei&^}TRn7k%GRQmocCUEMLr0i)3B{FJnM6 zm=8%?@wyE437x!%eB8#%7;qHHpdMbvfPSz+)htuM7WJ}BM^b-r6NAEKXk5+$t1D)i z3$_3fH4Atd0~RCkm+>+NtVH6k;jL#3SP#{>2}xorFJr(CB>rAr#()E0bn4lx zF$PFL4UmP>3Q$@ZN~?hlh6Jr9A7g+H5?`N>F~A6_&KycxA<5hFF$Oq*`4ERW^D$0v z<72F!02-V1;zOhX=gkZX?qC-dv-pBFKr9U6V+;s|8XN(oqoH&hlum@wDMDgd;h>t-nrg?mj+)@wq;KF*S!X;pZ5TCB(V+>dW7Vl-*gcLIC`4|IwHzVqVt$d6D zyO8wl0`M=1RbO8*4whj{ECNQ@tpI3au%e#ZI$c78~zZvGX}^b@s;=)15}~4!k_@p|GoT-0TaL$BjS28l7X6A7!;;~4Jc-r38m+O)k8vTAwOfl5~%oc zD7^|yH?yn-)5RCxE7!(Y^;>9e+V7iyZ5=q`nfH9zcK9b9A z1Q-MC!3v96oS?KTl7l=17z4ba;(ky%5J^5vfH5Ev%twS^43dRAw=gKgL-nOV=z5lP zum(sX$`W7<$c0F-6oADc235 zE28AH7Gw;tL(=Cc$Qa-T)>q8pDF|)<`+yZdf(%qo`-5Ft%#sRqX%JLHD3p!>)6Fc= zV11CFjT2-HNCb-)v!sCOW|mAO`5ZyUfP63?Vo$jsU01G={|DD;E%L*zRJ87K5WJu)3E4pBEzkTGBi*xX_k@c7?! zLB@btPyx{R-&{e)fCXS56tgTw5??0B7_b^Dz79!zqab6zHmLYcB=J3hi~;+R_(ud8 z1CAr{Pl4k9ELZ^IVvr9nL0x

|%uYH6)*&+{&PE3#<>~qq~BP0S}-Kc#0(cLXa`w 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%0A?-DEn`;u53%$t}+(m17*j`&Xip$ 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%0AJ95rcwo2v3+)5;NA3SL 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 E0A9N{-T(jq diff --git a/thirdparty/msdfgen/LICENSE.txt b/thirdparty/msdfgen/LICENSE.txt index 9757001664..69054bd2e1 100644 --- a/thirdparty/msdfgen/LICENSE.txt +++ b/thirdparty/msdfgen/LICENSE.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2016 - 2022 Viktor Chlumsky +Copyright (c) 2016 - 2023 Viktor Chlumsky Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/thirdparty/msdfgen/core/Bitmap.h b/thirdparty/msdfgen/core/Bitmap.h index 14407d6c34..9a08749f47 100644 --- a/thirdparty/msdfgen/core/Bitmap.h +++ b/thirdparty/msdfgen/core/Bitmap.h @@ -18,17 +18,17 @@ public: Bitmap(Bitmap &&orig); #endif ~Bitmap(); - Bitmap & operator=(const BitmapConstRef &orig); - Bitmap & operator=(const Bitmap &orig); + Bitmap &operator=(const BitmapConstRef &orig); + Bitmap &operator=(const Bitmap &orig); #ifdef MSDFGEN_USE_CPP11 - Bitmap & operator=(Bitmap &&orig); + Bitmap &operator=(Bitmap &&orig); #endif /// Bitmap width in pixels. int width() const; /// Bitmap height in pixels. int height() const; - T * operator()(int x, int y); - const T * operator()(int x, int y) const; + T *operator()(int x, int y); + const T *operator()(int x, int y) const; #ifdef MSDFGEN_USE_CPP11 explicit operator T *(); explicit operator const T *() const; diff --git a/thirdparty/msdfgen/core/Bitmap.hpp b/thirdparty/msdfgen/core/Bitmap.hpp index cb16cac8d4..9404357788 100644 --- a/thirdparty/msdfgen/core/Bitmap.hpp +++ b/thirdparty/msdfgen/core/Bitmap.hpp @@ -40,7 +40,7 @@ Bitmap::~Bitmap() { } template -Bitmap & Bitmap::operator=(const BitmapConstRef &orig) { +Bitmap &Bitmap::operator=(const BitmapConstRef &orig) { if (pixels != orig.pixels) { delete [] pixels; w = orig.width, h = orig.height; @@ -51,7 +51,7 @@ Bitmap & Bitmap::operator=(const BitmapConstRef &orig) { } template -Bitmap & Bitmap::operator=(const Bitmap &orig) { +Bitmap &Bitmap::operator=(const Bitmap &orig) { if (this != &orig) { delete [] pixels; w = orig.w, h = orig.h; @@ -63,7 +63,7 @@ Bitmap & Bitmap::operator=(const Bitmap &orig) { #ifdef MSDFGEN_USE_CPP11 template -Bitmap & Bitmap::operator=(Bitmap &&orig) { +Bitmap &Bitmap::operator=(Bitmap &&orig) { if (this != &orig) { delete [] pixels; pixels = orig.pixels; @@ -85,12 +85,12 @@ int Bitmap::height() const { } template -T * Bitmap::operator()(int x, int y) { +T *Bitmap::operator()(int x, int y) { return pixels+N*(w*y+x); } template -const T * Bitmap::operator()(int x, int y) const { +const T *Bitmap::operator()(int x, int y) const { return pixels+N*(w*y+x); } diff --git a/thirdparty/msdfgen/core/BitmapRef.hpp b/thirdparty/msdfgen/core/BitmapRef.hpp index 6f9620dcdf..cb17f95dcb 100644 --- a/thirdparty/msdfgen/core/BitmapRef.hpp +++ b/thirdparty/msdfgen/core/BitmapRef.hpp @@ -1,12 +1,10 @@ #pragma once -#include +#include "base.h" namespace msdfgen { -typedef unsigned char byte; - /// Reference to a 2D image bitmap or a buffer acting as one. Pixel storage not owned or managed by the object. template struct BitmapRef { @@ -17,7 +15,7 @@ struct BitmapRef { inline BitmapRef() : pixels(NULL), width(0), height(0) { } inline BitmapRef(T *pixels, int width, int height) : pixels(pixels), width(width), height(height) { } - inline T * operator()(int x, int y) const { + inline T *operator()(int x, int y) const { return pixels+N*(width*y+x); } @@ -34,7 +32,7 @@ struct BitmapConstRef { inline BitmapConstRef(const T *pixels, int width, int height) : pixels(pixels), width(width), height(height) { } inline BitmapConstRef(const BitmapRef &orig) : pixels(orig.pixels), width(orig.width), height(orig.height) { } - inline const T * operator()(int x, int y) const { + inline const T *operator()(int x, int y) const { return pixels+N*(width*y+x); } diff --git a/thirdparty/msdfgen/core/Contour.cpp b/thirdparty/msdfgen/core/Contour.cpp index ca80d3c55a..57293dc58b 100644 --- a/thirdparty/msdfgen/core/Contour.cpp +++ b/thirdparty/msdfgen/core/Contour.cpp @@ -19,7 +19,7 @@ void Contour::addEdge(EdgeHolder &&edge) { } #endif -EdgeHolder & Contour::addEdge() { +EdgeHolder &Contour::addEdge() { edges.resize(edges.size()+1); return edges.back(); } diff --git a/thirdparty/msdfgen/core/Contour.h b/thirdparty/msdfgen/core/Contour.h index f79b269582..4cae48fad7 100644 --- a/thirdparty/msdfgen/core/Contour.h +++ b/thirdparty/msdfgen/core/Contour.h @@ -19,7 +19,7 @@ public: void addEdge(EdgeHolder &&edge); #endif /// Creates a new edge in the contour and returns its reference. - EdgeHolder & addEdge(); + EdgeHolder &addEdge(); /// Adjusts the bounding box to fit the contour. void bound(double &l, double &b, double &r, double &t) const; /// Adjusts the bounding box to fit the contour border's mitered corners. diff --git a/thirdparty/msdfgen/core/EdgeColor.h b/thirdparty/msdfgen/core/EdgeColor.h index 9d49a5a89e..5d3730c9a6 100644 --- a/thirdparty/msdfgen/core/EdgeColor.h +++ b/thirdparty/msdfgen/core/EdgeColor.h @@ -1,6 +1,8 @@ #pragma once +#include "base.h" + namespace msdfgen { /// Edge color specifies which color channels an edge belongs to. diff --git a/thirdparty/msdfgen/core/EdgeHolder.cpp b/thirdparty/msdfgen/core/EdgeHolder.cpp index 1a8c5f66e9..cffcff46d3 100644 --- a/thirdparty/msdfgen/core/EdgeHolder.cpp +++ b/thirdparty/msdfgen/core/EdgeHolder.cpp @@ -31,7 +31,7 @@ EdgeHolder::~EdgeHolder() { delete edgeSegment; } -EdgeHolder & EdgeHolder::operator=(const EdgeHolder &orig) { +EdgeHolder &EdgeHolder::operator=(const EdgeHolder &orig) { if (this != &orig) { delete edgeSegment; edgeSegment = orig.edgeSegment ? orig.edgeSegment->clone() : NULL; @@ -40,7 +40,7 @@ EdgeHolder & EdgeHolder::operator=(const EdgeHolder &orig) { } #ifdef MSDFGEN_USE_CPP11 -EdgeHolder & EdgeHolder::operator=(EdgeHolder &&orig) { +EdgeHolder &EdgeHolder::operator=(EdgeHolder &&orig) { if (this != &orig) { delete edgeSegment; edgeSegment = orig.edgeSegment; @@ -50,19 +50,19 @@ EdgeHolder & EdgeHolder::operator=(EdgeHolder &&orig) { } #endif -EdgeSegment & EdgeHolder::operator*() { +EdgeSegment &EdgeHolder::operator*() { return *edgeSegment; } -const EdgeSegment & EdgeHolder::operator*() const { +const EdgeSegment &EdgeHolder::operator*() const { return *edgeSegment; } -EdgeSegment * EdgeHolder::operator->() { +EdgeSegment *EdgeHolder::operator->() { return edgeSegment; } -const EdgeSegment * EdgeHolder::operator->() const { +const EdgeSegment *EdgeHolder::operator->() const { return edgeSegment; } diff --git a/thirdparty/msdfgen/core/EdgeHolder.h b/thirdparty/msdfgen/core/EdgeHolder.h index c4c5be7616..50a59b2189 100644 --- a/thirdparty/msdfgen/core/EdgeHolder.h +++ b/thirdparty/msdfgen/core/EdgeHolder.h @@ -22,14 +22,14 @@ public: EdgeHolder(EdgeHolder &&orig); #endif ~EdgeHolder(); - EdgeHolder & operator=(const EdgeHolder &orig); + EdgeHolder &operator=(const EdgeHolder &orig); #ifdef MSDFGEN_USE_CPP11 - EdgeHolder & operator=(EdgeHolder &&orig); + EdgeHolder &operator=(EdgeHolder &&orig); #endif - EdgeSegment & operator*(); - const EdgeSegment & operator*() const; - EdgeSegment * operator->(); - const EdgeSegment * operator->() const; + EdgeSegment &operator*(); + const EdgeSegment &operator*() const; + EdgeSegment *operator->(); + const EdgeSegment *operator->() const; operator EdgeSegment *(); operator const EdgeSegment *() const; diff --git a/thirdparty/msdfgen/core/MSDFErrorCorrection.cpp b/thirdparty/msdfgen/core/MSDFErrorCorrection.cpp index 7918597fd2..9a5cefe128 100644 --- a/thirdparty/msdfgen/core/MSDFErrorCorrection.cpp +++ b/thirdparty/msdfgen/core/MSDFErrorCorrection.cpp @@ -19,8 +19,8 @@ namespace msdfgen { #define CLASSIFIER_FLAG_CANDIDATE 0x01 #define CLASSIFIER_FLAG_ARTIFACT 0x02 -const double ErrorCorrectionConfig::defaultMinDeviationRatio = 1.11111111111111111; -const double ErrorCorrectionConfig::defaultMinImproveRatio = 1.11111111111111111; +MSDFGEN_PUBLIC const double ErrorCorrectionConfig::defaultMinDeviationRatio = 1.11111111111111111; +MSDFGEN_PUBLIC const double ErrorCorrectionConfig::defaultMinImproveRatio = 1.11111111111111111; /// The base artifact classifier recognizes artifacts based on the contents of the SDF alone. class BaseArtifactClassifier { @@ -317,7 +317,7 @@ static bool hasDiagonalArtifactInner(const ArtifactClassifier &artifactClassifie em[0] = am, em[1] = dm; tEnd[tEx0 > t[i]] = tEx0; em[tEx0 > t[i]] = interpolatedMedian(a, l, q, tEx0); - rangeFlags |= artifactClassifier.rangeTest(tEnd[0], tEnd[1], t[i], am, dm, xm); + rangeFlags |= artifactClassifier.rangeTest(tEnd[0], tEnd[1], t[i], em[0], em[1], xm); } // tEx1 if (tEx1 > 0 && tEx1 < 1) { @@ -325,7 +325,7 @@ static bool hasDiagonalArtifactInner(const ArtifactClassifier &artifactClassifie em[0] = am, em[1] = dm; tEnd[tEx1 > t[i]] = tEx1; em[tEx1 > t[i]] = interpolatedMedian(a, l, q, tEx1); - rangeFlags |= artifactClassifier.rangeTest(tEnd[0], tEnd[1], t[i], am, dm, xm); + rangeFlags |= artifactClassifier.rangeTest(tEnd[0], tEnd[1], t[i], em[0], em[1], xm); } if (artifactClassifier.evaluate(t[i], xm, rangeFlags)) return true; diff --git a/thirdparty/msdfgen/core/Projection.h b/thirdparty/msdfgen/core/Projection.h index 7cdb1c307a..3c457776ac 100644 --- a/thirdparty/msdfgen/core/Projection.h +++ b/thirdparty/msdfgen/core/Projection.h @@ -1,7 +1,7 @@ #pragma once -#include "Vector2.h" +#include "Vector2.hpp" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/Scanline.cpp b/thirdparty/msdfgen/core/Scanline.cpp index 8e5352dbf6..7407be41b5 100644 --- a/thirdparty/msdfgen/core/Scanline.cpp +++ b/thirdparty/msdfgen/core/Scanline.cpp @@ -1,7 +1,7 @@ #include "Scanline.h" -#include +#include #include "arithmetics.hpp" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/Scanline.h b/thirdparty/msdfgen/core/Scanline.h index 9c8f34044b..c0abc68642 100644 --- a/thirdparty/msdfgen/core/Scanline.h +++ b/thirdparty/msdfgen/core/Scanline.h @@ -2,6 +2,7 @@ #pragma once #include +#include "base.h" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/Shape.cpp b/thirdparty/msdfgen/core/Shape.cpp index 8d6f47c807..cf99bd0f0c 100644 --- a/thirdparty/msdfgen/core/Shape.cpp +++ b/thirdparty/msdfgen/core/Shape.cpp @@ -1,7 +1,7 @@ #include "Shape.h" -#include +#include #include "arithmetics.hpp" namespace msdfgen { @@ -18,7 +18,7 @@ void Shape::addContour(Contour &&contour) { } #endif -Contour & Shape::addContour() { +Contour &Shape::addContour() { contours.resize(contours.size()+1); return contours.back(); } @@ -40,15 +40,12 @@ bool Shape::validate() const { } static void deconvergeEdge(EdgeHolder &edgeHolder, int param) { - { - const QuadraticSegment *quadraticSegment = dynamic_cast(&*edgeHolder); - if (quadraticSegment) - edgeHolder = quadraticSegment->convertToCubic(); - } - { - CubicSegment *cubicSegment = dynamic_cast(&*edgeHolder); - if (cubicSegment) - cubicSegment->deconverge(param, MSDFGEN_DECONVERGENCE_FACTOR); + switch (edgeHolder->type()) { + case (int) QuadraticSegment::EDGE_TYPE: + edgeHolder = static_cast(&*edgeHolder)->convertToCubic(); + // fallthrough + case (int) CubicSegment::EDGE_TYPE: + static_cast(&*edgeHolder)->deconverge(param, MSDFGEN_DECONVERGENCE_FACTOR); } } @@ -162,16 +159,18 @@ void Shape::orientContours() { } } } - qsort(&intersections[0], intersections.size(), sizeof(Intersection), &Intersection::compare); - // Disqualify multiple intersections - for (int j = 1; j < (int) intersections.size(); ++j) - if (intersections[j].x == intersections[j-1].x) - intersections[j].direction = intersections[j-1].direction = 0; - // Inspect scanline and deduce orientations of intersected contours - for (int j = 0; j < (int) intersections.size(); ++j) - if (intersections[j].direction) - orientations[intersections[j].contourIndex] += 2*((j&1)^(intersections[j].direction > 0))-1; - intersections.clear(); + if (!intersections.empty()) { + qsort(&intersections[0], intersections.size(), sizeof(Intersection), &Intersection::compare); + // Disqualify multiple intersections + for (int j = 1; j < (int) intersections.size(); ++j) + if (intersections[j].x == intersections[j-1].x) + intersections[j].direction = intersections[j-1].direction = 0; + // Inspect scanline and deduce orientations of intersected contours + for (int j = 0; j < (int) intersections.size(); ++j) + if (intersections[j].direction) + orientations[intersections[j].contourIndex] += 2*((j&1)^(intersections[j].direction > 0))-1; + intersections.clear(); + } } } // Reverse contours that have the opposite orientation diff --git a/thirdparty/msdfgen/core/Shape.h b/thirdparty/msdfgen/core/Shape.h index 7539921ce7..fd9222dbc4 100644 --- a/thirdparty/msdfgen/core/Shape.h +++ b/thirdparty/msdfgen/core/Shape.h @@ -32,7 +32,7 @@ public: void addContour(Contour &&contour); #endif /// Adds a blank contour and returns its reference. - Contour & addContour(); + Contour &addContour(); /// Normalizes the shape geometry for distance field generation. void normalize(); /// Performs basic checks to determine if the object represents a valid shape. diff --git a/thirdparty/msdfgen/core/ShapeDistanceFinder.h b/thirdparty/msdfgen/core/ShapeDistanceFinder.h index 57df8d8e72..d8a584f645 100644 --- a/thirdparty/msdfgen/core/ShapeDistanceFinder.h +++ b/thirdparty/msdfgen/core/ShapeDistanceFinder.h @@ -2,7 +2,7 @@ #pragma once #include -#include "Vector2.h" +#include "Vector2.hpp" #include "edge-selectors.h" #include "contour-combiners.h" diff --git a/thirdparty/msdfgen/core/ShapeDistanceFinder.hpp b/thirdparty/msdfgen/core/ShapeDistanceFinder.hpp index 028738e5c3..07fb5cdc0e 100644 --- a/thirdparty/msdfgen/core/ShapeDistanceFinder.hpp +++ b/thirdparty/msdfgen/core/ShapeDistanceFinder.hpp @@ -9,7 +9,11 @@ ShapeDistanceFinder::ShapeDistanceFinder(const Shape &shape) : template typename ShapeDistanceFinder::DistanceType ShapeDistanceFinder::distance(const Point2 &origin) { contourCombiner.reset(origin); - typename ContourCombiner::EdgeSelectorType::EdgeCache *edgeCache = &shapeEdgeCache[0]; +#ifdef MSDFGEN_USE_CPP11 + typename ContourCombiner::EdgeSelectorType::EdgeCache *edgeCache = shapeEdgeCache.data(); +#else + typename ContourCombiner::EdgeSelectorType::EdgeCache *edgeCache = shapeEdgeCache.empty() ? NULL : &shapeEdgeCache[0]; +#endif for (std::vector::const_iterator contour = shape.contours.begin(); contour != shape.contours.end(); ++contour) { if (!contour->edges.empty()) { diff --git a/thirdparty/msdfgen/core/SignedDistance.cpp b/thirdparty/msdfgen/core/SignedDistance.cpp deleted file mode 100644 index be956d953e..0000000000 --- a/thirdparty/msdfgen/core/SignedDistance.cpp +++ /dev/null @@ -1,29 +0,0 @@ - -#include "SignedDistance.h" - -#include -#include - -namespace msdfgen { - -SignedDistance::SignedDistance() : distance(-DBL_MAX), dot(1) { } - -SignedDistance::SignedDistance(double dist, double d) : distance(dist), dot(d) { } - -bool operator<(SignedDistance a, SignedDistance b) { - return fabs(a.distance) < fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot < b.dot); -} - -bool operator>(SignedDistance a, SignedDistance b) { - return fabs(a.distance) > fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot > b.dot); -} - -bool operator<=(SignedDistance a, SignedDistance b) { - return fabs(a.distance) < fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot <= b.dot); -} - -bool operator>=(SignedDistance a, SignedDistance b) { - return fabs(a.distance) > fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot >= b.dot); -} - -} diff --git a/thirdparty/msdfgen/core/SignedDistance.h b/thirdparty/msdfgen/core/SignedDistance.h deleted file mode 100644 index 91fee97600..0000000000 --- a/thirdparty/msdfgen/core/SignedDistance.h +++ /dev/null @@ -1,23 +0,0 @@ - -#pragma once - -namespace msdfgen { - -/// Represents a signed distance and alignment, which together can be compared to uniquely determine the closest edge segment. -class SignedDistance { - -public: - double distance; - double dot; - - SignedDistance(); - SignedDistance(double dist, double d); - - friend bool operator<(SignedDistance a, SignedDistance b); - friend bool operator>(SignedDistance a, SignedDistance b); - friend bool operator<=(SignedDistance a, SignedDistance b); - friend bool operator>=(SignedDistance a, SignedDistance b); - -}; - -} diff --git a/thirdparty/msdfgen/core/SignedDistance.hpp b/thirdparty/msdfgen/core/SignedDistance.hpp new file mode 100644 index 0000000000..62e73c03aa --- /dev/null +++ b/thirdparty/msdfgen/core/SignedDistance.hpp @@ -0,0 +1,38 @@ + +#pragma once + +#include +#include +#include "base.h" + +namespace msdfgen { + +/// Represents a signed distance and alignment, which together can be compared to uniquely determine the closest edge segment. +class SignedDistance { + +public: + double distance; + double dot; + + inline SignedDistance() : distance(-DBL_MAX), dot(0) { } + inline SignedDistance(double dist, double d) : distance(dist), dot(d) { } + +}; + +inline bool operator<(const SignedDistance a, const SignedDistance b) { + return fabs(a.distance) < fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot < b.dot); +} + +inline bool operator>(const SignedDistance a, const SignedDistance b) { + return fabs(a.distance) > fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot > b.dot); +} + +inline bool operator<=(const SignedDistance a, const SignedDistance b) { + return fabs(a.distance) < fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot <= b.dot); +} + +inline bool operator>=(const SignedDistance a, const SignedDistance b) { + return fabs(a.distance) > fabs(b.distance) || (fabs(a.distance) == fabs(b.distance) && a.dot >= b.dot); +} + +} diff --git a/thirdparty/msdfgen/core/Vector2.cpp b/thirdparty/msdfgen/core/Vector2.cpp deleted file mode 100644 index 896963ff2c..0000000000 --- a/thirdparty/msdfgen/core/Vector2.cpp +++ /dev/null @@ -1,146 +0,0 @@ - -#include "Vector2.h" - -namespace msdfgen { - -Vector2::Vector2(double val) : x(val), y(val) { } - -Vector2::Vector2(double x, double y) : x(x), y(y) { } - -void Vector2::reset() { - x = 0, y = 0; -} - -void Vector2::set(double x, double y) { - Vector2::x = x, Vector2::y = y; -} - -double Vector2::length() const { - return sqrt(x*x+y*y); -} - -double Vector2::direction() const { - return atan2(y, x); -} - -Vector2 Vector2::normalize(bool allowZero) const { - double len = length(); - if (len == 0) - return Vector2(0, !allowZero); - return Vector2(x/len, y/len); -} - -Vector2 Vector2::getOrthogonal(bool polarity) const { - return polarity ? Vector2(-y, x) : Vector2(y, -x); -} - -Vector2 Vector2::getOrthonormal(bool polarity, bool allowZero) const { - double len = length(); - if (len == 0) - return polarity ? Vector2(0, !allowZero) : Vector2(0, -!allowZero); - return polarity ? Vector2(-y/len, x/len) : Vector2(y/len, -x/len); -} - -Vector2 Vector2::project(const Vector2 &vector, bool positive) const { - Vector2 n = normalize(true); - double t = dotProduct(vector, n); - if (positive && t <= 0) - return Vector2(); - return t*n; -} - -Vector2::operator const void*() const { - return x || y ? this : NULL; -} - -bool Vector2::operator!() const { - return !x && !y; -} - -bool Vector2::operator==(const Vector2 &other) const { - return x == other.x && y == other.y; -} - -bool Vector2::operator!=(const Vector2 &other) const { - return x != other.x || y != other.y; -} - -Vector2 Vector2::operator+() const { - return *this; -} - -Vector2 Vector2::operator-() const { - return Vector2(-x, -y); -} - -Vector2 Vector2::operator+(const Vector2 &other) const { - return Vector2(x+other.x, y+other.y); -} - -Vector2 Vector2::operator-(const Vector2 &other) const { - return Vector2(x-other.x, y-other.y); -} - -Vector2 Vector2::operator*(const Vector2 &other) const { - return Vector2(x*other.x, y*other.y); -} - -Vector2 Vector2::operator/(const Vector2 &other) const { - return Vector2(x/other.x, y/other.y); -} - -Vector2 Vector2::operator*(double value) const { - return Vector2(x*value, y*value); -} - -Vector2 Vector2::operator/(double value) const { - return Vector2(x/value, y/value); -} - -Vector2 & Vector2::operator+=(const Vector2 &other) { - x += other.x, y += other.y; - return *this; -} - -Vector2 & Vector2::operator-=(const Vector2 &other) { - x -= other.x, y -= other.y; - return *this; -} - -Vector2 & Vector2::operator*=(const Vector2 &other) { - x *= other.x, y *= other.y; - return *this; -} - -Vector2 & Vector2::operator/=(const Vector2 &other) { - x /= other.x, y /= other.y; - return *this; -} - -Vector2 & Vector2::operator*=(double value) { - x *= value, y *= value; - return *this; -} - -Vector2 & Vector2::operator/=(double value) { - x /= value, y /= value; - return *this; -} - -double dotProduct(const Vector2 &a, const Vector2 &b) { - return a.x*b.x+a.y*b.y; -} - -double crossProduct(const Vector2 &a, const Vector2 &b) { - return a.x*b.y-a.y*b.x; -} - -Vector2 operator*(double value, const Vector2 &vector) { - return Vector2(value*vector.x, value*vector.y); -} - -Vector2 operator/(double value, const Vector2 &vector) { - return Vector2(value/vector.x, value/vector.y); -} - -} diff --git a/thirdparty/msdfgen/core/Vector2.h b/thirdparty/msdfgen/core/Vector2.h deleted file mode 100644 index 47ca637c3d..0000000000 --- a/thirdparty/msdfgen/core/Vector2.h +++ /dev/null @@ -1,66 +0,0 @@ - -#pragma once - -#include -#include - -namespace msdfgen { - -/** -* A 2-dimensional euclidean vector with double precision. -* Implementation based on the Vector2 template from Artery Engine. -* @author Viktor Chlumsky -*/ -struct Vector2 { - - double x, y; - - Vector2(double val = 0); - Vector2(double x, double y); - /// Sets the vector to zero. - void reset(); - /// Sets individual elements of the vector. - void set(double x, double y); - /// Returns the vector's length. - double length() const; - /// Returns the angle of the vector in radians (atan2). - double direction() const; - /// Returns the normalized vector - one that has the same direction but unit length. - Vector2 normalize(bool allowZero = false) const; - /// Returns a vector with the same length that is orthogonal to this one. - Vector2 getOrthogonal(bool polarity = true) const; - /// Returns a vector with unit length that is orthogonal to this one. - Vector2 getOrthonormal(bool polarity = true, bool allowZero = false) const; - /// Returns a vector projected along this one. - Vector2 project(const Vector2 &vector, bool positive = false) const; - operator const void *() const; - bool operator!() const; - bool operator==(const Vector2 &other) const; - bool operator!=(const Vector2 &other) const; - Vector2 operator+() const; - Vector2 operator-() const; - Vector2 operator+(const Vector2 &other) const; - Vector2 operator-(const Vector2 &other) const; - Vector2 operator*(const Vector2 &other) const; - Vector2 operator/(const Vector2 &other) const; - Vector2 operator*(double value) const; - Vector2 operator/(double value) const; - Vector2 & operator+=(const Vector2 &other); - Vector2 & operator-=(const Vector2 &other); - Vector2 & operator*=(const Vector2 &other); - Vector2 & operator/=(const Vector2 &other); - Vector2 & operator*=(double value); - Vector2 & operator/=(double value); - /// Dot product of two vectors. - friend double dotProduct(const Vector2 &a, const Vector2 &b); - /// A special version of the cross product for 2D vectors (returns scalar value). - friend double crossProduct(const Vector2 &a, const Vector2 &b); - friend Vector2 operator*(double value, const Vector2 &vector); - friend Vector2 operator/(double value, const Vector2 &vector); - -}; - -/// A vector may also represent a point, which shall be differentiated semantically using the alias Point2. -typedef Vector2 Point2; - -} diff --git a/thirdparty/msdfgen/core/Vector2.hpp b/thirdparty/msdfgen/core/Vector2.hpp new file mode 100644 index 0000000000..0208c61497 --- /dev/null +++ b/thirdparty/msdfgen/core/Vector2.hpp @@ -0,0 +1,167 @@ + +#pragma once + +#include +#include "base.h" + +namespace msdfgen { + +/** + * A 2-dimensional euclidean floating-point vector. + * @author Viktor Chlumsky + */ +struct Vector2 { + + double x, y; + + inline Vector2(double val = 0) : x(val), y(val) { } + + inline Vector2(double x, double y) : x(x), y(y) { } + + /// Sets the vector to zero. + inline void reset() { + x = 0, y = 0; + } + + /// Sets individual elements of the vector. + inline void set(double x, double y) { + this->x = x, this->y = y; + } + + /// Returns the vector's squared length. + inline double squaredLength() const { + return x*x+y*y; + } + + /// Returns the vector's length. + inline double length() const { + return sqrt(x*x+y*y); + } + + /// Returns the normalized vector - one that has the same direction but unit length. + inline Vector2 normalize(bool allowZero = false) const { + if (double len = length()) + return Vector2(x/len, y/len); + return Vector2(0, !allowZero); + } + + /// Returns a vector with the same length that is orthogonal to this one. + inline Vector2 getOrthogonal(bool polarity = true) const { + return polarity ? Vector2(-y, x) : Vector2(y, -x); + } + + /// Returns a vector with unit length that is orthogonal to this one. + inline Vector2 getOrthonormal(bool polarity = true, bool allowZero = false) const { + if (double len = length()) + return polarity ? Vector2(-y/len, x/len) : Vector2(y/len, -x/len); + return polarity ? Vector2(0, !allowZero) : Vector2(0, -!allowZero); + } + +#ifdef MSDFGEN_USE_CPP11 + inline explicit operator bool() const { + return x || y; + } +#else + inline operator const void *() const { + return x || y ? this : NULL; + } +#endif + + inline Vector2 &operator+=(const Vector2 other) { + x += other.x, y += other.y; + return *this; + } + + inline Vector2 &operator-=(const Vector2 other) { + x -= other.x, y -= other.y; + return *this; + } + + inline Vector2 &operator*=(const Vector2 other) { + x *= other.x, y *= other.y; + return *this; + } + + inline Vector2 &operator/=(const Vector2 other) { + x /= other.x, y /= other.y; + return *this; + } + + inline Vector2 &operator*=(double value) { + x *= value, y *= value; + return *this; + } + + inline Vector2 &operator/=(double value) { + x /= value, y /= value; + return *this; + } + +}; + +/// A vector may also represent a point, which shall be differentiated semantically using the alias Point2. +typedef Vector2 Point2; + +/// Dot product of two vectors. +inline double dotProduct(const Vector2 a, const Vector2 b) { + return a.x*b.x+a.y*b.y; +} + +/// A special version of the cross product for 2D vectors (returns scalar value). +inline double crossProduct(const Vector2 a, const Vector2 b) { + return a.x*b.y-a.y*b.x; +} + +inline bool operator==(const Vector2 a, const Vector2 b) { + return a.x == b.x && a.y == b.y; +} + +inline bool operator!=(const Vector2 a, const Vector2 b) { + return a.x != b.x || a.y != b.y; +} + +inline Vector2 operator+(const Vector2 v) { + return v; +} + +inline Vector2 operator-(const Vector2 v) { + return Vector2(-v.x, -v.y); +} + +inline bool operator!(const Vector2 v) { + return !v.x && !v.y; +} + +inline Vector2 operator+(const Vector2 a, const Vector2 b) { + return Vector2(a.x+b.x, a.y+b.y); +} + +inline Vector2 operator-(const Vector2 a, const Vector2 b) { + return Vector2(a.x-b.x, a.y-b.y); +} + +inline Vector2 operator*(const Vector2 a, const Vector2 b) { + return Vector2(a.x*b.x, a.y*b.y); +} + +inline Vector2 operator/(const Vector2 a, const Vector2 b) { + return Vector2(a.x/b.x, a.y/b.y); +} + +inline Vector2 operator*(double a, const Vector2 b) { + return Vector2(a*b.x, a*b.y); +} + +inline Vector2 operator/(double a, const Vector2 b) { + return Vector2(a/b.x, a/b.y); +} + +inline Vector2 operator*(const Vector2 a, double b) { + return Vector2(a.x*b, a.y*b); +} + +inline Vector2 operator/(const Vector2 a, double b) { + return Vector2(a.x/b, a.y/b); +} + +} diff --git a/thirdparty/msdfgen/core/arithmetics.hpp b/thirdparty/msdfgen/core/arithmetics.hpp index 78c21d658e..d5158ad0d3 100644 --- a/thirdparty/msdfgen/core/arithmetics.hpp +++ b/thirdparty/msdfgen/core/arithmetics.hpp @@ -1,8 +1,8 @@ #pragma once -#include #include +#include "base.h" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/base.h b/thirdparty/msdfgen/core/base.h new file mode 100644 index 0000000000..ab85c136e1 --- /dev/null +++ b/thirdparty/msdfgen/core/base.h @@ -0,0 +1,16 @@ + +#pragma once + +// This file needs to be included first for all MSDFgen sources + +#ifndef MSDFGEN_PUBLIC +#include +#endif + +#include + +namespace msdfgen { + +typedef unsigned char byte; + +} diff --git a/thirdparty/msdfgen/core/bitmap-interpolation.hpp b/thirdparty/msdfgen/core/bitmap-interpolation.hpp index a14b0fb534..ca2e48c080 100644 --- a/thirdparty/msdfgen/core/bitmap-interpolation.hpp +++ b/thirdparty/msdfgen/core/bitmap-interpolation.hpp @@ -2,7 +2,7 @@ #pragma once #include "arithmetics.hpp" -#include "Vector2.h" +#include "Vector2.hpp" #include "BitmapRef.hpp" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/contour-combiners.cpp b/thirdparty/msdfgen/core/contour-combiners.cpp index 31f4c5da71..bac5534810 100644 --- a/thirdparty/msdfgen/core/contour-combiners.cpp +++ b/thirdparty/msdfgen/core/contour-combiners.cpp @@ -33,7 +33,7 @@ void SimpleContourCombiner::reset(const Point2 &p) { } template -EdgeSelector & SimpleContourCombiner::edgeSelector(int) { +EdgeSelector &SimpleContourCombiner::edgeSelector(int) { return shapeEdgeSelector; } @@ -63,7 +63,7 @@ void OverlappingContourCombiner::reset(const Point2 &p) { } template -EdgeSelector & OverlappingContourCombiner::edgeSelector(int i) { +EdgeSelector &OverlappingContourCombiner::edgeSelector(int i) { return edgeSelectors[i]; } diff --git a/thirdparty/msdfgen/core/contour-combiners.h b/thirdparty/msdfgen/core/contour-combiners.h index 944b119aba..04dbc34230 100644 --- a/thirdparty/msdfgen/core/contour-combiners.h +++ b/thirdparty/msdfgen/core/contour-combiners.h @@ -16,7 +16,7 @@ public: explicit SimpleContourCombiner(const Shape &shape); void reset(const Point2 &p); - EdgeSelector & edgeSelector(int i); + EdgeSelector &edgeSelector(int i); DistanceType distance() const; private: @@ -34,7 +34,7 @@ public: explicit OverlappingContourCombiner(const Shape &shape); void reset(const Point2 &p); - EdgeSelector & edgeSelector(int i); + EdgeSelector &edgeSelector(int i); DistanceType distance() const; private: diff --git a/thirdparty/msdfgen/core/edge-coloring.cpp b/thirdparty/msdfgen/core/edge-coloring.cpp index 6a87bba54d..da9b037735 100644 --- a/thirdparty/msdfgen/core/edge-coloring.cpp +++ b/thirdparty/msdfgen/core/edge-coloring.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "arithmetics.hpp" @@ -244,7 +245,7 @@ static double edgeToEdgeDistance(const EdgeSegment &a, const EdgeSegment &b, int return minDistance; } -static double splineToSplineDistance(EdgeSegment * const *edgeSegments, int aStart, int aEnd, int bStart, int bEnd, int precision) { +static double splineToSplineDistance(EdgeSegment *const *edgeSegments, int aStart, int aEnd, int bStart, int bEnd, int precision) { double minDistance = DBL_MAX; for (int ai = aStart; ai < aEnd; ++ai) for (int bi = bStart; bi < bEnd && minDistance; ++bi) { @@ -254,7 +255,7 @@ static double splineToSplineDistance(EdgeSegment * const *edgeSegments, int aSta return minDistance; } -static void colorSecondDegreeGraph(int *coloring, const int * const *edgeMatrix, int vertexCount, unsigned long long seed) { +static void colorSecondDegreeGraph(int *coloring, const int *const *edgeMatrix, int vertexCount, unsigned long long seed) { for (int i = 0; i < vertexCount; ++i) { int possibleColors = 7; for (int j = 0; j < i; ++j) { @@ -301,7 +302,7 @@ static int vertexPossibleColors(const int *coloring, const int *edgeVector, int return 7&~usedColors; } -static void uncolorSameNeighbors(std::queue &uncolored, int *coloring, const int * const *edgeMatrix, int vertex, int vertexCount) { +static void uncolorSameNeighbors(std::queue &uncolored, int *coloring, const int *const *edgeMatrix, int vertex, int vertexCount) { for (int i = vertex+1; i < vertexCount; ++i) { if (edgeMatrix[vertex][i] && coloring[i] == coloring[vertex]) { coloring[i] = -1; @@ -316,7 +317,7 @@ static void uncolorSameNeighbors(std::queue &uncolored, int *coloring, cons } } -static bool tryAddEdge(int *coloring, int * const *edgeMatrix, int vertexCount, int vertexA, int vertexB, int *coloringBuffer) { +static bool tryAddEdge(int *coloring, int *const *edgeMatrix, int vertexCount, int vertexA, int vertexB, int *coloringBuffer) { static const int FIRST_POSSIBLE_COLOR[8] = { -1, 0, 1, 0, 2, 2, 1, 0 }; edgeMatrix[vertexA][vertexB] = 1; edgeMatrix[vertexB][vertexA] = 1; @@ -358,7 +359,7 @@ static bool tryAddEdge(int *coloring, int * const *edgeMatrix, int vertexCount, } static int cmpDoublePtr(const void *a, const void *b) { - return sign(**reinterpret_cast(a)-**reinterpret_cast(b)); + return sign(**reinterpret_cast(a)-**reinterpret_cast(b)); } void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long long seed) { diff --git a/thirdparty/msdfgen/core/edge-segments.cpp b/thirdparty/msdfgen/core/edge-segments.cpp index 5274a9a5a1..4fef89b95b 100644 --- a/thirdparty/msdfgen/core/edge-segments.cpp +++ b/thirdparty/msdfgen/core/edge-segments.cpp @@ -56,18 +56,42 @@ CubicSegment::CubicSegment(Point2 p0, Point2 p1, Point2 p2, Point2 p3, EdgeColor p[3] = p3; } -LinearSegment * LinearSegment::clone() const { +LinearSegment *LinearSegment::clone() const { return new LinearSegment(p[0], p[1], color); } -QuadraticSegment * QuadraticSegment::clone() const { +QuadraticSegment *QuadraticSegment::clone() const { return new QuadraticSegment(p[0], p[1], p[2], color); } -CubicSegment * CubicSegment::clone() const { +CubicSegment *CubicSegment::clone() const { return new CubicSegment(p[0], p[1], p[2], p[3], color); } +int LinearSegment::type() const { + return (int) EDGE_TYPE; +} + +int QuadraticSegment::type() const { + return (int) EDGE_TYPE; +} + +int CubicSegment::type() const { + return (int) EDGE_TYPE; +} + +const Point2 *LinearSegment::controlPoints() const { + return p; +} + +const Point2 *QuadraticSegment::controlPoints() const { + return p; +} + +const Point2 *CubicSegment::controlPoints() const { + return p; +} + Point2 LinearSegment::point(double param) const { return mix(p[0], p[1], param); } @@ -483,7 +507,7 @@ void CubicSegment::splitInThirds(EdgeSegment *&part1, EdgeSegment *&part2, EdgeS part3 = new CubicSegment(point(2/3.), mix(mix(p[1], p[2], 2/3.), mix(p[2], p[3], 2/3.), 2/3.), p[2] == p[3] ? p[3] : mix(p[2], p[3], 2/3.), p[3], color); } -EdgeSegment * QuadraticSegment::convertToCubic() const { +EdgeSegment *QuadraticSegment::convertToCubic() const { return new CubicSegment(p[0], mix(p[0], p[1], 2/3.), mix(p[1], p[2], 1/3.), p[2], color); } diff --git a/thirdparty/msdfgen/core/edge-segments.h b/thirdparty/msdfgen/core/edge-segments.h index 1c8fb599ff..71ce8fc4ab 100644 --- a/thirdparty/msdfgen/core/edge-segments.h +++ b/thirdparty/msdfgen/core/edge-segments.h @@ -1,8 +1,8 @@ #pragma once -#include "Vector2.h" -#include "SignedDistance.h" +#include "Vector2.hpp" +#include "SignedDistance.hpp" #include "EdgeColor.h" namespace msdfgen { @@ -20,7 +20,11 @@ public: EdgeSegment(EdgeColor edgeColor = WHITE) : color(edgeColor) { } virtual ~EdgeSegment() { } /// Creates a copy of the edge segment. - virtual EdgeSegment * clone() const = 0; + virtual EdgeSegment *clone() const = 0; + /// Returns the numeric code of the edge segment's type. + virtual int type() const = 0; + /// Returns the array of control points. + virtual const Point2 *controlPoints() const = 0; /// Returns the point on the edge specified by the parameter (between 0 and 1). virtual Point2 point(double param) const = 0; /// Returns the direction the edge has at the point specified by the parameter. @@ -51,10 +55,16 @@ public: class LinearSegment : public EdgeSegment { public: + enum EdgeType { + EDGE_TYPE = 1 + }; + Point2 p[2]; LinearSegment(Point2 p0, Point2 p1, EdgeColor edgeColor = WHITE); - LinearSegment * clone() const; + LinearSegment *clone() const; + int type() const; + const Point2 *controlPoints() const; Point2 point(double param) const; Vector2 direction(double param) const; Vector2 directionChange(double param) const; @@ -74,10 +84,16 @@ public: class QuadraticSegment : public EdgeSegment { public: + enum EdgeType { + EDGE_TYPE = 2 + }; + Point2 p[3]; QuadraticSegment(Point2 p0, Point2 p1, Point2 p2, EdgeColor edgeColor = WHITE); - QuadraticSegment * clone() const; + QuadraticSegment *clone() const; + int type() const; + const Point2 *controlPoints() const; Point2 point(double param) const; Vector2 direction(double param) const; Vector2 directionChange(double param) const; @@ -91,7 +107,7 @@ public: void moveEndPoint(Point2 to); void splitInThirds(EdgeSegment *&part1, EdgeSegment *&part2, EdgeSegment *&part3) const; - EdgeSegment * convertToCubic() const; + EdgeSegment *convertToCubic() const; }; @@ -99,10 +115,16 @@ public: class CubicSegment : public EdgeSegment { public: + enum EdgeType { + EDGE_TYPE = 3 + }; + Point2 p[4]; CubicSegment(Point2 p0, Point2 p1, Point2 p2, Point2 p3, EdgeColor edgeColor = WHITE); - CubicSegment * clone() const; + CubicSegment *clone() const; + int type() const; + const Point2 *controlPoints() const; Point2 point(double param) const; Vector2 direction(double param) const; Vector2 directionChange(double param) const; diff --git a/thirdparty/msdfgen/core/edge-selectors.h b/thirdparty/msdfgen/core/edge-selectors.h index 3620999f82..6b8e2d943f 100644 --- a/thirdparty/msdfgen/core/edge-selectors.h +++ b/thirdparty/msdfgen/core/edge-selectors.h @@ -1,8 +1,8 @@ #pragma once -#include "Vector2.h" -#include "SignedDistance.h" +#include "Vector2.hpp" +#include "SignedDistance.hpp" #include "edge-segments.h" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/equation-solver.cpp b/thirdparty/msdfgen/core/equation-solver.cpp index 4144fa3340..7c1cbb39f8 100644 --- a/thirdparty/msdfgen/core/equation-solver.cpp +++ b/thirdparty/msdfgen/core/equation-solver.cpp @@ -49,7 +49,7 @@ static int solveCubicNormed(double x[3], double a, double b, double c) { x[2] = q*cos(1/3.*(t-2*M_PI))-a; return 3; } else { - double u = (r < 0 ? 1 : -1)*pow(fabs(r)+sqrt(r2-q3), 1/3.); + double u = (r < 0 ? 1 : -1)*pow(fabs(r)+sqrt(r2-q3), 1/3.); double v = u == 0 ? 0 : q/u; x[0] = (u+v)-a; if (u == v || fabs(u-v) < 1e-12*fabs(u+v)) { diff --git a/thirdparty/msdfgen/core/equation-solver.h b/thirdparty/msdfgen/core/equation-solver.h index bae097b2b9..bfeeb15823 100644 --- a/thirdparty/msdfgen/core/equation-solver.h +++ b/thirdparty/msdfgen/core/equation-solver.h @@ -1,6 +1,8 @@ #pragma once +#include "base.h" + namespace msdfgen { // ax^2 + bx + c = 0 diff --git a/thirdparty/msdfgen/core/generator-config.h b/thirdparty/msdfgen/core/generator-config.h index b430d37f3c..b7b153477f 100644 --- a/thirdparty/msdfgen/core/generator-config.h +++ b/thirdparty/msdfgen/core/generator-config.h @@ -1,7 +1,6 @@ #pragma once -#include #include "BitmapRef.hpp" #ifndef MSDFGEN_PUBLIC diff --git a/thirdparty/msdfgen/core/msdf-error-correction.h b/thirdparty/msdfgen/core/msdf-error-correction.h index d5384c9329..6318f184bb 100644 --- a/thirdparty/msdfgen/core/msdf-error-correction.h +++ b/thirdparty/msdfgen/core/msdf-error-correction.h @@ -1,7 +1,7 @@ #pragma once -#include "Vector2.h" +#include "Vector2.hpp" #include "Projection.h" #include "Shape.h" #include "BitmapRef.hpp" diff --git a/thirdparty/msdfgen/core/pixel-conversion.hpp b/thirdparty/msdfgen/core/pixel-conversion.hpp index 7e9b6d08f0..3ef8a2d1da 100644 --- a/thirdparty/msdfgen/core/pixel-conversion.hpp +++ b/thirdparty/msdfgen/core/pixel-conversion.hpp @@ -5,8 +5,6 @@ namespace msdfgen { -typedef unsigned char byte; - inline byte pixelFloatToByte(float x) { return byte(clamp(256.f*x, 255.f)); } diff --git a/thirdparty/msdfgen/core/rasterization.h b/thirdparty/msdfgen/core/rasterization.h index 82d0c73d95..8ba41cd645 100644 --- a/thirdparty/msdfgen/core/rasterization.h +++ b/thirdparty/msdfgen/core/rasterization.h @@ -1,7 +1,7 @@ #pragma once -#include "Vector2.h" +#include "Vector2.hpp" #include "Shape.h" #include "Projection.h" #include "Scanline.h" diff --git a/thirdparty/msdfgen/core/render-sdf.h b/thirdparty/msdfgen/core/render-sdf.h index 7f2d270b67..0fa695acf6 100644 --- a/thirdparty/msdfgen/core/render-sdf.h +++ b/thirdparty/msdfgen/core/render-sdf.h @@ -1,7 +1,7 @@ #pragma once -#include "Vector2.h" +#include "Vector2.hpp" #include "BitmapRef.hpp" namespace msdfgen { diff --git a/thirdparty/msdfgen/core/sdf-error-estimation.h b/thirdparty/msdfgen/core/sdf-error-estimation.h index d2fd40d2b8..f9008222ab 100644 --- a/thirdparty/msdfgen/core/sdf-error-estimation.h +++ b/thirdparty/msdfgen/core/sdf-error-estimation.h @@ -1,7 +1,7 @@ #pragma once -#include "Vector2.h" +#include "Vector2.hpp" #include "Shape.h" #include "Projection.h" #include "Scanline.h" diff --git a/thirdparty/msdfgen/core/shape-description.cpp b/thirdparty/msdfgen/core/shape-description.cpp index a096fa2541..32c515d120 100644 --- a/thirdparty/msdfgen/core/shape-description.cpp +++ b/thirdparty/msdfgen/core/shape-description.cpp @@ -244,34 +244,37 @@ bool writeShapeDescription(FILE *output, const Shape &shape) { default:; } } - if (const LinearSegment *e = dynamic_cast(&**edge)) { - fprintf(output, "\t"); - writeCoord(output, e->p[0]); - fprintf(output, ";\n"); - if (colorCode) - fprintf(output, "\t\t%c;\n", colorCode); - } - if (const QuadraticSegment *e = dynamic_cast(&**edge)) { - fprintf(output, "\t"); - writeCoord(output, e->p[0]); - fprintf(output, ";\n\t\t"); - if (colorCode) - fprintf(output, "%c", colorCode); - fprintf(output, "("); - writeCoord(output, e->p[1]); - fprintf(output, ");\n"); - } - if (const CubicSegment *e = dynamic_cast(&**edge)) { - fprintf(output, "\t"); - writeCoord(output, e->p[0]); - fprintf(output, ";\n\t\t"); - if (colorCode) - fprintf(output, "%c", colorCode); - fprintf(output, "("); - writeCoord(output, e->p[1]); - fprintf(output, "; "); - writeCoord(output, e->p[2]); - fprintf(output, ");\n"); + const Point2 *p = (*edge)->controlPoints(); + switch ((*edge)->type()) { + case (int) LinearSegment::EDGE_TYPE: + fprintf(output, "\t"); + writeCoord(output, p[0]); + fprintf(output, ";\n"); + if (colorCode) + fprintf(output, "\t\t%c;\n", colorCode); + break; + case (int) QuadraticSegment::EDGE_TYPE: + fprintf(output, "\t"); + writeCoord(output, p[0]); + fprintf(output, ";\n\t\t"); + if (colorCode) + fprintf(output, "%c", colorCode); + fprintf(output, "("); + writeCoord(output, p[1]); + fprintf(output, ");\n"); + break; + case (int) CubicSegment::EDGE_TYPE: + fprintf(output, "\t"); + writeCoord(output, p[0]); + fprintf(output, ";\n\t\t"); + if (colorCode) + fprintf(output, "%c", colorCode); + fprintf(output, "("); + writeCoord(output, p[1]); + fprintf(output, "; "); + writeCoord(output, p[2]); + fprintf(output, ");\n"); + break; } } fprintf(output, "\t#\n"); diff --git a/thirdparty/msdfgen/core/shape-description.h b/thirdparty/msdfgen/core/shape-description.h index 5df7c50a03..6e2e223674 100644 --- a/thirdparty/msdfgen/core/shape-description.h +++ b/thirdparty/msdfgen/core/shape-description.h @@ -1,7 +1,6 @@ #pragma once -#include #include #include "Shape.h" diff --git a/thirdparty/msdfgen/msdfgen.h b/thirdparty/msdfgen/msdfgen.h index c9ae4f52dc..dff8beb634 100644 --- a/thirdparty/msdfgen/msdfgen.h +++ b/thirdparty/msdfgen/msdfgen.h @@ -4,7 +4,7 @@ /* * MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR * --------------------------------------------- - * A utility by Viktor Chlumsky, (c) 2014 - 2022 + * A utility by Viktor Chlumsky, (c) 2014 - 2023 * * The technique used to generate multi-channel distance fields in this code * has been developed by Viktor Chlumsky in 2014 for his master's thesis, @@ -15,8 +15,9 @@ * */ +#include "core/base.h" #include "core/arithmetics.hpp" -#include "core/Vector2.h" +#include "core/Vector2.hpp" #include "core/Projection.h" #include "core/Scanline.h" #include "core/Shape.h"