git-svn-id: svn://ultimatepp.org/upp/trunk@8976 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2015-10-04 06:05:30 +00:00
parent 7eeec7ac23
commit f993c1cd24
10 changed files with 164 additions and 24 deletions

View file

@ -809,17 +809,17 @@ Font FontZ(int face, int height)
return Font(face, Ctrl::VertLayoutZoom(height));
}
bool ApplicationHiDPIEnabled;
bool ApplicationUHDEnabled;
void Ctrl::SetHiDPIEnabled(bool set)
void Ctrl::SetUHDEnabled(bool set)
{
ApplicationHiDPIEnabled = set;
ApplicationUHDEnabled = set;
ReSkin();
}
bool Ctrl::IsHiDPIEnabled()
bool Ctrl::IsUHDEnabled()
{
return ApplicationHiDPIEnabled;
return ApplicationUHDEnabled;
}
Font StdFontZ(int height) { return FontZ(Font::STDFONT, height); }

View file

@ -1205,8 +1205,8 @@ public:
static void NoLayoutZoom();
static void GetZoomRatio(Size& m, Size& d);
static void SetHiDPIEnabled(bool set = true);
static bool IsHiDPIEnabled();
static void SetUHDEnabled(bool set = true);
static bool IsUHDEnabled();
static bool ClickFocus();
static void ClickFocus(bool cf);
@ -1281,14 +1281,14 @@ Font StdFontZ(int height = 0);
Font SansSerifZ(int height = 0);
Font SerifZ(int height = 0);
Font MonospaceZ(int height = 0);
Font ScreenSansZ(int height = 0);
Font ScreenSerifZ(int height = 0);
Font ScreenFixedZ(int height = 0);
Font RomanZ(int height = 0);
Font ArialZ(int height = 0);
Font CourierZ(int height = 0);
Font ScreenSansZ(int height = 0); // deprecated
Font ScreenSerifZ(int height = 0); // deprecated
Font ScreenFixedZ(int height = 0); // deprecated
int EditFieldIsThin();
Value TopSeparator1();
Value TopSeparator2();

View file

@ -2550,6 +2550,15 @@ ize]_[*@3 sz])&]
[s2;b17;a17; Sets scaling factor to (1, 1). Same as SetZoomSize(Size(1,
1), Size(1, 1)).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Ctrl`:`:SetUHDEnabled`(bool`):%- [@(0.0.255) void]_[* SetUHDEnabled]([@(0.0.255) b
ool]_[*@3 set])&]
[s2; Informs host platform that application is UHD ready.&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Ctrl`:`:IsUHDEnabled`(`):%- [@(0.0.255) bool]_[* IsUHDEnabled]()&]
[s2; Returns the value set by SetUHDEnabled.&]
[s3;%- &]
[s4; &]
[s5;K:Ctrl`:`:GetWorkArea`(`):%- [*^`:`:Rect^@(64) Rect][*@(64) _][* GetWorkArea][*@(64) ()]&]
[s2; Returns OS specific working area for the widget `- this is rectangle

View file

@ -134,5 +134,4 @@ s]_[*@4 T]>_[@(0.0.255) bool]_[* AcceptInternal]([_^PasteClip^ PasteClip][@(0.0.
onst]_[*@4 T][@(0.0.255) `&]_[* GetInternal]([_^PasteClip^ PasteClip][@(0.0.255) `&]_[*@3 d])
&]
[s2;%% Returns a reference to variable of internal clip.&]
[s3;%% &]
[s0;%% ]]

View file

@ -0,0 +1,67 @@
topic "";
[2 $$0,0#00000000000000000000000000000000:Default]
[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class]
[l288;2 $$2,2#27521748481378242620020725143825:desc]
[0 $$3,0#96390100711032703541132217272105:end]
[H6;0 $$4,0#05600065144404261032431302351956:begin]
[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item]
[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement]
[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param]
[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam]
[b42;2 $$9,9#13035079074754324216151401829390:normal]
[{_}
[ {{10000@(113.42.0) [s0;%% [*@7;4 Function to support actual resolution]]}}&]
[s0;%% &]
[s0;%% This set of function is designed to simplify writing code
where screen coordinates are correctly computed based on current
dialog scale factor.&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:Zx`(int`): [@(0.0.255) int]_[* Zx]([@(0.0.255) int]_[*@3 cx])&]
[s2;%% Same as Ctrl`::HorzLayoutZoom([%-*@3 cx]).&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:Zy`(int`): [@(0.0.255) int]_[* Zy]([@(0.0.255) int]_[*@3 cy])&]
[s2;%% Same as Ctrl`::VertLayoutZoom([%-*@3 cy]).&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:Zsz`(int`,int`): [_^Upp`:`:Size^ Size]_[* Zsz]([@(0.0.255) int]_[*@3 cx],
[@(0.0.255) int]_[*@3 cy])&]
[s2;%% Same as Size(Zx([%-*@3 cx]), Zy([%-*@3 cy])).&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:Zsz`(Upp`:`:Size`): [_^Upp`:`:Size^ Size]_[* Zsz]([_^Upp`:`:Size^ Size]_[*@3 sz])
&]
[s2;%% Same as Size(Zx([%-*@3 sz.cx]), Zy([%-*@3 sz.cy])).&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:FontZ`(int`,int`): [_^Upp`:`:Font^ Font]_[* FontZ]([@(0.0.255) int]_[*@3 face],
[@(0.0.255) int]_[*@3 height])&]
[s2;%% Returns font with height rescaled by vertical zoom factor.
Same as Font([%-*@3 face],_Ctrl`::VertLayoutZoom([%-*@3 height]).&]
[s3;%% &]
[s4; &]
[s5;:Upp`:`:StdFontZ`(int`): [_^Upp`:`:Font^ Font]_[* StdFontZ]([@(0.0.255) int]_[*@3 height])
&]
[s2;%% Returns standard GUI font with height rescaled by vertical
zoom factor. Same as FontZ(Font`::STDFONT, [%-*@3 height]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:SansSerifZ`(int`): [_^Upp`:`:Font^ Font]_[* SansSerifZ]([@(0.0.255) int]_[*@3 hei
ght])&]
[s5;:Upp`:`:ArialZ`(int`): [_^Upp`:`:Font^ Font]_[* ArialZ]([@(0.0.255) int]_[*@3 height])&]
[s2;%% Same as FontZ(Font`::SANSSERIF, [%-*@3 height]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:SerifZ`(int`): [_^Upp`:`:Font^ Font]_[* SerifZ]([@(0.0.255) int]_[*@3 height])&]
[s5;:Upp`:`:RomanZ`(int`): [_^Upp`:`:Font^ Font]_[* RomanZ]([@(0.0.255) int]_[*@3 height])&]
[s2;%% Same as FontZ(Font`::SERIF, [%-*@3 height]).&]
[s3; &]
[s4; &]
[s5;:Upp`:`:MonospaceZ`(int`): [_^Upp`:`:Font^ Font]_[* MonospaceZ]([@(0.0.255) int]_[*@3 hei
ght])&]
[s5;:Upp`:`:CourierZ`(int`): [_^Upp`:`:Font^ Font]_[* CourierZ]([@(0.0.255) int]_[*@3 height])
&]
[s2;%% Same as FontZ(Font`::MONOSPACE, [%-*@3 height]).&]
[s3;%% &]
[s0;%% ]]

View file

@ -83,10 +83,7 @@ both. If graphical data needs change as well, UpdateActionRefresh()
is the chain to go, which will invoke an additional Paint().
ClearModify() acts recursively on all children too.&]
[s0; &]
[s0; [* Accept / Reject]&]
[s0; &]
[s0; lorem ipsum :)&]
[s0; &]
[s0;* &]
[s0; [* Refresh() strategies]&]
[s0; &]
[s0; Each U`+`+ Ctrl can be scheduled for Refresh() explicitly. This
@ -136,4 +133,4 @@ data without posting it to the Ctrl, and once every 200 ms, do
your work..and let the Ctrl Refresh(), this still yields a good
look and keeps the GUI responsive.&]
[s0; &]
[s0; ]
[s0; ]]

View file

@ -0,0 +1,68 @@
topic "Reacting to resolution";
[2 $$0,0#00000000000000000000000000000000:Default]
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[H4;b83;*4 $$3,5#07864147445237544204411237157677:title]
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
[b42;a42;2 $$5,5#45413000475342174754091244180557:text]
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
[l321;C@5;1 $$7,7#20902679421464641399138805415013:code]
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
[C2 $$10,0#37138531426314131251341829483380:class]
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
[l160;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
[2 $$19,0#53580023442335529039900623488521:gap]
[C2 $$20,20#70211524482531209251820423858195:class`-nested]
[b50;2 $$21,21#03324558446220344731010354752573:Par]
[{_}%EN-US
[s2; Reacting to actual resolution, UHD support&]
[s0; While all widgets coordinates are always in pixels, applications
need to react actual settings of target GUI to scale things accordingly.&]
[s0; &]
[s0; In U`+`+, the basic scaling factor is always determined by standard
font size, which is read from host platform (scaling factor can
also be adjusted by application, but that is less relevant here).&]
[s0; &]
[s0; All layouts are designed in some artificial defined, relatively
small, `'basic font`' font size, then scaled based on ratios
of standard system font to this basic font. Also, it is possible
to scale individual dimensions by Ctrl`::`[Horz`|Vert`]LayoutZoom
or [^topic`:`/`/CtrlCore`/src`/Zooming`$en`-us^ Zx/Zy/Zsz] functions.&]
[s0; &]
[s0; This, when used appropriately, works well for host GUI font
size between 12`-22. When GUI font gets bigger, there starts
to be a problem with Images (e.g. button icons) being too small.
This is typical for UHD display.&]
[s0; &]
[s0; To resolve this problem, upscaled Images need to provided in
this case. This is not a problem for Images that are created
by code (because they can easily incorporate scaling factor into
the algorithm), but would be a problem for images from .iml resources.&]
[s0; &]
[s0; To this means, Image has Resolution info. This can have 3 values
`- None, Standard, UHD. This info can be adjusted in Icon designed.&]
[s0; &]
[s0; U`+`+ can be switched to [^topic`:`/`/Draw`/src`/UHD`$en`-us`#Upp`:`:SetUHDMode`(bool`)^ `"
UHD`" mode]. In this mode, if icon is retrieved from .iml and
it is in Standard resolution, it is upscaled 2x (relatively smart
algorithm is used so that it looks quite fine on UHD display).
Correspondingly, in standard mode, UHD resolution icons are downscaled.&]
[s0; &]
[s0; UHD is normally activated when standard icon height is greater
than 22.&]
[s0; &]
[s0; In addition to Zx/Zy/Zsz functions, U`+`+ also provides set
of [^topic`:`/`/Draw`/src`/UHD`$en`-us^ DPI functions] which simply
double arguments when UHD mode is active `- this is sometimes
better approach for scaling things that are related to icons.&]
[s0; &]
[s0; Last but not least, some host platforms (Windows) need to be
specifically informed that the application is able to handle
UHD. You can do this using Ctrl`::SetUHDEnabled.]]

View file

@ -598,7 +598,7 @@ void ChSysInit()
BOOL (STDAPICALLTYPE * SetProcessDPIAware)(void);
DllFn(SetProcessDPIAware, "User32.dll", "SetProcessDPIAware");
if(SetProcessDPIAware && Ctrl::IsHiDPIEnabled())
if(SetProcessDPIAware && Ctrl::IsUHDEnabled())
(*SetProcessDPIAware)();
NONCLIENTMETRICS ncm;
#if (WINVER >= 0x0600 && !defined(__MINGW32_VERSION))

View file

@ -195,11 +195,6 @@ Image CachedRescalePaintOnly(const Image& m, Size sz, int filter = Null);
Image CachedSetColorKeepAlpha(const Image& img, Color color);
Image CachedSetColorKeepAlphaPaintOnly(const Image& img, Color color);
// Obsolete, replace with RescaleFilter!
Image RescaleBicubic(const Image& src, Size sz, const Rect& src_rc, Gate2<int, int> progress = false);
Image RescaleBicubic(const Image& img, Size sz, Gate2<int, int> progress = false);
Image RescaleBicubic(const Image& img, int cx, int cy, Gate2<int, int> progress = false);
void SetUHDMode(bool b = true);
bool IsUHDMode();
void SyncUHDMode();
@ -209,3 +204,8 @@ Image DPI(const Image& img, int expected);
inline int DPI(int a) { return IsUHDMode() ? 2 * a : a; }
inline Size DPI(Size sz) { return IsUHDMode() ? 2 * sz : sz; }
// Obsolete, replace with RescaleFilter!
Image RescaleBicubic(const Image& src, Size sz, const Rect& src_rc, Gate2<int, int> progress = false);
Image RescaleBicubic(const Image& img, Size sz, Gate2<int, int> progress = false);
Image RescaleBicubic(const Image& img, int cx, int cy, Gate2<int, int> progress = false);

View file

@ -733,7 +733,7 @@ GUI_APP_MAIN
void AppMain___()
#endif
{
Ctrl::SetHiDPIEnabled();
Ctrl::SetUHDEnabled();
SetLanguage(LNG_ENGLISH);
SetDefaultCharset(CHARSET_UTF8);