mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 03:28: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]
|
||||
static extern void* BFWindow_DeleteMenuItem(void* window, void* item);
|
||||
|
||||
[StdCall, CLink]
|
||||
static extern int BFWindow_GetDPI(void* window);
|
||||
|
||||
public static BFWindow GetBFWindow(void* window)
|
||||
{
|
||||
return sWindowDictionary[(int)window];
|
||||
|
@ -555,6 +558,11 @@ namespace Beefy
|
|||
//TODO: REMOVE
|
||||
//Debug.WriteLine("LostFocus {0}", mTitle);
|
||||
}
|
||||
|
||||
public virtual int GetDPI()
|
||||
{
|
||||
return BFWindow_GetDPI(mNativeWindow);
|
||||
}
|
||||
|
||||
public virtual void KeyChar(char32 theChar)
|
||||
{
|
||||
|
|
|
@ -124,9 +124,10 @@ public:
|
|||
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) = 0;
|
||||
virtual void SetForeground() = 0;
|
||||
virtual void SetNonExclusiveMouseCapture() { mNonExclusiveMouseCapture = true; }
|
||||
virtual void CaptureMouse() {}
|
||||
virtual void CaptureMouse() {}
|
||||
virtual bool IsMouseCaptured() { return false; }
|
||||
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 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();
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
|
@ -75,6 +75,7 @@ public:
|
|||
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) override;
|
||||
virtual void CaptureMouse() 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 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 mDbgVersionedCompileDir ~ delete _;
|
||||
public DateTime mDbgHighestTime;
|
||||
public bool mIsFirstRun;
|
||||
|
||||
//public ToolboxPanel mToolboxPanel;
|
||||
public Monitor mMonitor = new Monitor() ~ delete _;
|
||||
|
@ -9596,6 +9597,7 @@ namespace IDE
|
|||
// User setting can affect automated testing, so use default settings
|
||||
mSettings.Load();
|
||||
mSettings.Apply();
|
||||
mIsFirstRun = !mSettings.mLoadedSettings;
|
||||
}
|
||||
|
||||
DarkTheme aTheme = new DarkTheme();
|
||||
|
@ -9677,11 +9679,29 @@ namespace IDE
|
|||
LoadWorkspace(mVerb);
|
||||
}
|
||||
|
||||
if ((mRunningTestScript) || (!LoadWorkspaceUserData()))
|
||||
bool loadedWorkspaceUserData = false;
|
||||
|
||||
if ((!mRunningTestScript) && (LoadWorkspaceUserData()))
|
||||
{
|
||||
loadedWorkspaceUserData = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateDefaultLayout();
|
||||
}
|
||||
|
||||
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 |
|
||||
|
@ -9694,6 +9714,17 @@ namespace IDE
|
|||
(int32)mRequestedWindowRect.mY, (int32)mRequestedWindowRect.mWidth, (int32)mRequestedWindowRect.mHeight,
|
||||
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();
|
||||
mMainWindow.SetMinimumSize(GS!(480), GS!(360));
|
||||
mMainWindow.mIsMainWindow = true;
|
||||
|
|
|
@ -631,6 +631,8 @@ namespace IDE
|
|||
}
|
||||
}
|
||||
|
||||
public bool mLoadedSettings;
|
||||
|
||||
public CompilerSettings mCompilerSettings = new .() ~ delete _;
|
||||
public EditorSettings mEditorSettings = new .() ~ delete _;
|
||||
public VSSettings mVSSettings = new .() ~ delete _;
|
||||
|
@ -712,6 +714,7 @@ namespace IDE
|
|||
if (sd.Load(path) case .Err)
|
||||
return;
|
||||
|
||||
mLoadedSettings = true;
|
||||
using (sd.Open("Editor"))
|
||||
mEditorSettings.Deserialize(sd);
|
||||
using (sd.Open("Keys"))
|
||||
|
@ -750,7 +753,7 @@ namespace IDE
|
|||
|
||||
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);
|
||||
|
||||
Font.ClearFontNameCache();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue