Clipped rendering of negative kerning custom fonts

I'm experimenting with custom fonts that have negative kerning, i.e. glyph bounding boxes may overlap one another. The example I'll use in this post is https://fonts.google.com/specimen/Griffy

When a letter like Y is rendered in the simulator, the edges of the letter are cropped:

Is there any way to convince the renderer to render the entire character beyond the negative xoffset and short xadvance values that support negative kerning?

Here's myfont.fnt file:

info face="Custom" size=120 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
common lineHeight=207 base=147 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=0 redChnl=1 greenChnl=1 blueChnl=1
page id=0 file="myfont.png"
chars count=3
char id=32 x=122 y=79 width=0 height=0 xoffset=0 yoffset=147 xadvance=53 page=0 chnl=15
char id=89 x=0 y=0 width=121 height=119 xoffset=-23 yoffset=33 xadvance=65 page=0 chnl=15
char id=111 x=122 y=0 width=65 height=78 xoffset=4 yoffset=69 xadvance=72 page=0 chnl=15

And the corresponding myfont.png file:

And the XML:

<fonts>
  <font id="CustomFont" filename="myfont.fnt" filter="" antialias="true" />
</fonts>

Top Replies

All Replies

  • ??? The new devices (e.g., Fenix 8) are based on legacy code/architecture. I'm not talking about old devices.

    Yeah exactly. It's not like Garmin literally rewrote the entire Forerunner/Fenix codebase for the latest generation of devices. If there's anything even close to a rewrite, I would guess it was on the UI side. (Although I'd bet there's still a lot of legacy code there, too.) I would bet there's a substantial amount of non-UI code that was reused from the previous gen.

    Some anecdotal evidence:

    - until recently, there was a bug in Fenix 8 watches where the auto lock setting had been removed from the UI, but the feature itself was apparently still in the code. Some people restored their settings from a previous-gen backup and found that auto lock was enabled, with no way to disable it. I think Garmin fixed this with a firmware update that either removed the underlying functionality or ignored/reset the setting.

    No way this would've happened with a full rewrite. On the contrary, it points to the codebase from the previous gen being reused in the current gen.

    - Both Fenix 8 (current gen) and FR955/965 (previous gen) have the same bug with the circular map fields, where the bottom fields are upside down. I guess this one isn't so clear cut.

    And ofc, in the bigger picture, as many people have pointed out, the hardware in the latest models isn't so dissimilar from previous gen hardware. (Some ppl feel like this is especially a handicap when it comes to AMOLED devices - in their opinion, the increased resolution of these displays leads to a more sluggish UI compared to MIP devices of the same or older generations, because there isn't the hardware horsepower to manipulate all of those pixels smoothly enough.)

    ??? Sure, the battery life for some devices is shorter but it's still much. much larger than what the Apple watch provides.

    Agreed. It seems to me that:

    - Garmin uses battery life as the main differentiator between its type of watches and "standard" smartwatches like Apple Watch that normies would wear. Ofc nerds like me appreciate certain other things about Forerunners, like the ability to use 99% of the functions without the touchscreen, but notice how Garmin does *not* use things like this when marketing to normies.

    - The reason Garmin finally went to AMOLED a few years ago (and abandoned MIP for lines not named Instinct or Enduro) is that they were able to make the battery life "good enough" (in their eyes)

    Ofc Garmin marketing can say whatever they want, but at the end of the day, customers have to perceive some sort of truth to claims that Garmin battery life is superior. If in reality, Garmin battery life was no better than Apple Watch, then Garmin would lose what's arguably its #1 selling point.

    Something has to give (everything is a compromise): "Garmin is also adding functionalities" likely means having a reduced battery life. The big hit appears to be the use of AMOLED.

    And as some have claimed, increased sluggishness in the UI.

    2. Garmin already abandoned "legacy" technologies. I'm not talking about the watches from 4+ years ago. That's OK and understandable and alway has been the case. I'm talking about the previous generation, that until recently had a few more years of support, but now since they only put effort into the new unified platform they virtually abandoned fr965, fenix7, epix2, etc.

    Maybe you're conflating "legacy technology" and "legacy models"?

    The legacy (previous gen) models you are referring to aren't so different from the current gen. There's a new coat of paint on the UI, some new features, and some removed features.

    The actual technology that goes into the watches doesn't seem to be a huge leap forward.

  • Battery life: it was once a big advantage, but it's not that much any more
    Garmin doesn't really care, it looks like as long their battery lasts at least 3 times longer than an AW they're OK with it,

    3X longer than Apple Watch isn't a huge advantage? If Apple was magically able to triple the battery life of Apple Watch, you don't think they'd shout that fact from the rooftops?

    To be fair, depending on how it use my (MIP) FR955 (i.e. whether I listen to music on runs or not), the battery can last for a couple of weeks, while people typically charge their Apple Watch every night. Like dpawlyk mentioned, the big battery hit here is probably due to AMOLED.

    Right now the battery life estimate on my FR955 is 12 days (on a 63% charge), although I'm sure I'll have to charge it well before that. If I use music during runs, the battery drains about 10% per hour, and I run about 6 hours per week.

    If it means that much to you, maybe get an FR955 while you can? UI and feature-wise, it will be very close to your FR965, although ofc there won't be any newer MIP Forerunner options. Ofc that's not an option if you don't like MIP screens.

  • No way this would've happened with a full rewrite. On the contrary, it points to the codebase from the previous gen being reused in the current gen.

    The 8 doesn’t work or look that differently from the 7X. 

    The 8 (apparently) uses the same CPU as the 7X.

    A “full rewrite” would likely be a huge, risky, and time-consuming project.

    Garmin tried some measure of that years ago with an Android phone.

  • I don't think I conflated them. Look, I even added double quotes around legacy. My point was that last gen devices (i.e currently fr965, fr955, fenix7) that for years had at least 4 years of updates seems to have left behind in 2025.

    Regarding the battery life, I don't have any better word than sayinh: Garmin lies. And I'm not talking only about the marketing materials. If I remember correctly fr965 is supposed to have up-to 21 days. I never achieved more than 6.5, even in the 1st month after I bought it, with hardly any CIQ apps downloaded to it. There were weeks when I even switched to built-in watch face (thinking maybe the CIQ WF I use causes the battery drain, but the difference was less than 1 day) This is not good, but it's even worse IMHO:

    I am wearing the watch 24/7 for more than 2 years, and Garmin continues to lie: when I click down from the watch face, on the top I see now: 47% 12d (means 12 days remaining!!!). Again. in the past 2+ years I never even got close to 10 days (never reached 7 for sure, and I think the average was somewhere between 5.5-6.5 days from 100% to 0% - of course I don't let it reach 0 usually, but I don't think that Garmin means, that when after about 5 days it reaches 10% and switches on battery saver, then it would reach another 10+ days until it would switch off at 0%)

    As a contrast Battery Graph: https://apps.garmin.com/apps/923cd514-fe15-476c-855e-26846d2007ec that was developed in 2020 and hardly updated since displays now: 47%, empty in 3d, predicting 5d 17h from 100 to 0%.

    Regarding the software platform: I have no information on how things looked before, how they are now with the newest "unified platform" but I can guess:

    Even if they always had 1 huge git repo (probably svn :) for all the different watches, and even if some parts were re-used (others might have been re-written by different team, maybe not even knowing that similar functionality was already there for other watches) the whole thing wasn't well organized (I know situations like this from my work experience). Now obviously they haven't rewritten everything from scratch! That would've been crazy. What they probably did: chosen 1 old device (based on some criteria, like the best maintained, latest, least bugs, whatever, we don't know and it doesn't matter any more) copied only the code relevant to it to a new git repo, and said: every new device we release from now will use this code only. Devices that differ will still use the same code, with different configurations that enable/disable certain features. Obviously there are other differences (i.e: venux1: rectangular vs all the rest round) but this can be nicely done in one organized code base.

    What this means is: nobody ever told that the reason for the new platform is because there's new hardware. I bet someone raised their hand and asked: OK, so now that we have this new platform, and we see how much better, easier, faster, (maybe even less buggy) the new devices' development is, why don't we switch all the other devices that we still work on (1 gen behind, i.e: fr965, fr955, fenix7) also to the new platform? That would have multiple benefits: less bugs (as one bug discovered on any of the devices and fixed would fix it on all the other devices), less time (as you only need to fix and more crutually depending on how other things are maybe even less testing on all the different devices), less burocracy in the internal systems (planning, documenting, marketing). And then they looked at each other, and while some probably agreed, then someone said something like: but this would mean thousands of users screaming why we changed things from the way they were.... Because it's impossible (or very hard at least) to fine tune all the settings so that they work and look exactly the same in the new codebase than how it looked on all of these older devices. And while ti probably could've been done, that would mean they would've need to add even more feature flags that would've clutter the new code base, and essentially bring back the old fragmentation that they wanted to get rid of into the new codebase.

    If I was sitting there, then I would have raise my hands and propose another way. Still involves a bit more work from Garmin, but would have make some customers happier: so why don't we let the users decide? Let's add 1 small new feature to those lasst gen but still maintained devices: under the System / Update menu let them choose between the old and the new platform (call it as you like). We would explain it that switching between the platforms means a factory reset of all the settings, that they can switch back and force as many times as they like, and that the old platform will not get new features, and hardly some bug fixes. This would mean that Garmin would with 1 small effort make every user of these devices "happy". Or at least they would give them the choice: R U happy with what you have now? Keep it! It'll continue to work as it works now. No sudden changes. Keep on training and be happy. Do you have a frustrating bug? Do you want the new battery features from the new platform (YES, of course!!!), then read the guide how to switch to the new platform, there is also a disclaimer , etc. You're OK with that? Switch to the new platform and be even happier than until now!

  • With AMOLED devices, in my own tests, having AOD turned on cuts the battery life by as much as 75%, so 12 days can become 4 days.  I keep AOD off most of the time.

    Depending on how much you use Music or GPS, that can also cause a big impact on battery life.

  • I don't think I conflated them. Look, I even added double quotes around legacy. My point was that last gen devices (i.e currently fr965, fr955, fenix7) that for years had at least 4 years of updates seems to have left behind in 2025.

    Except it wasn’t what I was talking about and it isn’t relevant. You don’t seem to understand the conversation.

    Regarding the battery life, I don't have any better word than sayinh: Garmin lies.

    This is irrelevant too.

    You suggested the Garnin battery life was close to that of the Apple Watch was similar and that Garnin didn’t care about battery life. That seems plainly incorrect. You aren’t paying attention to what people are taking about and kinda just ranting. It’s not a good look.

    What this means is: nobody ever told that the reason for the new platform is because there's new hardware.

    What the heck are you going on about? No one was talking anything like this.

  • Depending on how much you use Music or GPS, that can also cause a big impact on battery life.

    You are going off track.

  • The OP appears to be basing their expectations on something like the Apple Watch. 

    The Apple Watch was based on modern and capable hardware (iPhone).

    Garmin’s situation appears to be the improvement of software written 30 years ago for very limited computers. If that’s the case, the OP’s explanation isn’t realistic.

    ——————————-

    All of the stuff you are going on about isn’t relevant to this point and seems to indicate an inability to follow the conversation.

  • If I was sitting there, then I would have raise my hands and propose another way. Still involves a bit more work from Garmin, but would have make some customers happier: so why don't we let the users decide? Let's add 1 small new feature to those lasst gen but still maintained devices: under the System / Update menu let them choose between the old and the new platform (call it as you like).

    I’m going out on a limb and guess that it’s possible Garmin might know how to run a fairly-successful large company better than you do.

    Put another way, you are doing a lot of guessing based on a lack of experience and no idea of what is going on behind Garmin’s closed doors. While you might be right, there doesn’t seem to be anything that indicates you would be. 

  • To be fair,  , I think it might have been you who ran the conversation off the rails in the first place. While I obviously can't stop you, I want to respectfully ask you not to contribute more to the thread, unless you can respond in a way that doesn't routinely call others' intellect or knowledge into question.

    It's been an interesting side-panel on Garmin's core value proposition. I think Apple and others are giving Garmin a run for their money, and if they manage to solve the battery longevity issue then there's going to be some hard talks in Kansas!

    Mainly I just wanted to know if there's a way to convince the SDK to blit a complete glyph, and whether anyone had any insight into whether the issue occurs during building or is it a runtime issue, and whether anyone has had any success with their own bmfonts.