I meant that if you never called setDesignResolutionSize(), then your design resolution is equal to the frame size and ResolutionPolicy = NO_POLICY.
And if you use glview->setDesignResolutionSize(frameSize.width, frameSize.height, ResolutionPolicy::NO_BORDER), then even though you specified a policy, it is like you did not specify anything in the end. The result is the same.
In the end, you can delete that block of code, nothing will change.
No Border - “The entire application fills the specified area, without distortion but possibly with some cropping, while maintaining the original aspect ratio of the application.”
NO_BORDER - The design resolution will be scaled to fit into the screen size (the frame size), and there will be no distortions, and there will be no black borders, but perhaps a part of the design resolution will not be visible (if the aspect ratio of the design resolution is not equal to the aspect ratio of the frame).
According to the width and height of screen and design resolution to determine the scale factor, choose the larger one as the scale factor. This can make sure that one axis can always fully display on screen, but another may scale out of the screen.
The application and design resolution are different things. If you use NO_BORDER and use setContentScaleFactor() incorrectly, then you can get both black borders and the wrong scale. ResolutionPolicy only works with a design resolution.
Yes, I read your post in other topic in parallel.
But now my mind is too tired and wants to sleep. I will read it carefully tomorrow, okay?
We will add to our docs a lot of info from this thread. How would you all feel about proof-reading a draft once complete? I’ll be working on this over the next few days.
I do not know if this is useful, but I think that a good plan to explain the concept to someone is
There are many different screen resolutions with different aspect ratios.
This raises many questions.
What screen resolutions should we use to create graphics resources? What coordinates should we use to set the position? How to scale resources?
->
What is the design resolution and how one line of code answers these questions.
A few code examples with setDesignResolutionSize(), but without setContentScaleFactor().
Only one set of graphics resources.
->
Why is it a good idea to have multiple sets of graphics resources.
A few code examples with setDesignResolutionSize() and setContentScaleFactor() and setSearchPath().
->
An alternative way. Do not use design resolution, use only setContentScaleFactor().
A few code examples.
If you mean Utils.cpp, then my idea was that if you use it, then you do not need to use glview->setDesignResolutionSize(frameSize.width, frameSize.height, ResolutionPolicy::NO_BORDER). But of course you can do this if you want.
The reason I mentioned glview->setDesignResolutionSize(1280.0f, 720.0f, ResolutionPolicy::NO_BORDER) is that I noticed that your implement the same scaling logic that NO_BORDER. But this is not a full equivalent, I wrote about the difference here.
And I edited this post to avoid confusion.
By the way, if you use Utils.cpp, and do not use setDesignResolutionSize() (or use it like setDesignResolutionSize(frameSize.width, frameSize.height, ResolutionPolicy::NO_BORDER)), then you do not need to worry about visibleOrigin, and getVisibleSize() will always return frame size.
I have not tested without setDesignResolution. I want to use the default visibleOrigin or getVisibleSize(). May be you are right. When I was using glview->setDesignResolutionSize(1280.0f, 720.0f, ResolutionPolicy::NO_BORDER), you can see from Test Case 4, my output was
Bounding HW= 675.000000 1200.000000
This is not equal to frameSize or designResolutionSize. That’s why I got confused.
So, I have not tested without these two. What I wanted, I got that, that’s why I did not go into further testing. But you can test and post the results with snaps.
You can use it if you want, but getVisibleOrigin() will always be equal to (0, 0) and getVisibleSize() will always be equal to the frame size in your case (use setDesignResolutionSize(frameSize.width, frameSize.height, ResolutionPolicy::NO_BORDER) or do not use setDesignResolutionSize()).
About Test Case 4
In your code, you use
It is OK. But then you use
This is the cause of the wrong result. You do not need to use setContentScaleFactor() in this case.
And then boundingBox will be equal to the size of the image in this case.