Upload via GUI (293 Dateien)
This commit is contained in:
31
bundle.js
31
bundle.js
@@ -39,7 +39,7 @@ const aboutBody =
|
||||
'const o=y("p");o.innerHTML=`Git: ${a.link().outerHTML}`,' +
|
||||
'e.appendChild(y("div",[y("div|class:version",[_t.render(),' +
|
||||
'y("div|class:version-details",[y("h1:MyStart|class:version-app-name"),' +
|
||||
'y("p:Version 1.0.0|class:version-number")])]),y("hr"),s,o,y("div|id:mystart-autostart-row,class:mystart-autostart-row")]))';
|
||||
'y("p:Version 1.0.1|class:version-number")])]),y("hr"),s,o,y("div|id:mystart-autostart-row,class:mystart-autostart-row")]))';
|
||||
mainJs = mainJs.slice(0, i) + aboutBody + mainJs.slice(j + aEndMarker.length);
|
||||
|
||||
// --- 2) Rename branding (visible text + storage keys) consistently ---
|
||||
@@ -171,6 +171,35 @@ const windowControlsJs = `(function(){
|
||||
document.addEventListener('mousedown',function(ev){
|
||||
if(ev.button===0&&ev.altKey){ev.preventDefault();send('window-drag');}
|
||||
},true);
|
||||
// Edge/corner resize: the WebView fills the whole window, so the OS never
|
||||
// sees the real window border to hit-test for a resize drag -- every mouse
|
||||
// event lands in the page first. Watch the pointer ourselves near the
|
||||
// viewport edges and hand off to the native resize loop, same trick as
|
||||
// the drag grip above.
|
||||
var RM=6; // px from the true edge that counts as a resize zone
|
||||
var CURSOR={n:'ns-resize',s:'ns-resize',e:'ew-resize',w:'ew-resize',
|
||||
ne:'nesw-resize',sw:'nesw-resize',nw:'nwse-resize',se:'nwse-resize'};
|
||||
function edgeAt(x,y){
|
||||
var w=window.innerWidth,h=window.innerHeight;
|
||||
var l=x<=RM,r=x>=w-RM,t=y<=RM,b=y>=h-RM;
|
||||
if(t&&l)return'nw';if(t&&r)return'ne';if(b&&l)return'sw';if(b&&r)return'se';
|
||||
if(l)return'w';if(r)return'e';if(t)return'n';if(b)return's';
|
||||
return null;
|
||||
}
|
||||
document.addEventListener('mousemove',function(ev){
|
||||
if(ev.buttons)return; // an active drag (e.g. scrollbar) is in progress -> leave it alone
|
||||
var onCtrls=ev.target.closest&&ev.target.closest('#mystart-winctrls');
|
||||
var edge=onCtrls?null:edgeAt(ev.clientX,ev.clientY);
|
||||
document.documentElement.style.cursor=edge?CURSOR[edge]:'';
|
||||
},true);
|
||||
document.addEventListener('mousedown',function(ev){
|
||||
if(ev.button!==0)return;
|
||||
if(ev.target.closest&&ev.target.closest('#mystart-winctrls'))return;
|
||||
var edge=edgeAt(ev.clientX,ev.clientY);
|
||||
if(edge){ev.preventDefault();send2('window-resize',{edge:edge});}
|
||||
},true);
|
||||
document.addEventListener('mouseleave',function(){document.documentElement.style.cursor='';},true);
|
||||
function send2(t,extra){try{window.chrome.webview.postMessage(Object.assign({type:t},extra));}catch(e){}}
|
||||
})();`;
|
||||
|
||||
mainJs = trInfra + autostartJs + windowControlsJs + mainJs;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<AssemblyName>MyStart</AssemblyName>
|
||||
<RootNamespace>MyStart</RootNamespace>
|
||||
<Version>1.0.1</Version>
|
||||
<ApplicationIcon>app.ico</ApplicationIcon>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
|
||||
@@ -34,6 +34,7 @@ class MainForm : Form
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
Width = 1280;
|
||||
Height = 800;
|
||||
MinimumSize = new System.Drawing.Size(480, 360);
|
||||
ShowInTaskbar = true;
|
||||
BackColor = System.Drawing.Color.Black;
|
||||
// No title bar / border. Close with Alt+F4, minimize via the taskbar button.
|
||||
@@ -41,7 +42,7 @@ class MainForm : Form
|
||||
|
||||
if (startMinimized)
|
||||
{
|
||||
// Autostart: sit minimized on the taskbar; maximize on first open.
|
||||
// Autostart: sit minimized on the taskbar; restore to a normal window on first open.
|
||||
WindowState = FormWindowState.Minimized;
|
||||
_pendingMaximize = true;
|
||||
Resize += (_, _) =>
|
||||
@@ -49,14 +50,12 @@ class MainForm : Form
|
||||
if (_pendingMaximize && WindowState != FormWindowState.Minimized)
|
||||
{
|
||||
_pendingMaximize = false;
|
||||
WindowState = FormWindowState.Maximized;
|
||||
WindowState = FormWindowState.Normal;
|
||||
}
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
// else: leave WindowState at its default (Normal) -> starts as a normal
|
||||
// 1280x800 window, not maximized/fullscreen.
|
||||
|
||||
try
|
||||
{
|
||||
@@ -133,6 +132,10 @@ class MainForm : Form
|
||||
case "window-drag":
|
||||
StartWindowDrag();
|
||||
break;
|
||||
case "window-resize":
|
||||
if (root.TryGetProperty("edge", out var edgeProp))
|
||||
StartWindowResize(edgeProp.GetString());
|
||||
break;
|
||||
case "window-min":
|
||||
WindowState = FormWindowState.Minimized;
|
||||
break;
|
||||
@@ -224,6 +227,28 @@ class MainForm : Form
|
||||
SendMessage(Handle, WM_NCLBUTTONDOWN, (IntPtr)HTCAPTION, IntPtr.Zero);
|
||||
}
|
||||
|
||||
// --- Free window resize for the borderless window. The WebView2 control
|
||||
// fills the entire client area, so the OS never gets a chance to hit-test
|
||||
// the window's own edges for a resize cursor/drag -- every mouse message
|
||||
// lands in the browser first. The page (bundle.js) instead watches the
|
||||
// mouse position itself, and on mousedown within a few px of an edge/
|
||||
// corner sends "window-resize" with which edge; we hand off to the same
|
||||
// native resize loop Windows uses for a normal sizable window. ---
|
||||
private static readonly Dictionary<string, int> ResizeEdges = new()
|
||||
{
|
||||
["n"] = 12, ["s"] = 15, ["e"] = 11, ["w"] = 10,
|
||||
["ne"] = 14, ["nw"] = 13, ["se"] = 17, ["sw"] = 16,
|
||||
};
|
||||
|
||||
private void StartWindowResize(string? edge)
|
||||
{
|
||||
// Only a normal (non-maximized, non-minimized) window can be resized this way.
|
||||
if (WindowState != FormWindowState.Normal) return;
|
||||
if (edge == null || !ResizeEdges.TryGetValue(edge, out var htCode)) return;
|
||||
ReleaseCapture();
|
||||
SendMessage(Handle, WM_NCLBUTTONDOWN, (IntPtr)htCode, IntPtr.Zero);
|
||||
}
|
||||
|
||||
private static void OpenExternal(string uri)
|
||||
{
|
||||
try
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user