Commit Graph

453 Commits

Author SHA1 Message Date
Francesco Abbate 3b040aabc7 Implement unicode character replacements
Useful to draw whitespaces with alternate characters and colors
without slowing down the text rendering.

A new API is implemented. A renderer.replacements object can be created
to list the replacements.

In turns the function renderer.draw_text and draw_text_subpixel now accept
two optional arguments for replacements.
2021-04-01 18:05:59 +02:00
Francesco Abbate 4b3b8f430a Merge remote-tracking branch 'basinbaby/set-window-opacity'
Implement the suggestion and close #125.

Initial suggestion and implementation from

https://github.com/rxi/lite/pull/17
2021-03-23 07:15:18 +01:00
Francesco Abbate e160ed4e5e Add comments about unused RenFont data field 2021-03-20 23:05:09 +01:00
Francesco Abbate b33167ca4b Revert "Remove unused data field in RenFont"
This reverts commit 461266e97d.

Related to github issue #122.

The void *data field is not used but the glyphset index can
someting be equal to -1 and the unused field prevent faulty
writes before the allocated struct.
2021-03-20 21:48:04 +01:00
Francesco Abbate aee602ea2f Merge branch 'xrdb-lean' 2021-03-18 16:20:32 +01:00
Francesco Abbate 461266e97d Remove unused data field in RenFont 2021-03-18 14:05:58 +01:00
Francesco Abbate ecb9e88fdb Merge branch 'master' into xrdb-lean 2021-03-18 14:00:54 +01:00
Francesco Abbate 88bec172a1 Fix problem with tab size and subpixel positioning
Solve github issue https://github.com/franko/lite-xl/issues/109
2021-03-18 13:54:33 +01:00
Francesco Abbate a742c56ee7 Minor xrdb buffer optimization 2021-03-18 10:06:01 +01:00
Francesco Abbate 43e08b0f8e Fix problem with previous commit and remove strtol call 2021-03-18 10:00:03 +01:00
Francesco Abbate 51e7c9493f Minor change for xrdb output parsing
Use memmove to copy remaining bytes at beginning of buffer
2021-03-18 09:32:52 +01:00
Francesco Abbate ac0728d073 Check for error in pipe call 2021-03-17 18:29:50 +01:00
Francesco Abbate 30f9f20e23 Ensure xrdb code is compiled only on unix 2021-03-17 18:10:47 +01:00
Francesco Abbate dab39d3b5c Implement xrdb reading without popen
Avoid using the shell, awk and cut command
2021-03-17 16:58:44 +01:00
daubaris 27f3cb23d4
Addressing the scaling factor on linux. (#107)
Use xrdb and the Xft.dpi variable to find out DPI scaling on linux.
2021-03-14 16:13:26 +01:00
Francesco Abbate baf5aebe1c Merge remote-tracking branch 'origin/master' into subpixel-font-positioning-fix 2021-03-07 12:25:53 +01:00
Francesco Abbate 23a053e1ee Ensure error and stack trace are written to stdout
To address https://github.com/franko/lite-xl/issues/87
2021-03-07 09:48:44 +01:00
Francesco Abbate 3426bc5d73 Introduce subpixel text positioning within rencache
In order to fix the issue with cursor positioning a subpixel-aware draw
text operation within rencache was required.

With this modification the cursor positioning problem is completely
resolved.

A new function renderer.draw_text_subpixel is introduced to perform
consecutive, inline, text drawings with subpixel accuracy.
2021-03-06 18:12:02 +01:00
Francesco Abbate 9ff6a0325e Mostly fix problem of offset with cursor positioning when using mouse
In order to get right the cursor position on text on mouse clicks it is
needed to take into account text's subpixel positioning.

This fix mostly corrects the problem but cursor positioning is still
somewhat inaccurate for long lines due to repeated commands to draw a text
along a line. Repeated draw text calls make the subpixel information
lost and small errors will add-up.
2021-03-06 16:18:24 +01:00
Francesco Abbate 09332fe242 Fix problem with fatal error message
Previous implementation was broken.

Ensure the error file is always written and write its location in the error message
2021-03-05 23:46:41 +01:00
Francesco Abbate a4bc8986ff Implement fatal error message box
Used when lite-xl fails at startup
2021-03-05 10:33:50 +01:00
Francesco Abbate 636bc7ec95 More accurate EXEDIR detection
Use ony the OS path separator to parse the executable filename
2021-03-05 09:42:48 +01:00
Francesco Abbate ffb4773a0b Merge branch 'subpixel-font-positioning' 2021-03-05 09:14:25 +01:00
Francesco Abbate 1ea497deb4 Fix problem when launching from a different location
Should fix https://github.com/franko/lite-xl/issues/76 and https://github.com/franko/lite-xl/issues/67
2021-03-05 07:28:29 +01:00
Francesco Abbate 294f3f14fb Implement subpixel font positioning
Subpixel positioning is only by 1/3 of pixel
2021-03-03 18:36:09 +01:00
Francesco Abbate 351a772466 do not use 'portable' as a compile time option
Introduce the file core/start.lua to initialize applications variables
2021-02-24 16:29:39 +01:00
Francesco Abbate ea8a8770ea Do not use nullptr and add check 2021-02-24 09:46:48 +01:00
Francesco Abbate 35f31c8fbc Fix font rendering artifacts bug
Seen with some fonts like FiraSans, github issue:

https://github.com/franko/lite-xl/issues/46

The fix works essentially by looking to the bounds of each glyph to
accurately ensure that there are no overlaps between the glyphs.

The construction of the font atlas was changed to make some related
improvements now that the bounds of each glyph are know. The main
changes are:

- no longer align glyph on the baseline but align them on their upper
  bounds. We ensure this way that very tall fonts do not leak in the
  upper part
- terminate the row based on x bounds of the glyph to be more accurate
- for each row keep trace of the y of the more larger along y of the
  glyph. The value is used to start a new row to be sure that the new
  now does not overlap with the previous one
- sort glyphs by y size before drawing them. In this way the space
  utilization is better. The algorithm used is the very simple insert
  sort. It behaves like O(n^2) with the number of characters but should
  be ok since n is always small, typically below 128.
- compute the optimal image width and height for the given font's atlas
  for optimal memory usage. As a bonus now the lite's code don't have to
  try and repeat to get a good image size
2021-02-23 17:14:08 +01:00
Francesco Abbate 9fced84a7a Move VERSION variable into Lua code
To avoid recreating binaries if there are no changes
in the C side of the source code.
2021-02-16 14:35:02 +01:00
Francesco Abbate 882413e92d Bump 1.16 version number 2021-01-13 16:52:27 +01:00
Francesco Abbate d3686bb6f4 Bump new version number 2020-12-31 11:27:35 +01:00
Francesco Abbate 2cdf674b97 Keep memory of window's size and position and restore them on start
Fix also a problem with directory path on windows.
2020-12-31 11:25:12 +01:00
Francesco Abbate 35c87462a6 Use ~ for HOME directory in folder search 2020-12-19 16:31:42 +01:00
Francesco Abbate e50d67df85 Update readme and changelog for release 1.14 2020-12-13 13:04:29 +01:00
Francesco Abbate 1fc0409163 Merge branch 'project-manager' 2020-12-12 20:27:07 +01:00
Francesco Abbate 6409b67ea2 Add core:restart function to restart the editor 2020-12-10 12:44:01 +01:00
Francesco Abbate 1c4b8cf315 Fix documentation and behavior for 1.13 release 2020-12-06 11:23:33 +01:00
Francesco Abbate afda299fe4 Implement optional font rendering options
The user can now choose antialiasing grayscale and subpixel and hinting
non, slight or full.
2020-12-04 16:15:54 +01:00
Francesco Abbate be189fda0d Always use HOME based user's config independently from portable option 2020-12-04 12:01:49 +01:00
Francesco Abbate c41dedafad Improve the implementation of unix-like directories usage
Add a Meson option "portable" to choose between "portable" and unix-like
directories. Add information about this option in the README.

To determine the user's directory use the variable USERPROFILE only on
Windows and use HOME otherwise.

Implement the "portable" option in the package build script.
2020-12-03 16:46:18 +01:00
Francesco Abbate 277186491a Fix some problems with user's directory
To accommodate the Window's platform prefer the USERPROFILE to HOME
to set user's dir.

Fix error, user's dir was not added to the package.path.
2020-12-02 16:43:35 +01:00
Francesco Abbate a337f893d9 Implement user's config as init file and add directory into package.path
Create the user's config init file if lite user's config directory does
not exists.

No longer use the awkward package.searchers but instead add user's
config dir at the end of package path.
2020-12-02 16:03:31 +01:00
Francesco Abbate 3589d7d3c0 First implementation of unix-like data directory
It basically works by setting the data directory to

$prefix/share/lite-xl

where $prefix is determined so that $prefix/bin corresponds to EXEDIR.

The packages 'user' and 'user.*' are loaded from the directory
'$HOME/.config/lite-xl'.
2020-12-02 00:23:15 +01:00
Francesco Abbate 70412b520b Fix cursor blinking problem
The problem was that when the editor had no events the cursor was not
blinking because the event loop was blocking on wait_event.

Now we no longer calls wait_event without a timeout if the windows has
the focus. When the window has the focus the timeout is set to 1 / fps
so that the cursor can blinks.

In addition we react to the "focus lost" event to ensure the documents
are redrawn without the cursor.
2020-11-21 16:36:32 +01:00
Francesco Abbate cdcd89d6d7 Merge remote-tracking branch 'rxi/master' 2020-11-17 10:24:27 +01:00
rxi 878c94a334 Changed rencache to store font tab_width with font command
Fixes bug where text would be drawn/cached wrongly if more than one tab_width
was used in a given frame
2020-09-05 15:09:54 +01:00
Francesco Abbate 1c5767d393 Merge remote-tracking branch 'rxi/master' 2020-08-19 10:08:32 +02:00
rxi 91c43dc01e Version 1.11 2020-07-05 10:56:39 +01:00
Francesco Abbate 14ec61511d Merge remote-tracking branch 'rxi/master' 2020-07-04 22:08:25 +02:00
Francesco Abbate 77a9819f4e Fix SDL2 include directives 2020-06-29 15:24:08 +02:00
rxi 87532a4b3a Version 1.10 2020-06-28 14:40:07 +01:00
rxi 11df722162 Version 1.09 2020-06-21 19:38:42 +01:00
Francesco Abbate fe0dda8309 Merge remote-tracking branch 'rxi/master' into agg-font-renderer 2020-06-16 15:00:47 +02:00
Francesco Abbate 5c3d4163d3 Modify system.wait_event to wait indefinitely if no timeout is given 2020-06-16 14:53:01 +02:00
Francesco Abbate f5ede27e91 No longer use gamma correction
Text looks more correct without the gamma correction. With gamma correction
text looks too bold in dark mode and too light in light mode. This
behavior is a sign that gamma correction is not the right thing to do.

The problem is seen with gamma at 1.5 used previously but is even worst
if a gamma value of 2.2, the theoretical value, is used.
2020-06-16 14:43:03 +02:00
rxi 1db1f0bceb Version 1.08 2020-06-14 13:33:23 +01:00
Francesco Abbate 3c3662b3ba Add option to disable X axis font's pre-scaling
If used pre-scaling along X null the effect of the font's hinting.
2020-06-12 16:06:39 +02:00
Francesco Abbate 4d3693479d Merge remote-tracking branch 'rxi/master' into agg-font-renderer 2020-06-11 23:22:49 +02:00
Francesco Abbate 9e996a2d87 Rename FontRenderer to FR_Renderer 2020-06-11 23:19:08 +02:00
Francesco Abbate 93a36617f9 Bring back simple grayscale rendering option 2020-06-11 23:11:40 +02:00
Francesco Abbate 00c3983da6 Rename FontRenderer* symbols as FR_* 2020-06-11 18:12:47 +02:00
Francesco Abbate 117714390a Make the FontRenderer's Bitmap struct opaque outside the library 2020-06-11 17:52:00 +02:00
Francesco Abbate ce664f85b1 Move rendering buffers pointers computations inside FontRendererBlendGammaSubpixel
The logic is to disentangle the code between renderer.c and FontRenderer
so that this latter has a simple, logical interface.
2020-06-11 17:33:57 +02:00
rxi 95b70b1b16 Revert "Removed __APPLE__ `#ifdef` from main.c"
This reverts commit 6a7e214d1c.
2020-06-11 15:05:39 +01:00
Francesco Abbate 18865fd32f Remove font renderer debug code 2020-06-09 16:55:26 +02:00
rxi db471c0554 Version 1.07 2020-06-07 14:02:45 +01:00
rxi 6a7e214d1c Removed __APPLE__ `#ifdef` from main.c 2020-06-07 08:57:57 +01:00
Francesco Abbate fc148d7a51 Merge remote-tracking branch 'rxi/master' into font-rendering-tests 2020-06-07 00:19:03 +02:00
Francesco Abbate e82d766c2b Add more debug information in font's bitmap images 2020-06-07 00:15:38 +02:00
Francesco Abbate 81289d651e Move font resize in a separate function 2020-06-06 19:11:14 +02:00
Francesco Abbate dcf6b06629 Cleanup debug code 2020-06-06 13:08:39 +02:00
Francesco Abbate d17fde1b13 WIP: debugging stuff 2020-06-06 10:52:50 +02:00
Francesco Abbate c5575de058 Move font renderer in a separate folder as a library 2020-06-04 18:52:01 +02:00
Francesco Abbate 2171ea17fb Add correct copyright information 2020-06-04 18:14:02 +02:00
Francesco Abbate ac36cfc59c Remove unused code files 2020-06-04 18:13:28 +02:00
Francesco Abbate a2a4668887 Add some comments and remove unused code 2020-06-04 17:23:39 +02:00
Francesco Abbate 67124de130 Add some explanatory comments 2020-06-04 17:17:10 +02:00
Francesco Abbate dc5b668389 Fix resize of bounding rectangle in BakeFontBitmap function 2020-06-04 17:08:55 +02:00
Francesco Abbate c433017d75 Fix remove unnecessary function templating 2020-06-04 16:46:37 +02:00
Francesco Abbate a0e7d16167 Implement subpixel LCD font rendering 2020-06-04 16:29:28 +02:00
Daniele Laudani 95ee03fb37
move BYPASS_COMPOSITOR near other SetHint 2020-06-03 15:05:55 +02:00
Daniele Laudani 7aa462e43d
Don't tell the system to disable compositing under X11
Fixes #123
2020-06-03 14:38:44 +02:00
U-ST\francesco abbate f61ffc4710 Add missing resource file on windows 2020-06-03 12:22:17 +02:00
Francesco Abbate 9bd4a8b9de Merge remote-tracking branch 'rxi/master' into font-rendering-tests 2020-06-02 23:28:52 +02:00
Francesco Abbate 01a4981210 Use static libgcc and libstdc++ when doing release build 2020-06-02 23:20:22 +02:00
Francesco Abbate e01ba599ba Optimize glyph set bitmap rectangles by trimming empty regions 2020-06-02 18:46:44 +02:00
Francesco Abbate d46cf80226 Adjust xadvance computation to use rounding instead of truncate 2020-06-02 17:52:02 +02:00
Francesco Abbate 39d7d49586 Reduce y padding in BakeFontBitmap 2020-06-02 17:51:26 +02:00
Francesco Abbate ae032cd185 Ember blender with gamma correction into FontRenderer 2020-06-02 17:18:52 +02:00
Francesco Abbate bc74b2860d Add gamma correct pixel blender 2020-06-02 14:47:06 +02:00
Francesco Abbate c41d6a82e1 Adjust BakeFontBitmap issues 2020-06-01 17:23:18 +02:00
Francesco Abbate c2949edcd7 Check for errors when loading fonts 2020-06-01 17:01:42 +02:00
Francesco Abbate b734390388 Use font_renderer in aGG font testing program 2020-06-01 16:57:33 +02:00
Francesco Abbate e291e7269a Hack to fix font size rendering to align with STB original rendering 2020-06-01 15:33:14 +02:00
Francesco Abbate c333425770 Remove stb from Meson dependencies for Lite 2020-06-01 15:28:07 +02:00
Francesco Abbate 98f5c16932 Remove unused variable 2020-06-01 15:16:07 +02:00
Francesco Abbate 5ca7471fc7 Cosmetic code's cleanup 2020-06-01 14:45:07 +02:00
Francesco Abbate fa06862177 Completely remove usage of stb_truetype 2020-06-01 14:43:45 +02:00
Francesco Abbate 91a82d8ae4 Add missing function to free FontRenderer 2020-06-01 14:42:57 +02:00
Francesco Abbate 0389bd000a Fix y offset in BakeFontBitmap
Compute Y offset more accurately and the way it is required in
renderer.c.

Instead of returning y offset wrt the baseline position returns it
wrt the top position (the baseline plus the font's ascent).
2020-06-01 14:33:46 +02:00
Francesco Abbate 4c6e15b66c Rename GlyphSetA to GlyphSet 2020-06-01 14:08:50 +02:00
Francesco Abbate 3a8cb05ea6 Replace stb's BakeBitmapFont with AGG based font's renderer 2020-06-01 12:56:23 +02:00
Francesco Abbate edb103716a Add function to render a single unicode codepoint 2020-06-01 11:25:22 +02:00
rxi f00d5d55df Version 1.06 2020-05-31 16:53:53 +01:00
Francesco Abbate 4ec521dd37 Add correct glyphs bitmap location rects with AGG 2020-05-31 13:53:27 +02:00
Francesco Abbate 103336945e Add pixel format to render font in bitmap format
The purpose it to add later subpixel by storing the bitmap with RGB
channels to have subpixel LCD coverage information.

The colorization and gamma blending will be done when blitting the glyph
on the destination surface.
2020-05-30 18:07:31 +02:00
Francesco Abbate 010966d60d Add correct font's height calculation using AGG
Compute the height like in renderer.c
2020-05-30 16:26:10 +02:00
Francesco Abbate 0fea5d9d25 Add in agg_font_render method to get face's units to em 2020-05-30 16:25:13 +02:00
Francesco Abbate 155e76df5f Add font vmetrics in AGG font renderer test 2020-05-30 15:19:12 +02:00
Francesco Abbate 4701c2899c Add function in agg_font_freetype to take face's height 2020-05-30 15:18:36 +02:00
Francesco Abbate a7904eba3b Fix errors in renderer lcd 2020-05-29 18:41:14 +02:00
Francesco Abbate 0e713f7692 WIP: to use AGG font renderer to create a coverage bitmap 2020-05-29 16:00:29 +02:00
rxi b96609b7b8 Removed redundant __APPLE__ case in get_scale() 2020-05-29 09:33:42 +01:00
Francesco Abbate 4a8df09829 Fix y coordinate orientation in font rendering call 2020-05-29 09:27:00 +02:00
Francesco Abbate 31d7cb5ce0 Fix LCD font rendering for BGRA32 pixel format
Now the sizing of fonts is determined by stb_truetype while the
rendering is done via AGG so they are not aligned.

There seems to be an error also about Y text positioning.
2020-05-28 16:08:48 +02:00
Francesco Abbate 23a080ca45 WIP: compiles but completely broken
AGG files imported from AGG repository, sdl-testing branch.

the pixfmt_bgra32_lcd is just implemented and is not tested.
2020-05-28 12:15:24 +02:00
Francesco Abbate 79487074c0 Add missing gui_app flag in meson build 2020-05-25 16:18:06 +02:00
Francesco Abbate 7b9def299d Add dl library because it may be needed by SDL2
Should be fixed to be added only when needed.
2020-05-25 12:23:46 +02:00
Francesco Abbate 618078829c Add meson build configuration
Currently the editor will not work if it is not installed.

There is also a caveat about the 'data' directory which is installed
in the bin directory. This may work but does not seem ok because it is
pollution a shared bin directory and the 'data' folder may not be unique
to Lite.
2020-05-25 12:22:23 +02:00
rxi 61a2a2c4e5 Version 1.05 2020-05-24 13:52:10 +01:00
rxi 61092fbb99 Changed fuzzy matching to favour matching case 2020-05-23 15:08:38 +01:00
rxi 35b642d434 Added rencache invalidation on window-exposed event
Fixes #63
2020-05-22 09:00:48 +01:00
rxi 35ce3d32a9 Fixed string quoting on windows in `system.exec()` 2020-05-22 08:11:05 +01:00
rxi 7aabfebfa0 Fixed mouse-position resolution when dropping a file 2020-05-20 10:33:08 +01:00
rxi 4ae0d477c0 Made lite set project dir to CWD; removed core.project_dir
Fixes #100
2020-05-17 17:05:56 +01:00
rxi c1f731e5a1 Fixed EXEDIR having trailing slash 2020-05-17 16:58:32 +01:00
rxi adad2a65be Version 1.04 2020-05-17 14:58:44 +01:00
rxi 1abb979490 Added null-checks for all push_command() calls in rencache.c 2020-05-17 13:18:26 +01:00
rxi 82fdc63c6a Added global EXEFILE 2020-05-17 09:36:46 +01:00
rxi 5102088aca Deferred showing window until after the first frame has rendered
Fixes #97
2020-05-14 23:06:14 +01:00
rxi 9bf0ed2419 Made rencache warn on exhausting command buffer instead of panicing 2020-05-14 08:52:07 +01:00
rxi 4c2c03ed4d Made draw_text/draw_rect not push command if result is not on-screen 2020-05-14 08:45:45 +01:00
rxi 2b32edf7f0 Added system.exec() to system api 2020-05-13 20:32:53 +01:00
rxi 2f659d5180
Merge pull request #81 from extrowerk/patch-1
Build fix
2020-05-11 13:31:33 +01:00
extrowerk a6013ff181
Build fix 2020-05-11 13:49:18 +02:00
rxi c215eff6d8 Improved idle CPU utilisation when not-focused, added system.wait_event() 2020-05-11 00:21:07 +01:00
rxi b67b680975 Changed get_scale() to always default to 1.0 on macOS 2020-05-10 19:32:01 +01:00
rxi 143f8867a1 Version 1.03 2020-05-09 16:29:34 +01:00
rxi b2756d8a49 Removed xalloc.c/h 2020-05-08 13:41:39 +01:00
rxi 774d95d800 Comment improvement in rencache.c 2020-05-07 22:24:12 +01:00
rxi e551052e91 Added icon to non-windows build 2020-05-06 19:49:34 +01:00
rxi c8980a828f Version 1.02 2020-04-26 14:41:34 +01:00
rxi c658b6f1ca Removed underscore from start of globals, added VERSION
eg. `_SCALE` => `SCALE`
prevents conflict with lua's own _NAME globals
2020-04-25 09:58:01 +01:00
rxi bd43ed3e3f Added _PLATFORM global 2020-04-23 20:03:14 +01:00
rxi 03eee86ddb Made font.gc() do null-check in case font.load() failed 2020-04-22 00:41:23 +01:00
rxi a9b4bdf602 Made system.get_file_info() and list_dir() return (nil,msg) on error 2020-04-21 23:33:04 +01:00
rxi d4284edd5c Replaced system.set_fullscreen with system.set_window_mode
Solves #24
2020-04-07 18:49:11 +01:00
rxi efed38d59c Added system.set_fullscreen() and core:toggle-fullscreen command 2020-03-25 22:44:59 +00:00
basinbaby f37f22fb5f Added set_window_opacity function 2020-02-07 13:01:56 +00:00
rxi 613f9c2ba6 Changed renderer to make tab and newline glyphs invisible
Fixes #16
2020-02-05 20:16:09 +00:00
rxi 86800281c9 Made get_exe_dir() static; removed accidental `const` 2020-01-01 13:25:04 +00:00
rxi ba86b58b80 Added better resolution of exe directory; should fix #1 2019-12-31 10:53:31 +00:00
rxi d8c4bfa6ba Initial commit 2019-12-28 11:17:56 +00:00