Status bar icon size issues |
Post Reply |
Author | |
rdhd
Senior Member Joined: 13 August 2007 Location: United States Status: Offline Points: 886 |
Post Options
Thanks(0)
Posted: 15 June 2022 at 11:45am |
I have version 20.1 When running on a 4k monitor scaled at 200%, the status bar is only drawing small icons. We create icons that are 16x16, 32x32 and 64x64. When running with the DPI set to 100%, CodeJock paints the 16x16 icon when drawing the CXTPStatusBarPane entries. The button size itself is 16x16 too.
Now scale the desktop to 200%. Codejock still draws the 16x16 icon, but the button size is 32x32. This is a regression. The cause for this is that Codejock is mixing code that uses XTP_DPI_X in CXTPStatusBarPaintManager::DrawStatusBarPaneEntry with calls to CXTPPaintManager::AdjustDpiIconSize. The latter returns 16x16. In earlier versions of CodeJock, code scaled the Icon Extent using XTP_DPI. Hence, the icon was drawn as the same size as the button. New 20.1 code in DrawStatusBarPaneEntry: if (pIcon) { CSize szIcon = CXTPPaintManager::AdjustDpiIconSize(pIcon, pIcon->GetExtent(), XTP_SAFE_GET2(pPane, GetStatusBar(), GetCommandBars(), NULL), rcItem.Size()); Pre 20.1: if (pIcon) { CSize szIcon(XTP_DPI(pIcon->GetExtent()));
Also, when asking for the icon by calling GetImage on the image manager, CodeJock is always passing in 0 as the icon size ensuring that regardless of the desktop DPI and what images of varying sizes I load, CodeJock will always obtain the smallest image available. So, even if I set the command bar options to auto scale the icon so it AND the button sizes actually match, CodeJock won't use my 32x32 icons and hence the 16x16 image is scaled during the paint op. Since we use PNG images, CJ eventually uses the GDI AlphaBlend API, one cannot even set halftoning on to try and get a better image. In the very least, should not this status bar pane drawing code be written such that the scaling of the sizes match what this AdjustDpiIconSize are in agreement? |
|
rdhd
Senior Member Joined: 13 August 2007 Location: United States Status: Offline Points: 886 |
Post Options
Thanks(0)
|
Just an update. I called EnableDpiBitmapScaling(TRUE); After that, the status bar icons are drawn at the correct size though some of they look like crap due to AlphaBlend not supportig halftone (which isn't that great in and of itself for all images).
So, great! Except ... now CodeJock is scaling ribbon icons too. My desktop is 4k at 200%. I create 64x64 icons and CodeJock gets those icons and then calls the AdjustDPIIconSize and gets back 76x76. The result is that the buttons draw right over text (when caption below is used as the style), or over the "drop" arrow drawn when a control is a split button dropdown. The call to GetButtonSize goes to the ribbon bar and it is using some "edit" control height which in my case is returned as 41. Then DrawControlToolbarParent changes the size using this weirdness: szButton = CSize(max(XTP_DPI_X(42), GetControlHeight() * 2 - XTP_DPI_X(4)), m_nEditHeight > 0 ? m_nEditHeight * 3 : GetSplitDropDownHeight() + szIcon.cy + XTP_DPI_Y(7)); } } and the size ends up 84x123 for a button that has caption below set (the case I stepped thru was for such a button style). That size just isn't suffiient to draw everything. But really, the issue was the auto scaling code just isn't meant to be used when one provides images of the right sizes. Looks like I have to edit the status bar pane drawing code to go back to what it used to be as there is no way we can live with having our icons scaled by Codejock in all cases.
|
|
Post Reply | |
Tweet
|
Forum Jump | Forum Permissions You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |