It's a bit of a challenge to call FriBidi at the right time. I'll need to refactor the document layout somewhat so the text renderer has visibility to the full paragraph and can process it in one go. At the moment it's more of a line-based operation, which makes it more challenging to apply alignment (and justification).

Show thread

Looks like FriBidi is doing its thing!

(i.e., applying the Unicode Bidirectional Algorithm)

Still need to optimize the text handling a bit to avoid repeated processing of static strings, e.g., UI labels. Text selection is also a bit wonky over RTL runs...

HarfBuzz & FriBidi mean a big step forward in supporting complex scripts. The final big issue remaining is expanding the collection of available fonts.

Show thread

After a while it became evident that trying to write my own text shaping engine would be a monumental project of its own. And since HarfBuzz already exists, quite a waste a time...

So I've gradually been integrating HarfBuzz into Lagrange's text renderer. There are still a few issues with the current set of fonts not containing all combining glyphs.

Next step: FriBidi for dealing with RTL scripts.

Show thread

Fancy a custom UI theme? 😎

In v1.6, UI colors can be customized via a config file.

v1.5 is now available with several UI improvements.

gmi.skyjake.fi/gemlog/2021-05_
gemini://skyjake.fi/gemlog/202

- improved identity management
- multi-line text input
- query response length indicator
- animated sidebars and dialogs
- custom fallback font
- Gempub navigation

Having an absolutely wild Saturday evening investigating Unicode combining characters. Lagrange currently utterly fails to render these. A special layout algorithm that adapts to any number of combined extra glyphs is needed.

I haven't thrown in the towel yet, but falling back to using an existing library is always an option...

Working on improvements to the Lagrange text input widget. Word wrapping and multiple lines make a world of difference for writing a bit of text.

I've updated the Gempub support in Lagrange's dev branch. The new split modes are also pretty handy here... @nytpu @oppen

As a stepping stone toward multiple windows, Lagrange v1.4 will have split-screen modes.

You essentially get two copies of the full UI side by side. Very useful for large displays, viewing something on the side, or just browsing two pages simultaneously.

This required substantial changes in the UI internals, but it'll make multiple windows a lot easier to do in the future.

Rendering Text (gemlog post)

gmi.skyjake.fi/gemlog/2021-04_

Taking a closer look at exactly how I render text in Lagrange, from TrueType files to view buffering.

gemini://skyjake.fi/gemlog/202

The Lagrange beta on TestFlight has been updated to v1.4, with a couple of useful new features: pinch-to-zoom and text selection.

Using long press for selection means that the page context menu needed a new location. I’ve moved it up into the URL bar, replacing the reload button.

First ten days of TestFlight

gmi.skyjake.fi/gemlog/2021-03_ (gemlog post)

Development has been pretty active but I'm still undecided about the phone UI. Writing a universal app remains a challenge. This has been a nice way to test 1.3 features for the desktop, though.

Trying out LibreTranslate in . It’s still a bit hit-and-miss, and I’m not sure how well the self-hosted instance will hold up, but it does work. Coming up in v1.3!

The first beta build of for iOS is now on TestFlight.

gmi.skyjake.fi/gemlog/2021-03_

Join now and not only will you get a preview of v1.3, but you'll also get to enjoy a variety of exciting bugs. Will it crash and burn?

A little v1.3 preview.

I'm a big fan of icons in menus. It's so much faster to recognize items by the icon than to actually read the label text.

I added these for the mobile version but they are useful and nice on the desktop, too.

iOS port progressing... "Colorful Light" is a bit too much on a large monitor, but on a phone it seems quite delightful.

Having a great deal of fun porting Lagrange to iOS. πŸ“²

SDL & custom UI makes this pretty painless, but of course there is no support for things like OS accessibility features or media playback.

Even without those this is already quite usable, especially on the iPad. Plenty of work left to refine the UI for a phone, though.

I expect most of this is directly applicable to Android as well, as long as I figure out how to compile all the dependencies.

Getting closer to a final design.

It's impossible to replicate native behavior exactly while working behind SDL APIs, but I'm pretty happy with how it's working now.

Still need to add a toggle in Preferences to disable the custom frame.

Show thread
Show older

skyjake's choices:

skyjake.fi

skyjake's personal Mastodon instance