diff --git a/Asuro.iso b/Asuro.iso index 05b933ce..fad1c91d 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 2431e279..9db5c511 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 2431e279..9db5c511 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/asuro.ppu b/lib/asuro.ppu index 93ea42f1..9e433b7b 100644 Binary files a/lib/asuro.ppu and b/lib/asuro.ppu differ diff --git a/lib/console.o b/lib/console.o index ac55a24e..7ef7d00b 100644 Binary files a/lib/console.o and b/lib/console.o differ diff --git a/lib/console.ppu b/lib/console.ppu index 03a4e682..f5e6c81d 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index 66ea48be..9b1fcf8d 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 07eb8ca3..6be13aab 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 8aadc80d..b39a8066 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 0e724d24..58ba1d90 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/shell.ppu b/lib/shell.ppu index 18f1e463..37eb5c08 100644 Binary files a/lib/shell.ppu and b/lib/shell.ppu differ diff --git a/lib/terminal.ppu b/lib/terminal.ppu index 92c69cc1..c086ec19 100644 Binary files a/lib/terminal.ppu and b/lib/terminal.ppu differ diff --git a/src/console.pas b/src/console.pas index 409fa063..ddff69ff 100644 --- a/src/console.pas +++ b/src/console.pas @@ -759,7 +759,34 @@ begin { Handle any Clicks that have happened since last redraw } if UnhandledClick then begin if UnhandledClickLeft then begin - SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; + + SelectedWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; + if SelectedWindow <> 0 then begin + if WindowManager.Windows[SelectedWindow] <> nil then begin + if WindowManager.Windows[SelectedWindow]^.ShellWND then FocusZOrder(SelectedWindow); + end; + end else begin + SelectedWindow:= ExitMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; + if SelectedWindow <> 0 then begin + closeWindow(SelectedWindow); + end else begin + SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; + if (SelectedWindow <> 0) and (WindowManager.Windows[SelectedWindow] <> nil) then begin + if (WindowManager.Z_Order[0] = SelectedWindow) or (WindowManager.Windows[SelectedWindow]^.ShellWND = false) then begin + if WindowManager.Windows[SelectedWindow]^.Hooks.OnMouseClick <> nil then begin + deltax:= MouseXToTile(WindowManager.MousePrev.X) - WindowManager.Windows[SelectedWindow]^.WND_X; + deltay:= MouseYToTile(WindowManager.MousePrev.Y) - WindowManager.Windows[SelectedWindow]^.WND_Y; + WindowManager.Windows[SelectedWindow]^.Hooks.OnMouseClick(deltax, deltay, true); + end; + end; + if (WindowManager.Z_Order[0] <> SelectedWindow) and (WindowManager.Windows[SelectedWindow]^.ShellWND) then begin + FocusZOrder(SelectedWindow); + end; + end; + end; + end; + + {SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; if (SelectedWindow <> 0) and (WindowManager.Windows[SelectedWindow] <> nil) then begin //OnClickHandler(Left) if (WindowManager.Z_Order[0] = SelectedWindow) or (WindowManager.Windows[SelectedWindow]^.ShellWND = false) then begin @@ -773,7 +800,7 @@ begin FocusZOrder(SelectedWindow); end; end else begin - if SelectedWindow = 0 then SelectedWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; + SelectedWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; if SelectedWindow <> 0 then begin if WindowManager.Windows[SelectedWindow] <> nil then begin if WindowManager.Windows[SelectedWindow]^.ShellWND then FocusZOrder(SelectedWindow); @@ -783,7 +810,9 @@ begin if SelectedWindow <> 0 then begin closeWindow(SelectedWindow); end; - end; + end;} + + end; if not UnhandledClickLeft then begin SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)]; diff --git a/src/prog/shell.pas b/src/prog/shell.pas index f98a4760..00ba82ef 100644 --- a/src/prog/shell.pas +++ b/src/prog/shell.pas @@ -3,16 +3,18 @@ unit shell; interface uses - Console, RTC, terminal; + Console, RTC, terminal, strings; procedure init(); implementation var - Handle : HWND = 0; - Colors : uint32; + TaskBarHandle : HWND = 0; + DesktopHandle : HWND = 0; + Takbar_Colors : uint32; Explore_Colors : uint32; + Desktop_Colors : uint32; procedure Draw(); var @@ -23,30 +25,30 @@ var begin DateTime:= getDateTime; - console.clearWNDEx(Handle, colors); + console.clearWNDEx(TaskBarHandle, Takbar_Colors); - console.setCursorPosWND(0, 0, Handle); - console.writeStringExWND(' TERMINAL ', Explore_Colors, Handle); - console.writeCharExWND(#6, Colors, Handle); + console.setCursorPosWND(0, 0, TaskBarHandle); + console.writeStringExWND(' TERMINAL ', Explore_Colors, TaskBarHandle); + console.writeCharExWND(#6, Takbar_Colors, TaskBarHandle); for i:=0 to 9 do begin s:= getWindowName(i); if s <> nil then begin - console.writeStringExWND(s, Colors, Handle); - console.writeCharExWND(' ', Colors, Handle); - console.writeCharExWND(#6, Colors, Handle); + console.writeStringExWND(s, Takbar_Colors, TaskBarHandle); + console.writeCharExWND(' ', Takbar_Colors, TaskBarHandle); + console.writeCharExWND(#6, Takbar_Colors, TaskBarHandle); end; end; - console.setCursorPosWND(150, 0, Handle); - if DateTime.Hours < 10 then writeIntExWND(0, Colors, Handle); - writeIntExWND(DateTime.Hours, Colors, Handle); - writeStringExWND(':', Colors, Handle); - if DateTime.Minutes < 10 then writeIntExWND(0, Colors, Handle); - writeIntExWND(DateTime.Minutes, Colors, Handle); - writeStringExWND(':', Colors, Handle); - if DateTime.Seconds < 10 then writeIntExWND(0, Colors, Handle); - writeIntExWND(DateTime.Seconds, Colors, Handle); + console.setCursorPosWND(150, 0, TaskBarHandle); + if DateTime.Hours < 10 then writeIntExWND(0, Takbar_Colors, TaskBarHandle); + writeIntExWND(DateTime.Hours, Takbar_Colors, TaskBarHandle); + writeStringExWND(':', Takbar_Colors, TaskBarHandle); + if DateTime.Minutes < 10 then writeIntExWND(0, Takbar_Colors, TaskBarHandle); + writeIntExWND(DateTime.Minutes, Takbar_Colors, TaskBarHandle); + writeStringExWND(':', Takbar_Colors, TaskBarHandle); + if DateTime.Seconds < 10 then writeIntExWND(0, Takbar_Colors, TaskBarHandle); + writeIntExWND(DateTime.Seconds, Takbar_Colors, TaskBarHandle); end; procedure OnMouseClick(x : uint32; y : uint32; left : boolean); @@ -62,20 +64,50 @@ end; procedure onBaseDraw(); begin - clearWNDEx(0, console.combinecolors($01C3, $A55F)); + clearWNDEx(DesktopHandle, Desktop_Colors); +end; + +procedure Command_Background(Params : PParamList); +var + p1 : PChar; + +begin + if ParamCount(Params) > 0 then begin + p1:= GetParam(0, Params); + if StringEquals(p1, 'show') then begin + console.setWNDVisible(DesktopHandle, true); + console.writestringlnWND('Background enabled.', getTerminalHWND); + end else if StringEquals(p1, 'hide') then begin + console.setWNDVisible(DesktopHandle, false); + console.writestringlnWND('Background disabled.', getTerminalHWND); + end else begin + console.writestringlnWND('Invalid option.', getTerminalHWND); + end; + end else begin + console.writestringlnWND('Invalid number of parameters.', getTerminalHWND); + end; end; procedure init(); begin - colors:= console.combinecolors($0000, $FFFF); + Takbar_Colors:= console.combinecolors($0000, $FFFF); Explore_Colors:= console.combinecolors($01C3, $07EE); - Handle:= Console.newWindow(0, 63, 159, 1, 'SHELL'); - console.bordersEnabled(Handle, false); - //console.clearWNDEx(Handle, colors); - console.setShellWindow(Handle, false); - console.registerEventHandler(Handle, EVENT_DRAW, void(@Draw)); - console.registerEventHandler(Handle, EVENT_MOUSE_CLICK, void(@OnMouseClick)); - console.registerEventHandler(0, EVENT_DRAW, void(@onBaseDraw)); + Desktop_Colors:= console.combinecolors($01C3, $A55F); + + DesktopHandle:= Console.newWindow(0, 0, 159, 63, 'DESKTOP'); + TaskBarHandle:= Console.newWindow(0, 63, 159, 1, 'SHELL'); + + console.bordersEnabled(TaskBarHandle, false); + console.setShellWindow(TaskBarHandle, false); + + console.bordersEnabled(DesktopHandle, false); + console.setShellWindow(DesktopHandle, false); + + console.registerEventHandler(TaskBarHandle, EVENT_DRAW, void(@Draw)); + console.registerEventHandler(TaskBarHandle, EVENT_MOUSE_CLICK, void(@OnMouseClick)); + console.registerEventHandler(DesktopHandle, EVENT_DRAW, void(@onBaseDraw)); + + terminal.registerCommand('BACKGROUND', @Command_Background, 'Hide/Show background - usage: BACKGROUND '); end; end. \ No newline at end of file