Bug in ITextModel::Replace() ? Loses Kerning.

Contributor ,
May 22, 2022 May 22, 2022

Copy link to clipboard

Copied

Hello,

 

I am having trouble with the function ITextModel::Replace() in my plugin.

 

My plugin tries to replace codes such as [1Mmmm] by values such as April. Due to these codes often being too long to fit, my users often reduce the size of the inside of these codes, assuming that the replaced text will use the formatting of the first character (as happens when done manually).

 

To do this, as shown in the top example below, I replace the 1st character of the found text [ by the replacement text April, and then delete the remainder of the found text 1Mmmm]. This works well in all cases, except for kerning, which is lost.

 

OlivierBeltrami_0-1653203912693.png

 

As a workaround, I tried replacing the entire text [1Mmmm] by April in one unique call to Replace(). This solves the kerning issue, but as we can see above this does really weird things to the formatting of the replaced string.

 

Does anyone know what I am doing wrong, or is this a bug ?

 

Very best regards,

 

Olivier

 

TOPICS
Bug , SDK

Views

43

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guide ,
May 22, 2022 May 22, 2022

Copy link to clipboard

Copied

Are you calling Replace() yourself? Read the programming guide on basics of commands, then use the factory interface ITextModelCmds.

Besides, to mimic "done manually" you'd better use the kUserTypeTextCmdBoss, also via that interface. It does plenty more things, including responder signalling, pre/post processing, the style handling that you're missing, maintain the selection.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
May 22, 2022 May 22, 2022

Copy link to clipboard

Copied

LATEST

Hi Dirk,

Thank you very much for your response.

Yes, I was calling Replace() directly.

I'll try your suggestions.

Very best regards,

Olivier

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines