mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Added screen DPI awareness
This commit is contained in:
parent
3de10b9d73
commit
9930ae8436
6 changed files with 52 additions and 3 deletions
|
@ -224,6 +224,9 @@ namespace Beefy
|
||||||
[StdCall, CLink]
|
[StdCall, CLink]
|
||||||
static extern void* BFWindow_DeleteMenuItem(void* window, void* item);
|
static extern void* BFWindow_DeleteMenuItem(void* window, void* item);
|
||||||
|
|
||||||
|
[StdCall, CLink]
|
||||||
|
static extern int BFWindow_GetDPI(void* window);
|
||||||
|
|
||||||
public static BFWindow GetBFWindow(void* window)
|
public static BFWindow GetBFWindow(void* window)
|
||||||
{
|
{
|
||||||
return sWindowDictionary[(int)window];
|
return sWindowDictionary[(int)window];
|
||||||
|
@ -555,6 +558,11 @@ namespace Beefy
|
||||||
//TODO: REMOVE
|
//TODO: REMOVE
|
||||||
//Debug.WriteLine("LostFocus {0}", mTitle);
|
//Debug.WriteLine("LostFocus {0}", mTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual int GetDPI()
|
||||||
|
{
|
||||||
|
return BFWindow_GetDPI(mNativeWindow);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void KeyChar(char32 theChar)
|
public virtual void KeyChar(char32 theChar)
|
||||||
{
|
{
|
||||||
|
|
|
@ -124,9 +124,10 @@ public:
|
||||||
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) = 0;
|
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) = 0;
|
||||||
virtual void SetForeground() = 0;
|
virtual void SetForeground() = 0;
|
||||||
virtual void SetNonExclusiveMouseCapture() { mNonExclusiveMouseCapture = true; }
|
virtual void SetNonExclusiveMouseCapture() { mNonExclusiveMouseCapture = true; }
|
||||||
virtual void CaptureMouse() {}
|
virtual void CaptureMouse() {}
|
||||||
virtual bool IsMouseCaptured() { return false; }
|
virtual bool IsMouseCaptured() { return false; }
|
||||||
virtual void LostFocus(BFWindow* newFocus) = 0;
|
virtual void LostFocus(BFWindow* newFocus) = 0;
|
||||||
|
virtual int GetDPI() { return 0; }
|
||||||
|
|
||||||
virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
|
virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
|
||||||
virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
|
virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
|
||||||
|
|
|
@ -381,6 +381,11 @@ BF_EXPORT void BF_CALLTYPE BFWindow_Close(BFWindow* window, int force)
|
||||||
window->TryClose();
|
window->TryClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BF_EXPORT int BF_CALLTYPE BFWindow_GetDPI(BFWindow* window)
|
||||||
|
{
|
||||||
|
return window->GetDPI();
|
||||||
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|
||||||
BF_EXPORT TextureSegment* BF_CALLTYPE Gfx_CreateRenderTarget(int width, int height, int destAlpha)
|
BF_EXPORT TextureSegment* BF_CALLTYPE Gfx_CreateRenderTarget(int width, int height, int destAlpha)
|
||||||
|
|
|
@ -75,6 +75,7 @@ public:
|
||||||
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) override;
|
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) override;
|
||||||
virtual void CaptureMouse() override;
|
virtual void CaptureMouse() override;
|
||||||
virtual bool IsMouseCaptured() override;
|
virtual bool IsMouseCaptured() override;
|
||||||
|
virtual int GetDPI() { return ::GetDpiForWindow(mHWnd); }
|
||||||
|
|
||||||
virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;
|
virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;
|
||||||
virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;
|
virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;
|
||||||
|
|
|
@ -121,6 +121,7 @@ namespace IDE
|
||||||
public String mDbgCompileDir ~ delete _;
|
public String mDbgCompileDir ~ delete _;
|
||||||
public String mDbgVersionedCompileDir ~ delete _;
|
public String mDbgVersionedCompileDir ~ delete _;
|
||||||
public DateTime mDbgHighestTime;
|
public DateTime mDbgHighestTime;
|
||||||
|
public bool mIsFirstRun;
|
||||||
|
|
||||||
//public ToolboxPanel mToolboxPanel;
|
//public ToolboxPanel mToolboxPanel;
|
||||||
public Monitor mMonitor = new Monitor() ~ delete _;
|
public Monitor mMonitor = new Monitor() ~ delete _;
|
||||||
|
@ -9596,6 +9597,7 @@ namespace IDE
|
||||||
// User setting can affect automated testing, so use default settings
|
// User setting can affect automated testing, so use default settings
|
||||||
mSettings.Load();
|
mSettings.Load();
|
||||||
mSettings.Apply();
|
mSettings.Apply();
|
||||||
|
mIsFirstRun = !mSettings.mLoadedSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
DarkTheme aTheme = new DarkTheme();
|
DarkTheme aTheme = new DarkTheme();
|
||||||
|
@ -9677,11 +9679,29 @@ namespace IDE
|
||||||
LoadWorkspace(mVerb);
|
LoadWorkspace(mVerb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((mRunningTestScript) || (!LoadWorkspaceUserData()))
|
bool loadedWorkspaceUserData = false;
|
||||||
|
|
||||||
|
if ((!mRunningTestScript) && (LoadWorkspaceUserData()))
|
||||||
|
{
|
||||||
|
loadedWorkspaceUserData = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
CreateDefaultLayout();
|
CreateDefaultLayout();
|
||||||
|
}
|
||||||
|
|
||||||
WorkspaceLoaded();
|
WorkspaceLoaded();
|
||||||
|
|
||||||
|
if ((mIsFirstRun) && (!loadedWorkspaceUserData))
|
||||||
|
{
|
||||||
|
GetWorkspaceRect(var workX, var workY, var workWidth, var workHeight);
|
||||||
|
|
||||||
|
int32 height = (int32)(workHeight * 0.85f);
|
||||||
|
int32 width = Math.Min(4 * height / 3, (int32)(workWidth * 0.85f));
|
||||||
|
|
||||||
|
mRequestedWindowRect = .(workX + (workWidth - width)/2, workY + (workHeight - height)/2, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
{
|
{
|
||||||
BFWindow.Flags flags = .Border | .ThickFrame | .Resizable | .SysMenu |
|
BFWindow.Flags flags = .Border | .ThickFrame | .Resizable | .SysMenu |
|
||||||
|
@ -9694,6 +9714,17 @@ namespace IDE
|
||||||
(int32)mRequestedWindowRect.mY, (int32)mRequestedWindowRect.mWidth, (int32)mRequestedWindowRect.mHeight,
|
(int32)mRequestedWindowRect.mY, (int32)mRequestedWindowRect.mWidth, (int32)mRequestedWindowRect.mHeight,
|
||||||
flags, mMainFrame);
|
flags, mMainFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mIsFirstRun)
|
||||||
|
{
|
||||||
|
// If this is our first time running, set up a scale based on DPI
|
||||||
|
int dpi = mMainWindow.GetDPI();
|
||||||
|
if (dpi >= 120)
|
||||||
|
{
|
||||||
|
mSettings.mEditorSettings.mUIScale = 100 * Math.Min(dpi / 96.0f, 4.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UpdateTitle();
|
UpdateTitle();
|
||||||
mMainWindow.SetMinimumSize(GS!(480), GS!(360));
|
mMainWindow.SetMinimumSize(GS!(480), GS!(360));
|
||||||
mMainWindow.mIsMainWindow = true;
|
mMainWindow.mIsMainWindow = true;
|
||||||
|
|
|
@ -631,6 +631,8 @@ namespace IDE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool mLoadedSettings;
|
||||||
|
|
||||||
public CompilerSettings mCompilerSettings = new .() ~ delete _;
|
public CompilerSettings mCompilerSettings = new .() ~ delete _;
|
||||||
public EditorSettings mEditorSettings = new .() ~ delete _;
|
public EditorSettings mEditorSettings = new .() ~ delete _;
|
||||||
public VSSettings mVSSettings = new .() ~ delete _;
|
public VSSettings mVSSettings = new .() ~ delete _;
|
||||||
|
@ -712,6 +714,7 @@ namespace IDE
|
||||||
if (sd.Load(path) case .Err)
|
if (sd.Load(path) case .Err)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
mLoadedSettings = true;
|
||||||
using (sd.Open("Editor"))
|
using (sd.Open("Editor"))
|
||||||
mEditorSettings.Deserialize(sd);
|
mEditorSettings.Deserialize(sd);
|
||||||
using (sd.Open("Keys"))
|
using (sd.Open("Keys"))
|
||||||
|
@ -750,7 +753,7 @@ namespace IDE
|
||||||
|
|
||||||
public void Apply()
|
public void Apply()
|
||||||
{
|
{
|
||||||
gApp.mSettings.mEditorSettings.mUIScale = Math.Clamp(gApp.mSettings.mEditorSettings.mUIScale, 25, 400);
|
gApp.mSettings.mEditorSettings.mUIScale = Math.Clamp(gApp.mSettings.mEditorSettings.mUIScale, 50, 400);
|
||||||
gApp.mSettings.mEditorSettings.mFontSize = Math.Clamp(gApp.mSettings.mEditorSettings.mFontSize, 6.0f, 72.0f);
|
gApp.mSettings.mEditorSettings.mFontSize = Math.Clamp(gApp.mSettings.mEditorSettings.mFontSize, 6.0f, 72.0f);
|
||||||
|
|
||||||
Font.ClearFontNameCache();
|
Font.ClearFontNameCache();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue