Commit Graph
65 Commits
Author SHA1 Message Date
Gleb Mazovetskiy a66ca44695 Zero-based frame indexing
Index frames starting at 0 instead of 1.
2022-04-14 04:39:26 +01:00
Gleb Mazovetskiy ade8aba822 Fix some more warnings 2022-04-14 01:26:29 +02:00
ephphatha 93068de918 Address type conversion warnings in WordWrapString 2022-04-03 14:56:01 +02:00
Gleb Mazovetskiy 7fede6c4cb Clean up owned/unowned CelSprite ambiguity
Makes `CelSprite` unowned and adds a new `OwnedCelSprite` class for
owned sprites.

This clarifies ownership and makes the code cleaner in a number of
places.

Additionally, because the `CelSprite` class is now tiny (1 less
pointer), we can pass it by-value instead of by-reference, removing a
pointer indirection in the rendering functions.
2022-03-06 04:49:13 +01:00
Gleb Mazovetskiy 1519e995cf Move store graphics out of stores.cpp
These graphics are used in various places outside of `stores.cpp`.
2022-01-30 14:56:04 +01:00
KPhoenixandAnders Jenbo a08026097a Chat Interface Revision (#3840)
Co-authored-by: Anders Jenbo <[email protected]>
2021-12-25 10:11:42 +00:00
Gleb Mazovetskiy 1de202cfe0 DrawString: Fix IsCJK definition
Fix IsCJK to include Hiragana, Katakana, Bopomofo, etc.
2021-11-27 15:11:52 +01:00
Gleb Mazovetskiy 48ddb2ea06 DrawString: Fix line height for tall codepoints 2021-11-27 15:11:52 +01:00
Gleb Mazovetskiy bffe7dd071 DrawStringWithColors: Fix {} support 2021-11-25 12:22:27 +01:00
Gleb Mazovetskiy af168fd8df Add DrawStringWithColors
A way to color parts of the string differently while keeping the color
information out of the string itself.

This is an alternative to #3546.
2021-11-25 00:26:16 +00:00
Anders Jenbo 9ea6d9c9d1 Tweak Hangul font width 2021-11-19 03:40:00 +01:00
Anders Jenbo a6f17fe072 Adjust width of CJK and Hangul fonts 2021-11-18 02:26:11 +01:00
Anders Jenbo 5e97bfa1e8 Adjust to new CJK font width 2021-11-16 04:10:07 +01:00
Gleb Mazovetskiy f45270e9ab RenderString: Fix width calculation after \n
Fixes #3456
2021-11-10 01:48:55 +00:00
Gleb Mazovetskiy bc9031ad54 WordWrapString: Fix state after starting a new line
After starting a new line, we restart the processing from the line break
position, so we need to set `nextCodepoint` correctly.

Fixes #3449
2021-11-10 01:48:55 +00:00
Gleb Mazovetskiy e3dc241c2f Correctly handle ZWSP in WordWrapString 2021-11-10 01:48:55 +00:00
Gleb Mazovetskiy 40b1dc7a12 WordWrap: Require whitespace to break after Latin punctuation
This fixes cases such as `github.com`.

As we now require a space after Latin punctuation, we can remove
the list of Latin punctuation symbols and break on the space itself.

We still disallow linebreaks between consecutive fullwidth punctuation
symbols.
2021-11-08 00:11:04 +01:00
Gleb Mazovetskiy e1dc7df3a5 Fix crash in WordWrapString
Fixes #3433
2021-11-07 23:21:21 +01:00
Gleb Mazovetskiy 8e5bc0597a Don't line-break in the middle of a punct sequence
Also removes a redundant copy of the input string.

Fixes #3420
2021-11-07 19:03:35 +00:00
Gleb Mazovetskiy e9a9daa794 DrawString: Stop allocating
Switch to a state-machine UTF-8 decoder from the branchless one.
This allows us to avoid copying the string on every `DrawString` call.
2021-11-07 04:17:50 +01:00
Gleb Mazovetskiy 3d308983a8 Migrate to libmpq
libmpq is a much simpler alternative to StormLib for reading MPQ archives.

We use our own fork of libmpq: https://github.com/diasurgical/libmpq

Impact:

* DevilutionX is now a lot more portable. Unlike StormLib, libmpq only
  needs platform-specific code for Windows.
* Locks around file access **removed** (instead we duplicate the file descriptor for streamed audio only).
* RAM usage is **300 KiB** lower than StormLib.
* Stripped release linux_x86_64 binary is **32 KiB** smaller.
* Amiga build now hangs instead of crashing.
2021-11-06 23:51:42 +00:00
Gleb Mazovetskiy 117695489b DrawArt: Fix bounds check (#3395)
The bounds checks were performed against the global screen dimensions
instead of the output buffer dimensions.

Also includes some minor cleanup of DrawArt.

Fixes #3388
2021-11-05 14:17:56 +00:00
Anders Jenbo 9cee65da6c Correct calculation for KerningFitSpacing 2021-10-24 16:28:28 +02:00
Anders Jenbo b227afc4c4 Do not render text past first encoding error
Continuing past the error allows for CTD attacks using special crafted
invalid UTF-8 with a multiby indicator at the end the string
2021-10-24 16:28:28 +02:00
Anders Jenbo 11e37e972a Port essential parts to use SDL abstraction for file access 2021-10-20 21:52:59 +02:00
Gleb Mazovetskiy dec45920eb Text rendering: Support Zero-width space
Zero-width space is a non-printing character that indicates a word
boundary.

https://en.wikipedia.org/wiki/Zero-width_space
2021-10-20 02:33:25 +02:00
Anders Jenbo 5b3abbd315 Correct dialog font full width 2021-10-17 08:40:45 +02:00
Anders Jenbo b3546e3254 Load full width kerning programmatically 2021-10-16 02:00:30 +02:00
Anders Jenbo f022a341b0 Avoid crashing from missing fonts 2021-10-12 21:05:19 +02:00
Gleb Mazovetskiy f4404e1452 WordWrapString: Also break on , U+FF0C (FULLWIDTH COMMA) 2021-10-01 10:29:03 +02:00
Gleb Mazovetskiy 0c694edaba WordWrapString: Wrap on punctuation
Useful for Chinese and Japanese, which do not have spaces between words,
nor whitespace after punctuation.
2021-09-30 18:16:31 +02:00
Anders Jenbo 4dd8b121ec Replace TTF with PCX font 2021-09-29 18:13:48 +02:00
Anders Jenbo d0f70d5468 Correct loading of unicode fonts past row 09 2021-09-25 03:59:00 +02:00
Anders Jenbo 704a04ae4d Add support for Unicode fonts 2021-09-24 03:03:58 +02:00
Alex 6df826eb02 Fix compiler warnings 2021-09-23 19:06:37 +02:00
Anders Jenbo 7771a08d03 Translatable mainpanel 2021-09-19 07:21:52 +02:00
staphen 09b8afba4e Fix OOB error in DrawString 2021-09-13 23:48:54 +02:00
qndel 1f61b683a6 fix chat line wrapping 2021-09-13 22:53:32 +02:00
Anders Jenbo 41f6b62caa Fix infinit loop if first word overflows the text box
Fixes #2829
2021-09-12 01:37:28 +02:00
Anders Jenbo 7169882b1f ✨ Implement new font rendering 2021-09-12 01:37:28 +02:00
Vladimir Olteanu b17ff04ee2 Use string_view in DrawString and friends 2021-08-05 01:40:43 +02:00
ephphatha 0575716eac Rename UiFlags members to group related options 2021-07-31 20:22:40 +02:00
ephphatha 4ad53232a0 Convert the UiFlags enum to a scoped enum type
Replace operator&& with named function
2021-07-31 20:22:40 +02:00
Anders Jenbo 2ca6e37c46 Clean up sub folders using clang-tidy/Android Studio 2021-07-08 03:30:25 -07:00
Anders Jenbo dce78dde62 Rename lighting globals 2021-07-08 02:01:14 -07:00
Gleb Mazovetskiy cb0dae8590 🚚 Rename CelOutputBuf to Surface and extract 2021-07-03 05:33:32 -07:00
Anders Jenbo 2417d3d333 🔥 Remove unused code 2021-06-25 13:22:08 +02:00
Andrew James 60a47caf1b Refactor Draw* functions to use Rectangle and Point types
Added overload for DrawString taking a Point to avoid creating a rect for callers which only use position. This also documents the way DrawString operates when passed a clipping rectangle with a dimension of 0.
As part of this overload removed the logic for 0 width regions from DrawString. This does change the behaviour of the Rectangle version if called with a rect with width 0, all callers using that behaviour have been updated in this commit.

Using Rectangle/Size allowed simplifying the logic for certain calls where they could use DrawText alignment flags, previously this was manually aligning by calculating dimensions and offsetting the position. This also fixes #2169

Also includes a few instances where a temporary buffer was used to set the text to be drawn with unbounded sprintf calls, replaced those with snprintf as is recommended in modern C applications. Moving to C++ strings would be good in a future refactor.
2021-06-24 01:36:06 +02:00
Gleb Mazovetskiy e40b1963f9 🚚 engine.h: Extract CelSprite and file loading 2021-06-21 01:36:20 -07:00
Gleb Mazovetskiy f9f301b054 🚚 engine.h: Extract Point, Direction, clamp
`engine.h` is getting quite bloated. Moves this code to their own files.
2021-06-21 01:36:20 -07:00