Skip to content

Commit 0f1d6c2

Browse files
authored
Support SVG Text Rendering in egui_extras (#5979)
**Added** * Create `svg_text` feature flag to support text rendering & loading of system fonts. **Changed** * Updates `resvg` to `0.45`. * Adds `usvg::Options` field to the `SvgLoader` structure. * Change function signatures to support passing `usvg::Options` to downstream `load_svg_bytes_with_size`. **Additional Info** * I used this PR as a reference: #4659. @xNWP can you see if this adequately resolves your concern from your original PR? * Closes #5977 (we may want to open another issue for my other thoughts in this issue) * Also, I would like to thank @xNWP and their original PR for being a good reference for this one. * [x] I have followed the instructions in the PR template
1 parent a8e0c56 commit 0f1d6c2

File tree

4 files changed

+206
-85
lines changed

4 files changed

+206
-85
lines changed

Cargo.lock

+132-45
Original file line numberDiff line numberDiff line change
@@ -959,6 +959,15 @@ dependencies = [
959959
"libc",
960960
]
961961

962+
[[package]]
963+
name = "core_maths"
964+
version = "0.1.1"
965+
source = "registry+https://github.com/rust-lang/crates.io-index"
966+
checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30"
967+
dependencies = [
968+
"libm",
969+
]
970+
962971
[[package]]
963972
name = "crc32fast"
964973
version = "1.4.2"
@@ -1662,6 +1671,28 @@ version = "0.1.4"
16621671
source = "registry+https://github.com/rust-lang/crates.io-index"
16631672
checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f"
16641673

1674+
[[package]]
1675+
name = "fontconfig-parser"
1676+
version = "0.5.7"
1677+
source = "registry+https://github.com/rust-lang/crates.io-index"
1678+
checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7"
1679+
dependencies = [
1680+
"roxmltree",
1681+
]
1682+
1683+
[[package]]
1684+
name = "fontdb"
1685+
version = "0.23.0"
1686+
source = "registry+https://github.com/rust-lang/crates.io-index"
1687+
checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905"
1688+
dependencies = [
1689+
"fontconfig-parser",
1690+
"log",
1691+
"slotmap",
1692+
"tinyvec",
1693+
"ttf-parser",
1694+
]
1695+
16651696
[[package]]
16661697
name = "foreign-types"
16671698
version = "0.5.0"
@@ -2261,9 +2292,9 @@ dependencies = [
22612292

22622293
[[package]]
22632294
name = "imagesize"
2264-
version = "0.12.0"
2295+
version = "0.13.0"
22652296
source = "registry+https://github.com/rust-lang/crates.io-index"
2266-
checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284"
2297+
checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285"
22672298

22682299
[[package]]
22692300
name = "immutable-chunkmap"
@@ -2394,11 +2425,12 @@ dependencies = [
23942425

23952426
[[package]]
23962427
name = "kurbo"
2397-
version = "0.9.5"
2428+
version = "0.11.1"
23982429
source = "registry+https://github.com/rust-lang/crates.io-index"
2399-
checksum = "bd85a5776cd9500c2e2059c8c76c3b01528566b7fcbaf8098b55a33fc298849b"
2430+
checksum = "89234b2cc610a7dd927ebde6b41dd1a5d4214cffaef4cf1fb2195d592f92518f"
24002431
dependencies = [
24012432
"arrayvec",
2433+
"smallvec",
24022434
]
24032435

24042436
[[package]]
@@ -2423,6 +2455,12 @@ dependencies = [
24232455
"windows-targets 0.52.6",
24242456
]
24252457

2458+
[[package]]
2459+
name = "libm"
2460+
version = "0.2.11"
2461+
source = "registry+https://github.com/rust-lang/crates.io-index"
2462+
checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
2463+
24262464
[[package]]
24272465
name = "libredox"
24282466
version = "0.1.3"
@@ -3366,12 +3404,6 @@ dependencies = [
33663404
"crossbeam-utils",
33673405
]
33683406

3369-
[[package]]
3370-
name = "rctree"
3371-
version = "0.5.0"
3372-
source = "registry+https://github.com/rust-lang/crates.io-index"
3373-
checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
3374-
33753407
[[package]]
33763408
name = "redox_syscall"
33773409
version = "0.4.1"
@@ -3438,9 +3470,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
34383470

34393471
[[package]]
34403472
name = "resvg"
3441-
version = "0.37.0"
3473+
version = "0.45.0"
34423474
source = "registry+https://github.com/rust-lang/crates.io-index"
3443-
checksum = "cadccb3d99a9efb8e5e00c16fbb732cbe400db2ec7fc004697ee7d97d86cf1f4"
3475+
checksum = "dd43d1c474e9dadf09a8fdf22d713ba668b499b5117b9b9079500224e26b5b29"
34443476
dependencies = [
34453477
"log",
34463478
"pico-args",
@@ -3511,9 +3543,9 @@ dependencies = [
35113543

35123544
[[package]]
35133545
name = "roxmltree"
3514-
version = "0.19.0"
3546+
version = "0.20.0"
35153547
source = "registry+https://github.com/rust-lang/crates.io-index"
3516-
checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
3548+
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
35173549

35183550
[[package]]
35193551
name = "rustc-demangle"
@@ -3578,6 +3610,24 @@ version = "1.0.19"
35783610
source = "registry+https://github.com/rust-lang/crates.io-index"
35793611
checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
35803612

3613+
[[package]]
3614+
name = "rustybuzz"
3615+
version = "0.20.1"
3616+
source = "registry+https://github.com/rust-lang/crates.io-index"
3617+
checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702"
3618+
dependencies = [
3619+
"bitflags 2.8.0",
3620+
"bytemuck",
3621+
"core_maths",
3622+
"log",
3623+
"smallvec",
3624+
"ttf-parser",
3625+
"unicode-bidi-mirroring",
3626+
"unicode-ccc",
3627+
"unicode-properties",
3628+
"unicode-script",
3629+
]
3630+
35813631
[[package]]
35823632
name = "ryu"
35833633
version = "1.0.18"
@@ -3731,9 +3781,9 @@ dependencies = [
37313781

37323782
[[package]]
37333783
name = "siphasher"
3734-
version = "0.3.11"
3784+
version = "1.0.1"
37353785
source = "registry+https://github.com/rust-lang/crates.io-index"
3736-
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
3786+
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
37373787

37383788
[[package]]
37393789
name = "slab"
@@ -3864,9 +3914,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
38643914

38653915
[[package]]
38663916
name = "svgtypes"
3867-
version = "0.13.0"
3917+
version = "0.15.3"
38683918
source = "registry+https://github.com/rust-lang/crates.io-index"
3869-
checksum = "6e44e288cd960318917cbd540340968b90becc8bc81f171345d706e7a89d9d70"
3919+
checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc"
38703920
dependencies = [
38713921
"kurbo",
38723922
"siphasher",
@@ -4107,6 +4157,21 @@ dependencies = [
41074157
"serde_json",
41084158
]
41094159

4160+
[[package]]
4161+
name = "tinyvec"
4162+
version = "1.9.0"
4163+
source = "registry+https://github.com/rust-lang/crates.io-index"
4164+
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
4165+
dependencies = [
4166+
"tinyvec_macros",
4167+
]
4168+
4169+
[[package]]
4170+
name = "tinyvec_macros"
4171+
version = "0.1.1"
4172+
source = "registry+https://github.com/rust-lang/crates.io-index"
4173+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
4174+
41104175
[[package]]
41114176
name = "toml_datetime"
41124177
version = "0.6.8"
@@ -4160,6 +4225,9 @@ name = "ttf-parser"
41604225
version = "0.25.0"
41614226
source = "registry+https://github.com/rust-lang/crates.io-index"
41624227
checksum = "5902c5d130972a0000f60860bfbf46f7ca3db5391eddfedd1b8728bd9dc96c0e"
4228+
dependencies = [
4229+
"core_maths",
4230+
]
41634231

41644232
[[package]]
41654233
name = "type-map"
@@ -4187,18 +4255,54 @@ version = "2.8.0"
41874255
source = "registry+https://github.com/rust-lang/crates.io-index"
41884256
checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df"
41894257

4258+
[[package]]
4259+
name = "unicode-bidi"
4260+
version = "0.3.18"
4261+
source = "registry+https://github.com/rust-lang/crates.io-index"
4262+
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
4263+
4264+
[[package]]
4265+
name = "unicode-bidi-mirroring"
4266+
version = "0.4.0"
4267+
source = "registry+https://github.com/rust-lang/crates.io-index"
4268+
checksum = "5dfa6e8c60bb66d49db113e0125ee8711b7647b5579dc7f5f19c42357ed039fe"
4269+
4270+
[[package]]
4271+
name = "unicode-ccc"
4272+
version = "0.4.0"
4273+
source = "registry+https://github.com/rust-lang/crates.io-index"
4274+
checksum = "ce61d488bcdc9bc8b5d1772c404828b17fc481c0a582b5581e95fb233aef503e"
4275+
41904276
[[package]]
41914277
name = "unicode-ident"
41924278
version = "1.0.13"
41934279
source = "registry+https://github.com/rust-lang/crates.io-index"
41944280
checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
41954281

4282+
[[package]]
4283+
name = "unicode-properties"
4284+
version = "0.1.3"
4285+
source = "registry+https://github.com/rust-lang/crates.io-index"
4286+
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
4287+
4288+
[[package]]
4289+
name = "unicode-script"
4290+
version = "0.5.7"
4291+
source = "registry+https://github.com/rust-lang/crates.io-index"
4292+
checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f"
4293+
41964294
[[package]]
41974295
name = "unicode-segmentation"
41984296
version = "1.12.0"
41994297
source = "registry+https://github.com/rust-lang/crates.io-index"
42004298
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
42014299

4300+
[[package]]
4301+
name = "unicode-vo"
4302+
version = "0.1.0"
4303+
source = "registry+https://github.com/rust-lang/crates.io-index"
4304+
checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
4305+
42024306
[[package]]
42034307
name = "unicode-width"
42044308
version = "0.1.14"
@@ -4267,46 +4371,29 @@ dependencies = [
42674371

42684372
[[package]]
42694373
name = "usvg"
4270-
version = "0.37.0"
4271-
source = "registry+https://github.com/rust-lang/crates.io-index"
4272-
checksum = "38b0a51b72ab80ca511d126b77feeeb4fb1e972764653e61feac30adc161a756"
4273-
dependencies = [
4274-
"base64 0.21.7",
4275-
"log",
4276-
"pico-args",
4277-
"usvg-parser",
4278-
"usvg-tree",
4279-
"xmlwriter",
4280-
]
4281-
4282-
[[package]]
4283-
name = "usvg-parser"
4284-
version = "0.37.0"
4374+
version = "0.45.0"
42854375
source = "registry+https://github.com/rust-lang/crates.io-index"
4286-
checksum = "9bd4e3c291f45d152929a31f0f6c819245e2921bfd01e7bd91201a9af39a2bdc"
4376+
checksum = "2ac8e0e3e4696253dc06167990b3fe9a2668ab66270adf949a464db4088cb354"
42874377
dependencies = [
4378+
"base64 0.22.1",
42884379
"data-url",
42894380
"flate2",
4381+
"fontdb",
42904382
"imagesize",
42914383
"kurbo",
42924384
"log",
4385+
"pico-args",
42934386
"roxmltree",
4387+
"rustybuzz",
42944388
"simplecss",
42954389
"siphasher",
4296-
"svgtypes",
4297-
"usvg-tree",
4298-
]
4299-
4300-
[[package]]
4301-
name = "usvg-tree"
4302-
version = "0.37.0"
4303-
source = "registry+https://github.com/rust-lang/crates.io-index"
4304-
checksum = "8ee3d202ebdb97a6215604b8f5b4d6ef9024efd623cf2e373a6416ba976ec7d3"
4305-
dependencies = [
4306-
"rctree",
43074390
"strict-num",
43084391
"svgtypes",
43094392
"tiny-skia-path",
4393+
"unicode-bidi",
4394+
"unicode-script",
4395+
"unicode-vo",
4396+
"xmlwriter",
43104397
]
43114398

43124399
[[package]]

crates/egui_extras/Cargo.toml

+4-1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ serde = ["egui/serde", "enum-map/serde", "dep:serde"]
6262
## Support loading svg images.
6363
svg = ["resvg"]
6464

65+
## Support rendering text in svg images.
66+
svg_text = ["svg", "resvg/text", "resvg/system-fonts"]
67+
6568
## Enable better syntax highlighting using [`syntect`](https://docs.rs/syntect).
6669
syntect = ["dep:syntect"]
6770

@@ -101,7 +104,7 @@ syntect = { version = "5", optional = true, default-features = false, features =
101104
] }
102105

103106
# svg feature
104-
resvg = { version = "0.37", optional = true, default-features = false }
107+
resvg = { version = "0.45", optional = true, default-features = false }
105108

106109
# http feature
107110
ehttp = { version = "0.5", optional = true, default-features = false }

0 commit comments

Comments
 (0)