Merge remote-tracking branch 'origin/1.7' into 1.7

This commit is contained in:
Wojtek Figat
2023-07-16 12:03:06 +02:00
8 changed files with 133 additions and 21 deletions

View File

@@ -3,6 +3,7 @@
#include "SkinnedModelLOD.h" #include "SkinnedModelLOD.h"
#include "MeshDeformation.h" #include "MeshDeformation.h"
#include "Engine/Core/Log.h" #include "Engine/Core/Log.h"
#include "Engine/Core/Math/Transform.h"
#include "Engine/Graphics/GPUDevice.h" #include "Engine/Graphics/GPUDevice.h"
#include "Engine/Content/Assets/Model.h" #include "Engine/Content/Assets/Model.h"
#include "Engine/Serialization/MemoryReadStream.h" #include "Engine/Serialization/MemoryReadStream.h"

View File

@@ -56,36 +56,94 @@ DialogResult MessageBox::Show(Window* parent, const StringView& text, const Stri
{ {
if (CommandLine::Options.Headless) if (CommandLine::Options.Headless)
return DialogResult::None; return DialogResult::None;
CFStringRef textRef = AppleUtils::ToString(text); NSAlert* alert = [[NSAlert alloc] init];
CFStringRef captionRef = AppleUtils::ToString(caption); ASSERT(alert);
CFOptionFlags flags = 0;
switch (buttons) switch (buttons)
{ {
case MessageBoxButtons::AbortRetryIgnore: case MessageBoxButtons::AbortRetryIgnore:
[alert addButtonWithTitle:@"Abort"];
[alert addButtonWithTitle:@"Retry"];
[alert addButtonWithTitle:@"Ignore"];
break;
case MessageBoxButtons::OK:
[alert addButtonWithTitle:@"OK"];
break;
case MessageBoxButtons::OKCancel: case MessageBoxButtons::OKCancel:
[alert addButtonWithTitle:@"OK"];
[alert addButtonWithTitle:@"Cancel"];
break;
case MessageBoxButtons::RetryCancel: case MessageBoxButtons::RetryCancel:
[alert addButtonWithTitle:@"Retry"];
[alert addButtonWithTitle:@"Cancel"];
break;
case MessageBoxButtons::YesNo: case MessageBoxButtons::YesNo:
[alert addButtonWithTitle:@"Yes"];
[alert addButtonWithTitle:@"No"];
break;
case MessageBoxButtons::YesNoCancel: case MessageBoxButtons::YesNoCancel:
flags |= kCFUserNotificationCancelResponse; [alert addButtonWithTitle:@"Yes"];
[alert addButtonWithTitle:@"No"];
[alert addButtonWithTitle:@"Cancel"];
break; break;
} }
switch (icon) switch (icon)
{ {
case MessageBoxIcon::Information: case MessageBoxIcon::Information:
flags |= kCFUserNotificationNoteAlertLevel; [alert setAlertStyle:NSAlertStyleCritical];
break; break;
case MessageBoxIcon::Error: case MessageBoxIcon::Error:
case MessageBoxIcon::Stop: case MessageBoxIcon::Stop:
flags |= kCFUserNotificationStopAlertLevel; [alert setAlertStyle:NSAlertStyleInformational];
break; break;
case MessageBoxIcon::Warning: case MessageBoxIcon::Warning:
flags |= kCFUserNotificationCautionAlertLevel; [alert setAlertStyle:NSAlertStyleWarning];
break; break;
} }
SInt32 result = CFUserNotificationDisplayNotice(0, flags, nullptr, nullptr, nullptr, captionRef, textRef, nullptr); [alert setMessageText:(NSString*)AppleUtils::ToString(caption)];
CFRelease(captionRef); [alert setInformativeText:(NSString*)AppleUtils::ToString(text)];
CFRelease(textRef); NSInteger button = [alert runModal];
return DialogResult::OK; DialogResult result = DialogResult::OK;
switch (buttons)
{
case MessageBoxButtons::AbortRetryIgnore:
if (button == NSAlertFirstButtonReturn)
result = DialogResult::Abort;
else if (button == NSAlertSecondButtonReturn)
result = DialogResult::Retry;
else
result = DialogResult::Ignore;
break;
case MessageBoxButtons::OK:
result = DialogResult::OK;
break;
case MessageBoxButtons::OKCancel:
if (button == NSAlertFirstButtonReturn)
result = DialogResult::OK;
else
result = DialogResult::Cancel;
break;
case MessageBoxButtons::RetryCancel:
if (button == NSAlertFirstButtonReturn)
result = DialogResult::Retry;
else
result = DialogResult::Cancel;
break;
case MessageBoxButtons::YesNo:
if (button == NSAlertFirstButtonReturn)
result = DialogResult::Yes;
else
result = DialogResult::No;
break;
case MessageBoxButtons::YesNoCancel:
if (button == NSAlertFirstButtonReturn)
result = DialogResult::Yes;
else if (button == NSAlertSecondButtonReturn)
result = DialogResult::No;
else
result = DialogResult::Cancel;
break;
}
return result;
} }
Float2 AppleUtils::PosToCoca(const Float2& pos) Float2 AppleUtils::PosToCoca(const Float2& pos)
@@ -301,15 +359,16 @@ Float2 MacPlatform::GetMousePosition()
CGEventRef event = CGEventCreate(nullptr); CGEventRef event = CGEventCreate(nullptr);
CGPoint cursor = CGEventGetLocation(event); CGPoint cursor = CGEventGetLocation(event);
CFRelease(event); CFRelease(event);
return Float2((float)cursor.x, (float)cursor.y); return Float2((float)cursor.x, (float)cursor.y) * MacPlatform::ScreenScale;
} }
void MacPlatform::SetMousePosition(const Float2& pos) void MacPlatform::SetMousePosition(const Float2& pos)
{ {
CGPoint cursor; CGPoint cursor;
cursor.x = (CGFloat)pos.X; cursor.x = (CGFloat)(pos.X / MacPlatform::ScreenScale);
cursor.y = (CGFloat)pos.Y; cursor.y = (CGFloat)(pos.Y / MacPlatform::ScreenScale);
CGWarpMouseCursorPosition(cursor); CGWarpMouseCursorPosition(cursor);
CGAssociateMouseAndMouseCursorPosition(true);
} }
Float2 MacPlatform::GetDesktopSize() Float2 MacPlatform::GetDesktopSize()

View File

@@ -72,11 +72,11 @@ KeyboardKeys GetKey(NSEvent* event)
case 0x30: return KeyboardKeys::Tab; case 0x30: return KeyboardKeys::Tab;
case 0x31: return KeyboardKeys::Spacebar; case 0x31: return KeyboardKeys::Spacebar;
case 0x32: return KeyboardKeys::BackQuote; case 0x32: return KeyboardKeys::BackQuote;
case 0x33: return KeyboardKeys::Delete; case 0x33: return KeyboardKeys::Backspace;
//case 0x34: //case 0x34:
case 0x35: return KeyboardKeys::Escape; case 0x35: return KeyboardKeys::Escape;
//case 0x36: case 0x36: return KeyboardKeys::Control; // Command (right)
//case 0x37: Command case 0x37: return KeyboardKeys::Control; // Command (left)
case 0x38: return KeyboardKeys::Shift; case 0x38: return KeyboardKeys::Shift;
case 0x39: return KeyboardKeys::Capital; case 0x39: return KeyboardKeys::Capital;
case 0x3A: return KeyboardKeys::Alt; case 0x3A: return KeyboardKeys::Alt;
@@ -378,7 +378,7 @@ static void ConvertNSRect(NSScreen *screen, NSRect *r)
{ {
KeyboardKeys key = GetKey(event); KeyboardKeys key = GetKey(event);
if (key != KeyboardKeys::None) if (key != KeyboardKeys::None)
Input::Keyboard->OnKeyDown(key); Input::Keyboard->OnKeyDown(key, Window);
// Send a text input event // Send a text input event
switch (key) switch (key)
@@ -400,7 +400,7 @@ static void ConvertNSRect(NSScreen *screen, NSRect *r)
if (length >= 16) if (length >= 16)
length = 15; length = 15;
[text getCharacters:buffer range:NSMakeRange(0, length)]; [text getCharacters:buffer range:NSMakeRange(0, length)];
Input::Keyboard->OnCharInput((Char)buffer[0]); Input::Keyboard->OnCharInput((Char)buffer[0], Window);
} }
} }
@@ -408,7 +408,32 @@ static void ConvertNSRect(NSScreen *screen, NSRect *r)
{ {
KeyboardKeys key = GetKey(event); KeyboardKeys key = GetKey(event);
if (key != KeyboardKeys::None) if (key != KeyboardKeys::None)
Input::Keyboard->OnKeyUp(key); Input::Keyboard->OnKeyUp(key, Window);
}
- (void)flagsChanged:(NSEvent*)event
{
int32 modMask;
int32 keyCode = [event keyCode];
if (keyCode == 0x36 || keyCode == 0x37)
modMask = NSEventModifierFlagCommand;
else if (keyCode == 0x38 || keyCode == 0x3c)
modMask = NSEventModifierFlagShift;
else if (keyCode == 0x3a || keyCode == 0x3d)
modMask = NSEventModifierFlagOption;
else if (keyCode == 0x3b || keyCode == 0x3e)
modMask = NSEventModifierFlagControl;
else
return;
KeyboardKeys key = GetKey(event);
if (key != KeyboardKeys::None)
{
int32 modifierFlags = [event modifierFlags];
if ((modifierFlags & modMask) == modMask)
Input::Keyboard->OnKeyDown(key, Window);
else
Input::Keyboard->OnKeyUp(key, Window);
}
} }
- (void)scrollWheel:(NSEvent*)event - (void)scrollWheel:(NSEvent*)event
@@ -643,7 +668,6 @@ MacWindow::MacWindow(const CreateWindowSettings& settings)
// TODO: impl StartPosition for MacWindow // TODO: impl StartPosition for MacWindow
// TODO: impl Fullscreen for MacWindow // TODO: impl Fullscreen for MacWindow
// TODO: impl ShowInTaskbar for MacWindow // TODO: impl ShowInTaskbar for MacWindow
// TODO: impl AllowInput for MacWindow
// TODO: impl IsTopmost for MacWindow // TODO: impl IsTopmost for MacWindow
} }

BIN
Source/Platforms/Mac/Binaries/ThirdParty/ARM64/libNvCloth.a (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
Source/Platforms/Mac/Binaries/ThirdParty/x64/libNvCloth.a (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
Source/Platforms/iOS/Binaries/ThirdParty/ARM64/libNvCloth.a (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@@ -35,6 +35,8 @@ public class NvCloth : DepsModule
case TargetPlatform.PS4: case TargetPlatform.PS4:
case TargetPlatform.PS5: case TargetPlatform.PS5:
case TargetPlatform.Android: case TargetPlatform.Android:
case TargetPlatform.Mac:
case TargetPlatform.iOS:
libName = "NvCloth"; libName = "NvCloth";
break; break;
case TargetPlatform.Switch: case TargetPlatform.Switch:

View File

@@ -82,6 +82,13 @@ namespace Flax.Deps.Dependencies
case TargetPlatform.Android: case TargetPlatform.Android:
Build(options, platform, TargetArchitecture.ARM64); Build(options, platform, TargetArchitecture.ARM64);
break; break;
case TargetPlatform.Mac:
Build(options, platform, TargetArchitecture.x64);
Build(options, platform, TargetArchitecture.ARM64);
break;
case TargetPlatform.iOS:
Build(options, platform, TargetArchitecture.ARM64);
break;
} }
} }
@@ -140,6 +147,16 @@ namespace Flax.Deps.Dependencies
envVars.Add("PM_ANDROIDNDK_PATH", AndroidNdk.Instance.RootPath); envVars.Add("PM_ANDROIDNDK_PATH", AndroidNdk.Instance.RootPath);
} }
break; break;
case TargetPlatform.Mac:
cmakeArgs += " -DTARGET_BUILD_PLATFORM=mac";
cmakeName = "mac";
binariesPrefix = "lib";
break;
case TargetPlatform.iOS:
cmakeArgs += " -DTARGET_BUILD_PLATFORM=ios";
cmakeName = "ios";
binariesPrefix = "lib";
break;
default: throw new InvalidPlatformException(platform); default: throw new InvalidPlatformException(platform);
} }
var cmakeFolder = Path.Combine(nvCloth, "compiler", "cmake", cmakeName); var cmakeFolder = Path.Combine(nvCloth, "compiler", "cmake", cmakeName);