* language_cpp: add back digit separators
* language_cpp: rewrite number matching in regex
* language_c: port digit separators over from language_cpp
(cherry picked from commit 8ea0393800bb59a214e8a6efd5b9fb69282803a9)
* common: allow / and \ as PATHSEP on Windows when fuzzy matching files
* common: fix PLATFORM == Windows
(cherry picked from commit 5d6ae412e76e69181a3b46c79b8408fbd55183c9)
Previously it would use the last char position, which resulted in incorrect values when the next char had a different size than the current one.
(cherry picked from commit f066c88e186a02b9912d7f102b541f514ae1aa35)
These are only needed for building the actual project and not for managing resources or setting various flags.
Gets rid of the double `source-only` check and moves it closer to the consumer
(cherry picked from commit 64420f4366a290b3c3f48f0131a8f77312def595)
ren_font_group_get_width() is getting called a lot while not 100% of the
glyphs loaded from this function will be actually rendered. We can defer
the bitmap rendering to ren_draw_text.
(cherry picked from commit 1659f63dfc6fec7893673e7e95bbcd844ec0bda4)
* added a stupid __tostring to every object
* moved every __tostring to just after the :extend() call
---------
Co-authored-by: Adam <adamdharrison@gmail.com>
(cherry picked from commit 880e7f1fa1521cdf176f44627a27c901e187058e)
* Update css plugin to support more units
* Fixed spacing.
---------
Co-authored-by: Adam Harrison <adamdharrison@gmail.com>
(cherry picked from commit 7a4260600509e26337e67ce65ff3c66eec79d3b6)
* fix appimage cd error and use static appimage runtime
* include `desktop-file-utils` for appimagetool
* remove mv of old `AppRun`
* revert indentation
* don't export `APPIMAGE_EXTRACT_AND_RUN`
* improve projectsearch
- stick status to top of view
- add horizontal scrolling
- added ellipsis at the end of the text if it's too long
* Reverted removal of 0 on yield.
---------
Co-authored-by: Adam Harrison <adamdharrison@gmail.com>
* renderer: rewrite glyph cache
This commit splits the current GlyphSet-based system into 2 caches,
CharMap and GlyphMap, which maps codepoints -> glyph IDs and glyph IDs -> glyphs respectively.
Each GlyphMap contains a number of GlyphAtlas mapped by their width,
and each GlyphAtlas has a list of surfaces with the same width.
Surfaces within the GlyphAtlas acts like a bump allocator, but is flexible
enough to allow older GlyphAtlas surfaces to be recycled.
GlyphMetric now contains atlas_idx and surface_idx, which points to the correct surface.
Since GlyphAtlas supports rudimentary packing & allocation, we no longer render whole
GlyphSets and this speeds up rendering in most cases.
Tab width is no longer set with the hacky "modify the GlyphMetric" hack.
* renderer: set natlas to 0 after freeing
* renderer: fix printf warning
* renderer: fix memory leak
* renderer: better whitespace rendering
* renderer: fix ubsan warning when casting ints
* renderer: fix tab handling
There's a bug with inconsistent tab widths caused by fontgroups.
* renderer: fix glyphs being loaded over and over
* renderer: add glyphmap size
* renderer: store per-surface offset_y and use it to find best-fitting surface
* renderer: fix MSVC compiler error
* renderer: remove return value from ren_font_glyph
* renderer: refactor xadvance calculation
* renderer: fix double free SDL_RWops if FT_Set_Pixel_Size fail
* renderer: always try .notdef before U+25A1
* renderer: disable ren_font_dump yet again
Accidentally commited this change.
* renderer: remove unused imports
* renderer: fix double free with FT_Open_Face
* renderer: return SDL_Surface in font_find_glyph_surface
* renderer: bring back metric flags for future extension
* renderer: refactor xadvance calculation into macro
* renderer: fix comment
* renderer: store GlyphMetric directly in the surface
* renderer: remove duplicated comment
* renderer: rename font_find_glyph_surface to font_allocate_glyph_surface
* renderer: refactor glyphmetric retrieval into an inline function
* renderer: do not render glyphs with bitmap set to null
This is a weird edge case, but at least it shouldn't crash
* renderer: refactor face metric code into its own function
* renderer: actually check if glyph fits in surface
* renderer: rudimentary support for non-scalable faces
At least it won't render nothing on the screen
* renderer: check for font_surface instead of metric directly
This is safe and shorter
* renderer: fix indentation
* renderer: rename GLYPH_PER_ATLAS to GLYPHS_PER_ATLAS
* renderer: rename all GLYPH_PER_ATLAS correctly
* renderer: make utf8_to_codepoint slightly more durable
* renderer: fix compiler unsigned cast warning