Author Topic: CodeBlocks and Fira Code issues  (Read 19774 times)

Offline New Pagodi

  • Multiple posting newcomer
  • *
  • Posts: 41
Re: CodeBlocks and Fira Code issues
« Reply #15 on: May 31, 2019, 09:38:45 pm »
This does seem to be a bug with wxSTC.  I've a standard demo application of mine for the screenshots below.  It has a wxSTC on the left and a native Scintilla window on the right.  The first is with the default GDI drawing and the second is with direct write drawing.  The font in the autocompletion window does end up larger than it should be when direct write drawing is used.  I don't know what could be going on here.

Offline stahta01

  • Lives here!
  • ****
  • Posts: 7582
    • My Best Post
Re: CodeBlocks and Fira Code issues
« Reply #16 on: June 01, 2019, 12:16:19 am »
Link to wxwidgets master branch change https://github.com/wxWidgets/wxWidgets/pull/1123
C Programmer working to learn more about C++ and Git.
On Windows 7 64 bit and Windows 10 64 bit.
--
When in doubt, read the CB WiKi FAQ. http://wiki.codeblocks.org

Offline New Pagodi

  • Multiple posting newcomer
  • *
  • Posts: 41
Re: CodeBlocks and Fira Code issues
« Reply #17 on: June 01, 2019, 08:50:12 pm »
I'm pretty sure I know what the problem is with the font size in the list boxes.  Direct write uses DIPs for font size.  So when the technology is set to direct write, Scintilla internally scales all the fonts by 96/72 so that so drawing comes out as expected for a given font size.  So, for example, when you try to set the default font size to be 10pts, Scintilla interanlly creates a 10*96/72 = 13.333 pt font.  When drawing text in the editor, that's not a problem, but when passing that font to the list control (as is done in ListBoxImpl::SetFont), the font will be larger than expected. 

The quick fix is to check the technology in ListBoxImpl::SetFont and unscale the font if needed.  A better fix would be to measure and draw the autocompletion listbox with direct write using the SurfaceD2D methods.

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1553
Re: CodeBlocks and Fira Code issues
« Reply #18 on: June 03, 2019, 06:53:50 pm »

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: CodeBlocks and Fira Code issues
« Reply #19 on: June 03, 2019, 08:10:50 pm »
Anything in STC should first be fixed in wxWidgets. I'm just backporting fixes...
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1553
Re: CodeBlocks and Fira Code issues
« Reply #20 on: June 04, 2019, 08:32:09 pm »
New Pagodi, I have published a patch in the ticket zone with your first suggestion. Can you review it? Is it possible to create a PR in wxWidgets?

It is attached here too for convenience.

Offline New Pagodi

  • Multiple posting newcomer
  • *
  • Posts: 41
Re: CodeBlocks and Fira Code issues
« Reply #21 on: June 04, 2019, 09:20:31 pm »
New Pagodi, I have published a patch in the ticket zone with your first suggestion. Can you review it? Is it possible to create a PR in wxWidgets?

It is attached here too for convenience.

That seems fine.  I eventually want to try to use the SurfaceD2D functions for measuring and drawing and if I can get that to work, I'll try to submit a patch the wxWidgets, but I don't know when I'll be able to get to that.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: CodeBlocks and Fira Code issues
« Reply #22 on: February 24, 2020, 08:18:02 pm »
@New Pagodi: Any progress with this issue?
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: CodeBlocks and Fira Code issues
« Reply #23 on: November 11, 2020, 06:07:13 am »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1553
Re: CodeBlocks and Fira Code issues
« Reply #24 on: November 11, 2020, 07:32:30 am »
It is fixed in master, but C::B uses a modified version of Scintilla, so changing to wx3.1.5 won't solve the issue.

Offline Quiss

  • Multiple posting newcomer
  • *
  • Posts: 76
Re: CodeBlocks and Fira Code issues
« Reply #25 on: November 11, 2020, 07:51:10 am »
My build is with wxmaster-1f3150b5f0d050262dbe132fc60d33a5e351d5b3 (25.09.2020), the issue (bigger font in popup window) isn't fixed (Miguel Gimenez wrote a reply while I'm writing). The thing is, I changed technology in the settings to DirectWrite just to check this.

Without DirectWrite, fonts are ok in popup but truncated. Font is Consolas-Regular-10. If I change font to Cascadia Mono-Regular-10, it doesn't truncated. I don't know if it's related to this topic or not.

Consolas, Arial, Georgia, Tahoma truncated.
Cascadia Mono, Calibri, Courier New not truncated.
« Last Edit: November 11, 2020, 07:56:44 am by Quiss »

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: CodeBlocks and Fira Code issues
« Reply #26 on: November 12, 2020, 10:53:28 am »
It is fixed in master, but C::B uses a modified version of Scintilla, so changing to wx3.1.5 won't solve the issue.
OK, I see, thanks.
So, currently, for C::B build against wx3.14 or wx3.13, I can use a workaround patch supplied by you in Code::Blocks / Tickets / #835 wxSTC popups' font bigger than expected when using DirectWrite, which is against our C::B code base. Am I right?

EDIT:
I'm pretty sure I know what the problem is with the font size in the list boxes.  Direct write uses DIPs for font size.  So when the technology is set to direct write, Scintilla internally scales all the fonts by 96/72 so that so drawing comes out as expected for a given font size.  So, for example, when you try to set the default font size to be 10pts, Scintilla interanlly creates a 10*96/72 = 13.333 pt font.  When drawing text in the editor, that's not a problem, but when passing that font to the list control (as is done in ListBoxImpl::SetFont), the font will be larger than expected. 

The quick fix is to check the technology in ListBoxImpl::SetFont and unscale the font if needed.  A better fix would be to measure and draw the autocompletion listbox with direct write using the SurfaceD2D methods.

So, your patch in Code::Blocks / Tickets / #835 wxSTC popups' font bigger than expected when using DirectWrite — https://sourceforge.net/p/codeblocks/tickets/835/ is the "quick fix".

« Last Edit: November 12, 2020, 11:07:06 am by ollydbg »
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1553
Re: CodeBlocks and Fira Code issues
« Reply #27 on: November 12, 2020, 11:27:43 am »
Quote
So, your patch is the "quick fix"

Yes, the patch is directwrite.patch. It works OK as long as you use 100% display scaling.

Probably it's easy to include scaling in the calculation, just include wxDisplay::GetScaleFactor() in the calculations (currently scale > 100 % makes the font bigger). If C::B is on the primary display:

Code
GETLB(wid)->SetFont(NewFont->Scaled(72.0/(96.0*wxDisplay().GetScaleFactor())));

This line may need to be changed also:

Code
maxw = (maxw*96)/72;

I can test this tonight.

Offline ollydbg

  • Developer
  • Lives here!
  • *****
  • Posts: 5910
  • OpenCV and Robotics
    • Chinese OpenCV forum moderator
Re: CodeBlocks and Fira Code issues
« Reply #28 on: November 12, 2020, 11:40:47 am »
I can test this tonight.
OK, thanks.
I have one PC which use 100% scale, and another use 125% scale. :)
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

Offline oBFusCATed

  • Developer
  • Lives here!
  • *****
  • Posts: 13413
    • Travis build status
Re: CodeBlocks and Fira Code issues
« Reply #29 on: November 12, 2020, 03:56:40 pm »
It is better to use the scaling factor of the window and not the display.
If you want to use a display you'll have to use something like wxDisplay::FromWindow(myWindow).
(most of the time I ignore long posts)
[strangers don't send me private messages, I'll ignore them; post a topic in the forum, but first read the rules!]