Commit 31164604 authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro

parents 267230ac fa99a076
Pipeline #11590 failed with stages
in 3 minutes and 49 seconds
/bin/
/build/
/event/
/freetype/
/gframe/ygopro.ico
.DS_Store
/deck
/expansions
/fonts
/icon
/pack
/pics
/replay
/single
/WindBot
/cards.cdb
/error.log
/bot.conf
/Bot.exe
/bot
/ygopro
/ygopro.exe
/ygopro.app
/bin
/build
/obj
/event
/freetype
/irrlicht
/irrklang
/ikpmp3
/lua
/sqlite3
/gframe/*.ico
/gframe/ygopro.rc
/gframe/ygopro.aps
/irrlicht/
/lua/
/obj/
/sqlite3/
premake5.exe
/premake5
/premake5.exe
......@@ -16,7 +16,7 @@ mat_common:
script:
# lua
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/lua-5.3.5.tar.gz | tar zfx -
- mv lua-5.3.5/src lua
- mv lua-5.3.5 lua
# sqlite3
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/sqlite-autoconf-3360000.tar.gz | tar zfx -
- mv sqlite-autoconf-3360000 sqlite3
......@@ -53,7 +53,7 @@ mat_linux:
script:
- apt update; apt -y install git wget tar
- git clone --depth=1 https://code.mycard.moe/mycard/irrlicht-new irrlicht
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/premake-5.0.0-alpha14-linux.tar.gz | tar zfx -
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/premake-5.0.0-beta1-linux.tar.gz | tar zfx -
- env PROCESSOR_COUNT=$(nproc) ./.ci/libevent-prebuild.sh
artifacts:
paths:
......@@ -100,7 +100,7 @@ mat_macos:
- linux
script:
- apt update; apt -y install wget tar
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/premake-5.0.0-alpha14-macosx.tar.gz | tar zfx -
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/premake-5.0.0-beta1-macosx.tar.gz | tar zfx -
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/libirrklang-patched-dylib.tar.gz | tar zfx -
- mkdir irrlicht
- cd irrlicht
......@@ -119,11 +119,11 @@ mat_windows:
script:
- apt update; apt -y install wget tar patch p7zip-full
# premake5.exe
- wget https://cdn01.moecube.com/ygopro-build-materials/premake-5.0.0-alpha14-windows.zip
- 7z x -y premake-5.0.0-alpha14-windows.zip
- wget https://cdn01.moecube.com/ygopro-build-materials/premake-5.0.0-beta1-windows.zip
- 7z x -y premake-5.0.0-beta1-windows.zip
# event
- wget -O - https://cdn01.moecube.com/ygopro-build-materials/libevent-2.0.22-stable.tar.gz | tar zfx -
- mv libevent-2.0.22-stable event ; cp -rf event/WIN32-Code/* event/include
- mv libevent-2.0.22-stable event
# irrlicht
- git clone --depth=1 https://code.mycard.moe/mycard/irrlicht-new irrlicht
artifacts:
......@@ -141,7 +141,7 @@ exec_windows:
- mat_irrklang
- mat_windows
variables:
irrklang_pro: '1'
IRRKLANG_PRO: '1'
USE_IRRKLANG: "1"
cache:
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
......
project "clzma"
kind "StaticLib"
files { "**.c", "**.h" }
files { "*.c", "*.h" }
project "cspmemvfs"
kind "StaticLib"
files { "**.c", "**.h" }
files { "*.c", "*.h" }
configuration "windows"
if BUILD_SQLITE then
includedirs { "../../sqlite3" }
end
Subproject commit 2caa39734a468d4b0c5b3fe37d2179aa533301ce
Subproject commit b2fe87f60fa39a3e74c7626c3ed65144bbdc4b11
......@@ -8,5 +8,6 @@ project "event"
"evmap.c", "log.c", "evutil.c", "evutil_rand.c", "strlcpy.c", "signal.c",
"event_tagging.c", "http.c", "evdns.c", "evrpc.c" }
configuration "windows"
filter "system:windows"
prebuildcommands { "xcopy /E /Y $(ProjectDir)..\\event\\WIN32-Code $(ProjectDir)..\\event\\include" }
files { "win32select.c", "evthread_win32.c", "buffer_iocp.c", "event_iocp.c", "bufferevent_async.c" }
......@@ -21,7 +21,6 @@ project "freetype"
"src/base/ftpfr.c",
"src/base/ftstroke.c",
"src/base/ftsynth.c",
"src/base/ftsystem.c",
"src/base/fttype1.c",
"src/base/ftwinfnt.c",
"src/bdf/bdf.c",
......@@ -37,13 +36,17 @@ project "freetype"
"src/psnames/psmodule.c",
"src/raster/raster.c",
"src/sfnt/sfnt.c",
"src/sdf/sdf.c",
"src/smooth/smooth.c",
"src/truetype/truetype.c",
"src/type1/type1.c",
"src/type42/type42.c",
"src/winfonts/winfnt.c" }
configuration "windows"
files { "builds/windows/ftdebug.c" }
configuration "not windows"
files { "src/base/ftdebug.c" }
filter "system:windows"
files { "builds/windows/ftsystem.c",
"builds/windows/ftdebug.c" }
filter "not system:windows"
files { "src/base/ftsystem.c",
"src/base/ftdebug.c" }
......@@ -13,8 +13,8 @@ BLOCK "080404b0"
BEGIN
VALUE "FileDescription", "YGOPro"
VALUE "InternalName", "YGOPro"
VALUE "LegalCopyright", "Copyright (C) 2021 Fluorohydride"
VALUE "OriginalFilename", "ygopro.exe"
VALUE "LegalCopyright", "Copyright (C) 2022 Fluorohydride"
VALUE "OriginalFilename", "YGOPro.exe"
VALUE "ProductName", "YGOPro"
VALUE "FileVersion", "1.035.3"
VALUE "ProductVersion", "1.035.3"
......
diff --git a/include/IOSOperator.h b/include/IOSOperator.h
index 2ab75a1..b574950 100644
--- a/include/IOSOperator.h
+++ b/include/IOSOperator.h
@@ -26,11 +26,11 @@ public:
}
//! Copies text to the clipboard
- virtual void copyToClipboard(const c8* text) const = 0;
+ virtual void copyToClipboard(const c16* text) const = 0;
//! Get text from the clipboard
/** \return Returns 0 if no string is in there. */
- virtual const c8* getTextFromClipboard() const = 0;
+ virtual const c16* getTextFromClipboard() const = 0;
//! Get the processor speed in megahertz
/** \param MHz The integer variable to store the speed in.
diff --git a/include/irrString.h b/include/irrString.h
index 43557cd..ffa06bc 100644
--- a/include/irrString.h
+++ b/include/irrString.h
@@ -1360,6 +1360,15 @@ typedef string<c8> stringc;
//! Typedef for wide character strings
typedef string<wchar_t> stringw;
+//! wrap of mbstowcs
+static inline wchar_t* toWideChar(const char* p)
+{
+ size_t lenOld = strlen(p);
+ wchar_t* ws = new wchar_t[lenOld + 1];
+ size_t lenNew = mbstowcs(ws, p, lenOld);
+ ws[lenNew] = 0;
+ return ws;
+}
} // end namespace core
} // end namespace irr
diff --git a/include/irrTypes.h b/include/irrTypes.h
index 403f890..940e859 100644
--- a/include/irrTypes.h
+++ b/include/irrTypes.h
@@ -48,6 +48,9 @@ typedef __int16 s16;
typedef signed short s16;
#endif
+//! 16 bit character variable.
+/** This is a typedef for wchar_t, it ensures portability of the engine. */
+typedef wchar_t c16;
//! 32 bit unsigned variable.
diff --git a/source/Irrlicht/CGUIEditBox.cpp b/source/Irrlicht/CGUIEditBox.cpp
index 395fb69..cc6b75f 100644
--- a/source/Irrlicht/CGUIEditBox.cpp
+++ b/source/Irrlicht/CGUIEditBox.cpp
@@ -287,7 +287,7 @@ bool CGUIEditBox::processKey(const SEvent& event)
const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd;
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
- core::stringc s;
+ core::stringw s;
s = Text.subString(realmbgn, realmend - realmbgn).c_str();
Operator->copyToClipboard(s.c_str());
}
@@ -300,7 +300,7 @@ bool CGUIEditBox::processKey(const SEvent& event)
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
// copy
- core::stringc sc;
+ core::stringw sc;
sc = Text.subString(realmbgn, realmend - realmbgn).c_str();
Operator->copyToClipboard(sc.c_str());
@@ -330,16 +330,10 @@ bool CGUIEditBox::processKey(const SEvent& event)
const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin;
// add new character
- const c8* p = Operator->getTextFromClipboard();
+ const c16* p = Operator->getTextFromClipboard();
if (p)
{
- // TODO: we should have such a function in core::string
- size_t lenOld = strlen(p);
- wchar_t *ws = new wchar_t[lenOld + 1];
- size_t len = mbstowcs(ws,p,lenOld);
- ws[len] = 0;
- irr::core::stringw widep(ws);
- delete[] ws;
+ irr::core::stringw widep(p);
if (MarkBegin == MarkEnd)
{
@@ -664,6 +658,16 @@ bool CGUIEditBox::processKey(const SEvent& event)
case KEY_ESCAPE:
case KEY_TAB:
case KEY_SHIFT:
+ case KEY_LSHIFT:
+ case KEY_RSHIFT:
+ case KEY_MENU:
+ case KEY_LMENU:
+ case KEY_RMENU:
+ case KEY_LWIN:
+ case KEY_RWIN:
+ case KEY_CAPITAL:
+ case KEY_NUMLOCK:
+ case KEY_SCROLL:
case KEY_F1:
case KEY_F2:
case KEY_F3:
diff --git a/source/Irrlicht/CGUIListBox.cpp b/source/Irrlicht/CGUIListBox.cpp
index 2c19a43..eb834a4 100644
--- a/source/Irrlicht/CGUIListBox.cpp
+++ b/source/Irrlicht/CGUIListBox.cpp
@@ -425,7 +425,7 @@ bool CGUIListBox::OnEvent(const SEvent& event)
}
case EMIE_MOUSE_MOVED:
- if (Selecting || MoveOverSelect)
+ if (MoveOverSelect)
{
if (isPointInside(p))
{
diff --git a/source/Irrlicht/CIrrDeviceLinux.cpp b/source/Irrlicht/CIrrDeviceLinux.cpp
index 39b1888..d359957 100644
--- a/source/Irrlicht/CIrrDeviceLinux.cpp
+++ b/source/Irrlicht/CIrrDeviceLinux.cpp
@@ -63,6 +63,7 @@ namespace
Atom X_ATOM_TARGETS;
Atom X_ATOM_UTF8_STRING;
Atom X_ATOM_TEXT;
+ Atom X_ATOM_XSEL_DATA;
};
namespace irr
@@ -1106,11 +1107,14 @@ bool CIrrDeviceLinux::run()
{
XEvent respond;
XSelectionRequestEvent *req = &(event.xselectionrequest);
- if ( req->target == XA_STRING)
+ if ( req->target == XA_STRING
+ || req->target == X_ATOM_TEXT
+ || req->target == X_ATOM_UTF8_STRING )
{
XChangeProperty (display,
req->requestor,
- req->property, req->target,
+ req->property,
+ req->target == X_ATOM_TEXT ? XA_STRING : req->target,
8, // format
PropModeReplace,
(unsigned char*) Clipboard.c_str(),
@@ -1124,11 +1128,14 @@ bool CIrrDeviceLinux::run()
data[0] = X_ATOM_TEXT;
data[1] = XA_STRING;
- XChangeProperty (display, req->requestor,
- req->property, req->target,
- 8, PropModeReplace,
- (unsigned char *) &data,
- sizeof (data));
+ XChangeProperty (display,
+ req->requestor,
+ req->property,
+ XA_ATOM,
+ 32, // format
+ PropModeReplace,
+ (unsigned char *) &X_ATOM_UTF8_STRING,
+ 1);
respond.xselection.property = req->property;
}
else
@@ -1875,34 +1882,36 @@ const c8* CIrrDeviceLinux::getTextFromClipboard() const
Clipboard = "";
if (ownerWindow != None )
{
- XConvertSelection (display, X_ATOM_CLIPBOARD, XA_STRING, XA_PRIMARY, ownerWindow, CurrentTime);
- XFlush (display);
-
- // check for data
- Atom type;
- int format;
- unsigned long numItems, bytesLeft, dummy;
- unsigned char *data;
- XGetWindowProperty (display, ownerWindow,
- XA_PRIMARY, // property name
- 0, // offset
- 0, // length (we only check for data, so 0)
+ XConvertSelection (display, X_ATOM_CLIPBOARD, X_ATOM_UTF8_STRING, X_ATOM_XSEL_DATA, window, CurrentTime);
+ XSync (display, 0);
+ XEvent event;
+ do nanosleep ((const struct timespec[]){{0, 1L}}, NULL);
+ while (!XCheckTypedEvent (display, SelectionNotify, &event));
+ if ( (event.xselection.selection == X_ATOM_CLIPBOARD) && event.xselection.property )
+ {
+ Atom type;
+ int format;
+ unsigned long size, dummy;
+ unsigned char *data;
+ int result = XGetWindowProperty (event.xselection.display,
+ event.xselection.requestor,
+ event.xselection.property,
+ 0L, // offset
+ (~0L), // length (max)
0, // Delete 0==false
AnyPropertyType, // AnyPropertyType or property identifier
&type, // return type
&format, // return format
- &numItems, // number items
- &bytesLeft, // remaining bytes for partial reads
+ &size, // number items
+ &dummy, // remaining bytes for partial reads
&data); // data
- if ( bytesLeft > 0 )
- {
- // there is some data to get
- int result = XGetWindowProperty (display, ownerWindow, XA_PRIMARY, 0,
- bytesLeft, 0, AnyPropertyType, &type, &format,
- &numItems, &dummy, &data);
- if (result == Success)
- Clipboard = (irr::c8*)data;
- XFree (data);
+ if ( result == Success
+ && (type == X_ATOM_UTF8_STRING || type == XA_STRING) ) // not implemented: INCR (partial reads)
+ {
+ Clipboard = strndup((char*)data, size);
+ XFree (data);
+ }
+ XDeleteProperty (event.xselection.display, event.xselection.requestor, event.xselection.property);
}
}
@@ -1966,6 +1975,7 @@ void CIrrDeviceLinux::initXAtoms()
X_ATOM_TARGETS = XInternAtom(display, "TARGETS", False);
X_ATOM_UTF8_STRING = XInternAtom (display, "UTF8_STRING", False);
X_ATOM_TEXT = XInternAtom (display, "TEXT", False);
+ X_ATOM_XSEL_DATA = XInternAtom (display, "XSEL_DATA", False);
#endif
}
diff --git a/source/Irrlicht/CIrrDeviceWin32.cpp b/source/Irrlicht/CIrrDeviceWin32.cpp
index 28290cb..76dfea1 100644
--- a/source/Irrlicht/CIrrDeviceWin32.cpp
+++ b/source/Irrlicht/CIrrDeviceWin32.cpp
@@ -20,6 +20,8 @@
#include "COSOperator.h"
#include "dimension2d.h"
#include "IGUISpriteBank.h"
+#include "IGUIEnvironment.h"
+#include "IGUIElement.h"
#include <winuser.h>
#if defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)
#ifdef _IRR_COMPILE_WITH_DIRECTINPUT_JOYSTICK_
@@ -749,6 +751,24 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
return 0;
}
+ dev = getDeviceFromHWnd(hWnd);
+ if (dev)
+ {
+ irr::gui::IGUIElement* ele = dev->getGUIEnvironment()->getFocus();
+ if (!ele || (ele->getType() != irr::gui::EGUIET_EDIT_BOX) || !ele->isEnabled())
+ {
+ HIMC hIMC = ImmGetContext(hWnd);
+ if (hIMC)
+ {
+ ImmNotifyIME(hIMC, NI_COMPOSITIONSTR, CPS_COMPLETE, 0);
+ ImmReleaseContext(hWnd, hIMC);
+ }
+ ImmAssociateContextEx(hWnd, NULL, 0);
+ }
+ else
+ ImmAssociateContextEx(hWnd, NULL, IACE_DEFAULT);
+ }
+
switch (message)
{
case WM_PAINT:
@@ -773,7 +793,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
event.KeyInput.Key = (irr::EKEY_CODE)wParam;
event.KeyInput.PressedDown = (message==WM_KEYDOWN || message == WM_SYSKEYDOWN);
+#ifdef MAPVK_VSC_TO_VK_EX
+ const UINT MY_MAPVK_VSC_TO_VK_EX = MAPVK_VSC_TO_VK_EX;
+#else
const UINT MY_MAPVK_VSC_TO_VK_EX = 3; // MAPVK_VSC_TO_VK_EX should be in SDK according to MSDN, but isn't in mine.
+#endif
if ( event.KeyInput.Key == irr::KEY_SHIFT )
{
// this will fail on systems before windows NT/2000/XP, not sure _what_ will return there instead.
@@ -904,6 +928,53 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
KEYBOARD_INPUT_HKL = GetKeyboardLayout(0);
KEYBOARD_INPUT_CODEPAGE = LocaleIdToCodepage( LOWORD(KEYBOARD_INPUT_HKL) );
return 0;
+
+ case WM_IME_STARTCOMPOSITION:
+ {
+ dev = getDeviceFromHWnd(hWnd);
+ irr::gui::IGUIElement* ele = dev->getGUIEnvironment()->getFocus();
+ if (!ele)
+ break;
+ irr::core::position2di pos = ele->getAbsolutePosition().UpperLeftCorner;
+ COMPOSITIONFORM CompForm = { CFS_POINT, { pos.X, pos.Y + ele->getAbsolutePosition().getHeight() } };
+ HIMC hIMC = ImmGetContext(hWnd);
+ ImmSetCompositionWindow(hIMC, &CompForm);
+ ImmReleaseContext(hWnd, hIMC);
+ }
+ break;
+
+ case WM_IME_CHAR:
+ event.EventType = irr::EET_KEY_INPUT_EVENT;
+ event.KeyInput.PressedDown = true;
+#ifdef _UNICODE
+ event.KeyInput.Char = wParam;
+#else
+ BYTE ch[3];
+ if (wParam >> 8) {
+ ch[0] = wParam >> 8;
+ ch[1] = wParam & 0xff;
+ ch[2] = 0;
+ } else {
+ ch[0] = wParam;
+ ch[1] = 0;
+ }
+ WORD unicodeChar;
+ MultiByteToWideChar(
+ KEYBOARD_INPUT_CODEPAGE,
+ MB_PRECOMPOSED, // default
+ (LPCSTR)ch,
+ sizeof(wParam),
+ (WCHAR*)&unicodeChar,
+ 1);
+ event.KeyInput.Char = unicodeChar;
+#endif
+ event.KeyInput.Key = irr::KEY_ACCEPT;
+ event.KeyInput.Shift = 0;
+ event.KeyInput.Control = 0;
+ dev = getDeviceFromHWnd(hWnd);
+ if (dev)
+ dev->postEventFromUser(event);
+ return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
@@ -1797,8 +1868,8 @@ void CIrrDeviceWin32::handleSystemMessages()
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
- // No message translation because we don't use WM_CHAR and it would conflict with our
- // deadkey handling.
+ // conflict with deadkey handling.
+ TranslateMessage(&msg);
if (ExternalWindow && msg.hwnd == HWnd)
WndProc(HWnd, msg.message, msg.wParam, msg.lParam);
diff --git a/source/Irrlicht/COSOperator.cpp b/source/Irrlicht/COSOperator.cpp
index c5e4552..3b00628 100644
--- a/source/Irrlicht/COSOperator.cpp
+++ b/source/Irrlicht/COSOperator.cpp
@@ -9,6 +9,7 @@
#include <windows.h>
#endif
#else
+#include <locale.h>
#include <string.h>
#include <unistd.h>
#ifndef _IRR_SOLARIS_PLATFORM_
@@ -54,9 +55,10 @@ const core::stringc& COSOperator::getOperatingSystemVersion() const
//! copies text to the clipboard
-void COSOperator::copyToClipboard(const c8* text) const
+void COSOperator::copyToClipboard(const c16* text) const
{
- if (strlen(text)==0)
+ size_t len = wcslen(text);
+ if (len==0)
return;
// Windows version
@@ -68,15 +70,15 @@ void COSOperator::copyToClipboard(const c8* text) const
EmptyClipboard();
HGLOBAL clipbuffer;
- char * buffer;
+ wchar_t * buffer;
- clipbuffer = GlobalAlloc(GMEM_DDESHARE, strlen(text)+1);
- buffer = (char*)GlobalLock(clipbuffer);
+ clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(wchar_t) * (len + 1));
+ buffer = (wchar_t*)GlobalLock(clipbuffer);
- strcpy(buffer, text);
+ wcscpy(buffer, text);
GlobalUnlock(clipbuffer);
- SetClipboardData(CF_TEXT, clipbuffer);
+ SetClipboardData(CF_UNICODETEXT, clipbuffer);
CloseClipboard();
// MacOSX version
@@ -86,7 +88,18 @@ void COSOperator::copyToClipboard(const c8* text) const
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
if ( IrrDeviceLinux )
- IrrDeviceLinux->copyToClipboard(text);
+ {
+ size_t wlen = sizeof(wchar_t) * (len + 1);
+ char ctext[wlen];
+
+ char* oldLocale = setlocale(LC_CTYPE, NULL);
+ setlocale(LC_CTYPE, "");
+ size_t lenNew = wcstombs(ctext, text, wlen);
+ ctext[lenNew] = 0;
+ setlocale(LC_CTYPE, oldLocale);
+
+ IrrDeviceLinux->copyToClipboard(ctext);
+ }
#else
#endif
@@ -95,7 +108,7 @@ void COSOperator::copyToClipboard(const c8* text) const
//! gets text from the clipboard
//! \return Returns 0 if no string is in there.
-const c8* COSOperator::getTextFromClipboard() const
+const c16* COSOperator::getTextFromClipboard() const
{
#if defined(_IRR_XBOX_PLATFORM_)
return 0;
@@ -103,10 +116,10 @@ const c8* COSOperator::getTextFromClipboard() const
if (!OpenClipboard(NULL))
return 0;
- char * buffer = 0;
+ wchar_t * buffer = 0;
- HANDLE hData = GetClipboardData( CF_TEXT );
- buffer = (char*)GlobalLock( hData );
+ HANDLE hData = GetClipboardData( CF_UNICODETEXT );
+ buffer = (wchar_t*)GlobalLock( hData );
GlobalUnlock( hData );
CloseClipboard();
return buffer;
@@ -116,7 +129,16 @@ const c8* COSOperator::getTextFromClipboard() const
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_)
if ( IrrDeviceLinux )
- return IrrDeviceLinux->getTextFromClipboard();
+ {
+ const c8 * p = IrrDeviceLinux->getTextFromClipboard();
+
+ char* oldLocale = setlocale(LC_CTYPE, NULL);
+ setlocale(LC_CTYPE, "");
+ wchar_t* ws = core::toWideChar(p);
+ setlocale(LC_CTYPE, oldLocale);
+
+ return ws;
+ }
return 0;
#else
diff --git a/source/Irrlicht/COSOperator.h b/source/Irrlicht/COSOperator.h
index 819805f..a86cb6e 100644
--- a/source/Irrlicht/COSOperator.h
+++ b/source/Irrlicht/COSOperator.h
@@ -27,11 +27,11 @@ public:
virtual const core::stringc& getOperatingSystemVersion() const;
//! copies text to the clipboard
- virtual void copyToClipboard(const c8* text) const;
+ virtual void copyToClipboard(const c16* text) const;
//! gets text from the clipboard
//! \return Returns 0 if no string is in there.
- virtual const c8* getTextFromClipboard() const;
+ virtual const c16* getTextFromClipboard() const;
//! gets the processor speed in megahertz
//! \param Mhz:
diff --git a/source/Irrlicht/MacOSX/AppDelegate.h b/source/Irrlicht/MacOSX/AppDelegate.h
index ccb116d..29705f2 100644
--- a/source/Irrlicht/MacOSX/AppDelegate.h
+++ b/source/Irrlicht/MacOSX/AppDelegate.h
@@ -10,7 +10,7 @@
#import <Cocoa/Cocoa.h>
#import "CIrrDeviceMacOSX.h"
-@interface AppDelegate : NSObject
+@interface AppDelegate : NSTextView <NSApplicationDelegate>
{
BOOL _quit;
irr::CIrrDeviceMacOSX *_device;
diff --git a/source/Irrlicht/MacOSX/AppDelegate.mm b/source/Irrlicht/MacOSX/AppDelegate.mm
index 14a7f86..37f6a51 100644
--- a/source/Irrlicht/MacOSX/AppDelegate.mm
+++ b/source/Irrlicht/MacOSX/AppDelegate.mm
@@ -74,6 +74,35 @@
return (_quit);
}
+- (void)keyDown:(NSEvent *)event
+{
+ [self interpretKeyEvents:@[event]];
+}
+
+- (void)insertText:(id)string
+{
+ [self setString: @""];
+ if ([string isKindOfClass:[NSAttributedString class]])
+ {
+ _device->handleInputEvent([[string string] UTF8String]);
+ }
+ else
+ {
+ _device->handleInputEvent([string UTF8String]);
+ }
+}
+
+- (void)doCommandBySelector:(SEL)selector
+{
+ _device->processKeyEvent();
+}
+
+- (void)paste:(id)sender
+{
+ // TODO: pass the pasted string. Now we discard it otherwise it will be kept in the editbox.
+ [self setString: @""];
+}
+
@end
#endif // _IRR_COMPILE_WITH_OSX_DEVICE_
diff --git a/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.h b/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.h
index f629588..d2fefae 100644
--- a/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.h
+++ b/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.h
@@ -95,6 +95,8 @@ namespace irr
void setMouseLocation(int x, int y);
void setResize(int width, int height);
void setCursorVisible(bool visible);
+ void handleInputEvent(const char *str);
+ void processKeyEvent();
private:
diff --git a/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.mm b/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.mm
index 60da342..8fd8f4a 100644
--- a/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.mm
+++ b/source/Irrlicht/MacOSX/CIrrDeviceMacOSX.mm
@@ -592,6 +592,31 @@ void CIrrDeviceMacOSX::closeDevice()
CGLContext = NULL;
}
+void CIrrDeviceMacOSX::processKeyEvent()
+{
+ irr::SEvent ievent;
+ NSEvent *event = [[NSApplication sharedApplication] currentEvent];
+ postKeyEvent(event, ievent, true);
+}
+
+void CIrrDeviceMacOSX::handleInputEvent(const char *cStr)
+{
+ SEvent ievent;
+ irr::core::stringw widep(irr::core::toWideChar(cStr));
+
+ ievent.EventType = irr::EET_KEY_INPUT_EVENT;
+ ievent.KeyInput.Key = (irr::EKEY_CODE)0;
+ ievent.KeyInput.PressedDown = true;
+ ievent.KeyInput.Shift = false;
+ ievent.KeyInput.Control = false;
+
+ for (int i = 0; i < widep.size(); ++i)
+ {
+ ievent.KeyInput.Char = widep[i];
+ postEventFromUser(ievent);
+ }
+}
+
bool CIrrDeviceMacOSX::createWindow()
{
CGDisplayErr error;
@@ -721,14 +746,20 @@ bool CIrrDeviceMacOSX::createWindow()
[Window setDelegate:(id<NSWindowDelegate>)[NSApp delegate]];
if(CreationParams.DriverType == video::EDT_OPENGL)
+ {
+ [[Window contentView] setWantsBestResolutionOpenGLSurface:NO];
[OGLContext setView:[Window contentView]];
+ }
[Window setAcceptsMouseMovedEvents:TRUE];
[Window setIsVisible:TRUE];
[Window makeKeyAndOrderFront:nil];
}
else if(CreationParams.DriverType == video::EDT_OPENGL) //use another window for drawing
+ {
+ [(NSView*)CreationParams.WindowId setWantsBestResolutionOpenGLSurface:NO];
[OGLContext setView:(NSView*)CreationParams.WindowId];
+ }
if (CreationParams.DriverType == video::EDT_OPENGL)
CGLContext = (CGLContextObj) [OGLContext CGLContextObj];
@@ -881,6 +912,8 @@ bool CIrrDeviceMacOSX::createWindow()
newSwapInterval = (CreationParams.Vsync) ? 1 : 0;
CGLSetParameter(CGLContext,kCGLCPSwapInterval,&newSwapInterval);
}
+
+ [[Window contentView] addSubview:(AppDelegate*)[NSApp delegate]];
}
return (result);
@@ -971,6 +1004,41 @@ bool CIrrDeviceMacOSX::run()
os::Timer::tick();
storeMouseLocation();
+ auto focusElement = getGUIEnvironment()->getFocus();
+ bool editing = focusElement && focusElement->getType() == irr::gui::EGUIET_EDIT_BOX;
+ auto textView = (NSTextView*)[NSApp delegate];
+
+ if (!editing)
+ {
+ [textView setHidden:YES];
+ [Window makeFirstResponder:nil];
+ }
+ else
+ {
+ auto crect = focusElement->getAbsolutePosition();
+
+ // ensure font height enough to fill the rect, otherwize ime window will overlaps the edit box
+ [textView setFont:[NSFont userFontOfSize:crect.getHeight() - 5]];
+
+ // change origin from top left to bottom right
+ auto frameHeight = [[textView superview] frame].size.height;
+ NSRect rect = {
+ (frameHeight - crect.LowerRightCorner.Y > crect.getHeight()) ?
+ crect.UpperLeftCorner.X :
+ crect.UpperLeftCorner.X + crect.getWidth() / 2,
+ (frameHeight - crect.LowerRightCorner.Y > crect.getHeight()) ?
+ frameHeight - crect.LowerRightCorner.Y - crect.getHeight() - 1 :
+ frameHeight - crect.LowerRightCorner.Y,
+ crect.getWidth() / 2,
+ crect.getHeight(),
+ };
+ [textView setFrame:rect];
+ [textView setHidden:NO];
+
+ // start to receive input events
+ [Window makeFirstResponder:textView];
+ }
+
event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
if (event != nil)
{
@@ -979,6 +1047,13 @@ bool CIrrDeviceMacOSX::run()
switch([(NSEvent *)event type])
{
case NSKeyDown:
+ if (editing)
+ {
+ // delegate to text edit control to handle text input
+ [NSApp sendEvent:event];
+ break;
+ }
+
postKeyEvent(event,ievent,true);
break;
@@ -1174,13 +1249,11 @@ void CIrrDeviceMacOSX::postKeyEvent(void *event,irr::SEvent &ievent,bool pressed
std::map<int,int>::const_iterator iter;
unsigned int result,c,mkey,mchar;
const unsigned char *cStr;
- BOOL skipCommand;
str = [(NSEvent *)event characters];
if ((str != nil) && ([str length] > 0))
{
mkey = mchar = 0;
- skipCommand = false;
c = [str characterAtIndex:0];
mchar = c;
@@ -1199,19 +1272,11 @@ void CIrrDeviceMacOSX::postKeyEvent(void *event,irr::SEvent &ievent,bool pressed
}
else
{
- cStr = (unsigned char *)[str cStringUsingEncoding:NSWindowsCP1252StringEncoding];
+ cStr = (unsigned char *)[str UTF8String];
if (cStr != NULL && strlen((char*)cStr) > 0)
{
mchar = cStr[0];
mkey = toupper(mchar);
- if ([(NSEvent *)event modifierFlags] & NSCommandKeyMask)
- {
- if (mkey == 'C' || mkey == 'V' || mkey == 'X')
- {
- mchar = 0;
- skipCommand = true;
- }
- }
}
}
}
@@ -1220,14 +1285,9 @@ void CIrrDeviceMacOSX::postKeyEvent(void *event,irr::SEvent &ievent,bool pressed
ievent.KeyInput.Key = (irr::EKEY_CODE)mkey;
ievent.KeyInput.PressedDown = pressed;
ievent.KeyInput.Shift = ([(NSEvent *)event modifierFlags] & NSShiftKeyMask) != 0;
- ievent.KeyInput.Control = ([(NSEvent *)event modifierFlags] & NSControlKeyMask) != 0;
+ ievent.KeyInput.Control = ([(NSEvent *)event modifierFlags] & (NSControlKeyMask | NSCommandKeyMask)) != 0;
ievent.KeyInput.Char = mchar;
- if (skipCommand)
- ievent.KeyInput.Control = true;
- else if ([(NSEvent *)event modifierFlags] & NSCommandKeyMask)
- [NSApp sendEvent:(NSEvent *)event];
-
postEventFromUser(ievent);
}
}
diff --git a/source/Irrlicht/MacOSX/MacOSX.xcodeproj/project.pbxproj b/source/Irrlicht/MacOSX/MacOSX.xcodeproj/project.pbxproj
index 65f4cec..d465792 100644
--- a/source/Irrlicht/MacOSX/MacOSX.xcodeproj/project.pbxproj
+++ b/source/Irrlicht/MacOSX/MacOSX.xcodeproj/project.pbxproj
@@ -6088,10 +6088,12 @@
1DEB922308733DC00010E9CD /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ARCHS = "$(NATIVE_ARCH_ACTUAL)";
+ ARCHS = "$(ARCHS_STANDARD)";
+ GCC_PREPROCESSOR_DEFINITIONS = GLES_SILENCE_DEPRECATION;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = NO;
HEADER_SEARCH_PATHS = ../../../include;
+ MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_CFLAGS = (
"-DMACOSX",
"-D_DEBUG",
@@ -6104,16 +6106,18 @@
1DEB922408733DC00010E9CD /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
- ARCHS = "$(NATIVE_ARCH_ACTUAL)";
+ ARCHS = "$(ARCHS_STANDARD)";
GCC_DYNAMIC_NO_PIC = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_PREPROCESSOR_DEFINITIONS = GLES_SILENCE_DEPRECATION;
GCC_SYMBOLS_PRIVATE_EXTERN = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = NO;
HEADER_SEARCH_PATHS = ../../../include;
INSTALL_MODE_FLAG = "a+rwx";
+ MACOSX_DEPLOYMENT_TARGET = 10.10;
OTHER_CFLAGS = "-DMACOSX";
PREBINDING = NO;
SDKROOT = "";
diff --git a/source/Irrlicht/MacOSX/OSXClipboard.h b/source/Irrlicht/MacOSX/OSXClipboard.h
index 68f598d..9d6832d 100644
--- a/source/Irrlicht/MacOSX/OSXClipboard.h
+++ b/source/Irrlicht/MacOSX/OSXClipboard.h
@@ -7,8 +7,8 @@
extern "C" {
#endif
- void OSXCopyToClipboard(const char *text);
- char* OSXCopyFromClipboard();
+ void OSXCopyToClipboard(const wchar_t *text);
+ wchar_t* OSXCopyFromClipboard();
#ifdef __cplusplus
}
diff --git a/source/Irrlicht/MacOSX/OSXClipboard.mm b/source/Irrlicht/MacOSX/OSXClipboard.mm
index d549911..1c9dc0f 100644
--- a/source/Irrlicht/MacOSX/OSXClipboard.mm
+++ b/source/Irrlicht/MacOSX/OSXClipboard.mm
@@ -3,34 +3,35 @@
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in Irrlicht.h
+#include "irrString.h"
#include "OSXClipboard.h"
#import <Cocoa/Cocoa.h>
-void OSXCopyToClipboard(const char *text)
+void OSXCopyToClipboard(const wchar_t *text)
{
NSString *str;
NSPasteboard *board;
- if ((text != NULL) && (strlen(text) > 0))
+ if ((text != NULL) && (wcslen(text) > 0))
{
- str = [NSString stringWithCString:text encoding:NSWindowsCP1252StringEncoding];
+ str = [[NSString alloc] initWithBytes:text length:wcslen(text)*sizeof(*text) encoding:NSUTF32LittleEndianStringEncoding];
board = [NSPasteboard generalPasteboard];
[board declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:NSApp];
[board setString:str forType:NSStringPboardType];
}
}
-char* OSXCopyFromClipboard()
+wchar_t* OSXCopyFromClipboard()
{
NSString* str;
NSPasteboard* board;
- char* result;
+ wchar_t* result;
result = NULL;
board = [NSPasteboard generalPasteboard];
str = [board stringForType:NSStringPboardType];
if (str != nil)
- result = (char*)[str cStringUsingEncoding:NSWindowsCP1252StringEncoding];
+ result = (wchar_t*)[str cStringUsingEncoding:NSUTF32LittleEndianStringEncoding];
return (result);
}
project "irrlicht"
kind "StaticLib"
includedirs { "include", "source/Irrlicht", "source/Irrlicht/jpeglib", "source/Irrlicht/libpng", "source/Irrlicht/zlib" }
defines { "_IRR_STATIC_LIB_" }
exceptionhandling "Off"
rtti "Off"
files { "source/Irrlicht/CCgMaterialRenderer.cpp",
"source/Irrlicht/CD3D9CgMaterialRenderer.cpp",
"source/Irrlicht/CDefaultSceneNodeAnimatorFactory.cpp",
"source/Irrlicht/CDefaultSceneNodeFactory.cpp",
"source/Irrlicht/CGeometryCreator.cpp",
"source/Irrlicht/CMeshCache.cpp",
"source/Irrlicht/CMeshManipulator.cpp",
"source/Irrlicht/COpenGLCgMaterialRenderer.cpp",
"source/Irrlicht/CSceneManager.cpp",
"source/Irrlicht/C3DSMeshFileLoader.cpp",
"source/Irrlicht/CSMFMeshFileLoader.cpp",
"source/Irrlicht/CAnimatedMeshHalfLife.cpp",
"source/Irrlicht/CAnimatedMeshMD2.cpp",
"source/Irrlicht/CAnimatedMeshMD3.cpp",
"source/Irrlicht/CB3DMeshFileLoader.cpp",
"source/Irrlicht/CBSPMeshFileLoader.cpp",
"source/Irrlicht/CColladaFileLoader.cpp",
"source/Irrlicht/CCSMLoader.cpp",
"source/Irrlicht/CDMFLoader.cpp",
"source/Irrlicht/CIrrMeshFileLoader.cpp",
"source/Irrlicht/CLMTSMeshFileLoader.cpp",
"source/Irrlicht/CLWOMeshFileLoader.cpp",
"source/Irrlicht/CMD2MeshFileLoader.cpp",
"source/Irrlicht/CMD3MeshFileLoader.cpp",
"source/Irrlicht/CMS3DMeshFileLoader.cpp",
"source/Irrlicht/CMY3DMeshFileLoader.cpp",
"source/Irrlicht/COBJMeshFileLoader.cpp",
"source/Irrlicht/COCTLoader.cpp",
"source/Irrlicht/COgreMeshFileLoader.cpp",
"source/Irrlicht/CPLYMeshFileLoader.cpp",
"source/Irrlicht/CQ3LevelMesh.cpp",
"source/Irrlicht/CSkinnedMesh.cpp",
"source/Irrlicht/CSTLMeshFileLoader.cpp",
"source/Irrlicht/CXMeshFileLoader.cpp",
"source/Irrlicht/CAnimatedMeshSceneNode.cpp",
"source/Irrlicht/CBillboardSceneNode.cpp",
"source/Irrlicht/CBoneSceneNode.cpp",
"source/Irrlicht/CCameraSceneNode.cpp",
"source/Irrlicht/CCubeSceneNode.cpp",
"source/Irrlicht/CDummyTransformationSceneNode.cpp",
"source/Irrlicht/CEmptySceneNode.cpp",
"source/Irrlicht/CLightSceneNode.cpp",
"source/Irrlicht/CMeshSceneNode.cpp",
"source/Irrlicht/COctreeSceneNode.cpp",
"source/Irrlicht/CQuake3ShaderSceneNode.cpp",
"source/Irrlicht/CShadowVolumeSceneNode.cpp",
"source/Irrlicht/CSkyBoxSceneNode.cpp",
"source/Irrlicht/CSkyDomeSceneNode.cpp",
"source/Irrlicht/CSphereSceneNode.cpp",
"source/Irrlicht/CTerrainSceneNode.cpp",
"source/Irrlicht/CTextSceneNode.cpp",
"source/Irrlicht/CVolumeLightSceneNode.cpp",
"source/Irrlicht/CWaterSurfaceSceneNode.cpp",
"source/Irrlicht/CParticleAnimatedMeshSceneNodeEmitter.cpp",
"source/Irrlicht/CParticleAttractionAffector.cpp",
"source/Irrlicht/CParticleBoxEmitter.cpp",
"source/Irrlicht/CParticleCylinderEmitter.cpp",
"source/Irrlicht/CParticleFadeOutAffector.cpp",
"source/Irrlicht/CParticleGravityAffector.cpp",
"source/Irrlicht/CParticleMeshEmitter.cpp",
"source/Irrlicht/CParticlePointEmitter.cpp",
"source/Irrlicht/CParticleRingEmitter.cpp",
"source/Irrlicht/CParticleRotationAffector.cpp",
"source/Irrlicht/CParticleScaleAffector.cpp",
"source/Irrlicht/CParticleSphereEmitter.cpp",
"source/Irrlicht/CParticleSystemSceneNode.cpp",
"source/Irrlicht/CMetaTriangleSelector.cpp",
"source/Irrlicht/COctreeTriangleSelector.cpp",
"source/Irrlicht/CSceneCollisionManager.cpp",
"source/Irrlicht/CTerrainTriangleSelector.cpp",
"source/Irrlicht/CTriangleBBSelector.cpp",
"source/Irrlicht/CTriangleSelector.cpp",
"source/Irrlicht/CSceneLoaderIrr.cpp",
"source/Irrlicht/CSceneNodeAnimatorCameraFPS.cpp",
"source/Irrlicht/CSceneNodeAnimatorCameraMaya.cpp",
"source/Irrlicht/CSceneNodeAnimatorCollisionResponse.cpp",
"source/Irrlicht/CSceneNodeAnimatorDelete.cpp",
"source/Irrlicht/CSceneNodeAnimatorFlyCircle.cpp",
"source/Irrlicht/CSceneNodeAnimatorFlyStraight.cpp",
"source/Irrlicht/CSceneNodeAnimatorFollowSpline.cpp",
"source/Irrlicht/CSceneNodeAnimatorRotation.cpp",
"source/Irrlicht/CSceneNodeAnimatorTexture.cpp",
"source/Irrlicht/CColladaMeshWriter.cpp",
"source/Irrlicht/CIrrMeshWriter.cpp",
"source/Irrlicht/COBJMeshWriter.cpp",
"source/Irrlicht/CPLYMeshWriter.cpp",
"source/Irrlicht/CSTLMeshWriter.cpp",
"source/Irrlicht/CVideoModeList.cpp",
"source/Irrlicht/CSoftwareDriver.cpp",
"source/Irrlicht/CSoftwareTexture.cpp",
"source/Irrlicht/CTRFlat.cpp",
"source/Irrlicht/CTRFlatWire.cpp",
"source/Irrlicht/CTRGouraud.cpp",
"source/Irrlicht/CTRGouraudWire.cpp",
"source/Irrlicht/CTRTextureFlat.cpp",
"source/Irrlicht/CTRTextureFlatWire.cpp",
"source/Irrlicht/CTRTextureGouraud.cpp",
"source/Irrlicht/CTRTextureGouraudAdd.cpp",
"source/Irrlicht/CTRTextureGouraudNoZ.cpp",
"source/Irrlicht/CTRTextureGouraudWire.cpp",
"source/Irrlicht/CZBuffer.cpp",
"source/Irrlicht/COpenGLDriver.cpp",
"source/Irrlicht/COpenGLExtensionHandler.cpp",
"source/Irrlicht/COpenGLNormalMapRenderer.cpp",
"source/Irrlicht/COpenGLParallaxMapRenderer.cpp",
"source/Irrlicht/COpenGLShaderMaterialRenderer.cpp",
"source/Irrlicht/COpenGLSLMaterialRenderer.cpp",
"source/Irrlicht/COpenGLTexture.cpp",
"source/Irrlicht/CD3D8Driver.cpp",
"source/Irrlicht/CD3D8NormalMapRenderer.cpp",
"source/Irrlicht/CD3D8ParallaxMapRenderer.cpp",
"source/Irrlicht/CD3D8ShaderMaterialRenderer.cpp",
"source/Irrlicht/CD3D8Texture.cpp",
"source/Irrlicht/CColorConverter.cpp",
"source/Irrlicht/CFPSCounter.cpp",
"source/Irrlicht/CImage.cpp",
"source/Irrlicht/CNullDriver.cpp",
"source/Irrlicht/CImageWriterBMP.cpp",
"source/Irrlicht/CImageWriterJPG.cpp",
"source/Irrlicht/CImageWriterPCX.cpp",
"source/Irrlicht/CImageWriterPNG.cpp",
"source/Irrlicht/CImageWriterPPM.cpp",
"source/Irrlicht/CImageWriterPSD.cpp",
"source/Irrlicht/CImageWriterTGA.cpp",
"source/Irrlicht/CImageLoaderBMP.cpp",
"source/Irrlicht/CImageLoaderDDS.cpp",
"source/Irrlicht/CImageLoaderJPG.cpp",
"source/Irrlicht/CImageLoaderPCX.cpp",
"source/Irrlicht/CImageLoaderPNG.cpp",
"source/Irrlicht/CImageLoaderPPM.cpp",
"source/Irrlicht/CImageLoaderPSD.cpp",
"source/Irrlicht/CImageLoaderRGB.cpp",
"source/Irrlicht/CImageLoaderTGA.cpp",
"source/Irrlicht/CImageLoaderWAL.cpp",
"source/Irrlicht/CD3D9Driver.cpp",
"source/Irrlicht/CD3D9HLSLMaterialRenderer.cpp",
"source/Irrlicht/CD3D9NormalMapRenderer.cpp",
"source/Irrlicht/CD3D9ParallaxMapRenderer.cpp",
"source/Irrlicht/CD3D9ShaderMaterialRenderer.cpp",
"source/Irrlicht/CD3D9Texture.cpp",
"source/Irrlicht/CBurningShader_Raster_Reference.cpp",
"source/Irrlicht/CDepthBuffer.cpp",
"source/Irrlicht/CSoftwareDriver2.cpp",
"source/Irrlicht/CSoftwareTexture2.cpp",
"source/Irrlicht/CTRGouraud2.cpp",
"source/Irrlicht/CTRGouraudAlpha2.cpp",
"source/Irrlicht/CTRGouraudAlphaNoZ2.cpp",
"source/Irrlicht/CTRNormalMap.cpp",
"source/Irrlicht/CTRStencilShadow.cpp",
"source/Irrlicht/CTRTextureBlend.cpp",
"source/Irrlicht/CTRTextureDetailMap2.cpp",
"source/Irrlicht/CTRTextureGouraud2.cpp",
"source/Irrlicht/CTRTextureGouraudAdd2.cpp",
"source/Irrlicht/CTRTextureGouraudAddNoZ2.cpp",
"source/Irrlicht/CTRTextureGouraudAlpha.cpp",
"source/Irrlicht/CTRTextureGouraudAlphaNoZ.cpp",
"source/Irrlicht/CTRTextureGouraudNoZ2.cpp",
"source/Irrlicht/CTRTextureGouraudVertexAlpha2.cpp",
"source/Irrlicht/CTRTextureLightMap2_Add.cpp",
"source/Irrlicht/CTRTextureLightMap2_M1.cpp",
"source/Irrlicht/CTRTextureLightMap2_M2.cpp",
"source/Irrlicht/CTRTextureLightMap2_M4.cpp",
"source/Irrlicht/CTRTextureLightMapGouraud2_M4.cpp",
"source/Irrlicht/CTRTextureWire2.cpp",
"source/Irrlicht/IBurningShader.cpp",
"source/Irrlicht/CLogger.cpp",
"source/Irrlicht/COSOperator.cpp",
"source/Irrlicht/Irrlicht.cpp",
"source/Irrlicht/os.cpp",
"source/Irrlicht/lzma/LzmaDec.c",
"source/Irrlicht/zlib/adler32.c",
"source/Irrlicht/zlib/compress.c",
"source/Irrlicht/zlib/crc32.c",
"source/Irrlicht/zlib/deflate.c",
"source/Irrlicht/zlib/inffast.c",
"source/Irrlicht/zlib/inflate.c",
"source/Irrlicht/zlib/inftrees.c",
"source/Irrlicht/zlib/trees.c",
"source/Irrlicht/zlib/uncompr.c",
"source/Irrlicht/zlib/zutil.c",
"source/Irrlicht/jpeglib/jaricom.c",
"source/Irrlicht/jpeglib/jcapimin.c",
"source/Irrlicht/jpeglib/jcapistd.c",
"source/Irrlicht/jpeglib/jcarith.c",
"source/Irrlicht/jpeglib/jccoefct.c",
"source/Irrlicht/jpeglib/jccolor.c",
"source/Irrlicht/jpeglib/jcdctmgr.c",
"source/Irrlicht/jpeglib/jchuff.c",
"source/Irrlicht/jpeglib/jcinit.c",
"source/Irrlicht/jpeglib/jcmainct.c",
"source/Irrlicht/jpeglib/jcmarker.c",
"source/Irrlicht/jpeglib/jcmaster.c",
"source/Irrlicht/jpeglib/jcomapi.c",
"source/Irrlicht/jpeglib/jcparam.c",
"source/Irrlicht/jpeglib/jcprepct.c",
"source/Irrlicht/jpeglib/jcsample.c",
"source/Irrlicht/jpeglib/jctrans.c",
"source/Irrlicht/jpeglib/jdapimin.c",
"source/Irrlicht/jpeglib/jdapistd.c",
"source/Irrlicht/jpeglib/jdarith.c",
"source/Irrlicht/jpeglib/jdatadst.c",
"source/Irrlicht/jpeglib/jdatasrc.c",
"source/Irrlicht/jpeglib/jdcoefct.c",
"source/Irrlicht/jpeglib/jdcolor.c",
"source/Irrlicht/jpeglib/jddctmgr.c",
"source/Irrlicht/jpeglib/jdhuff.c",
"source/Irrlicht/jpeglib/jdinput.c",
"source/Irrlicht/jpeglib/jdmainct.c",
"source/Irrlicht/jpeglib/jdmarker.c",
"source/Irrlicht/jpeglib/jdmaster.c",
"source/Irrlicht/jpeglib/jdmerge.c",
"source/Irrlicht/jpeglib/jdpostct.c",
"source/Irrlicht/jpeglib/jdsample.c",
"source/Irrlicht/jpeglib/jdtrans.c",
"source/Irrlicht/jpeglib/jerror.c",
"source/Irrlicht/jpeglib/jfdctflt.c",
"source/Irrlicht/jpeglib/jfdctfst.c",
"source/Irrlicht/jpeglib/jfdctint.c",
"source/Irrlicht/jpeglib/jidctflt.c",
"source/Irrlicht/jpeglib/jidctfst.c",
"source/Irrlicht/jpeglib/jidctint.c",
"source/Irrlicht/jpeglib/jmemmgr.c",
"source/Irrlicht/jpeglib/jmemnobs.c",
"source/Irrlicht/jpeglib/jquant1.c",
"source/Irrlicht/jpeglib/jquant2.c",
"source/Irrlicht/jpeglib/jutils.c",
"source/Irrlicht/libpng/png.c",
"source/Irrlicht/libpng/pngerror.c",
"source/Irrlicht/libpng/pngget.c",
"source/Irrlicht/libpng/pngmem.c",
"source/Irrlicht/libpng/pngpread.c",
"source/Irrlicht/libpng/pngread.c",
"source/Irrlicht/libpng/pngrio.c",
"source/Irrlicht/libpng/pngrtran.c",
"source/Irrlicht/libpng/pngrutil.c",
"source/Irrlicht/libpng/pngset.c",
"source/Irrlicht/libpng/pngtrans.c",
"source/Irrlicht/libpng/pngwio.c",
"source/Irrlicht/libpng/pngwrite.c",
"source/Irrlicht/libpng/pngwtran.c",
"source/Irrlicht/libpng/pngwutil.c",
"source/Irrlicht/aesGladman/aescrypt.cpp",
"source/Irrlicht/aesGladman/aeskey.cpp",
"source/Irrlicht/aesGladman/aestab.cpp",
"source/Irrlicht/aesGladman/fileenc.cpp",
"source/Irrlicht/aesGladman/hmac.cpp",
"source/Irrlicht/aesGladman/prng.cpp",
"source/Irrlicht/aesGladman/pwd2key.cpp",
"source/Irrlicht/aesGladman/sha1.cpp",
"source/Irrlicht/aesGladman/sha2.cpp",
"source/Irrlicht/bzip2/blocksort.c",
"source/Irrlicht/bzip2/bzcompress.c",
"source/Irrlicht/bzip2/bzlib.c",
"source/Irrlicht/bzip2/crctable.c",
"source/Irrlicht/bzip2/decompress.c",
"source/Irrlicht/bzip2/huffman.c",
"source/Irrlicht/bzip2/randtable.c",
"source/Irrlicht/CIrrDeviceConsole.cpp",
"source/Irrlicht/CIrrDeviceFB.cpp",
"source/Irrlicht/CIrrDeviceLinux.cpp",
"source/Irrlicht/CIrrDeviceSDL.cpp",
"source/Irrlicht/CIrrDeviceStub.cpp",
"source/Irrlicht/CIrrDeviceWin32.cpp",
"source/Irrlicht/CIrrDeviceWinCE.cpp",
"source/Irrlicht/CAttributes.cpp",
"source/Irrlicht/CFileList.cpp",
"source/Irrlicht/CFileSystem.cpp",
"source/Irrlicht/CLimitReadFile.cpp",
"source/Irrlicht/CMemoryFile.cpp",
"source/Irrlicht/CMountPointReader.cpp",
"source/Irrlicht/CNPKReader.cpp",
"source/Irrlicht/CPakReader.cpp",
"source/Irrlicht/CReadFile.cpp",
"source/Irrlicht/CTarReader.cpp",
"source/Irrlicht/CWADReader.cpp",
"source/Irrlicht/CWriteFile.cpp",
"source/Irrlicht/CXMLReader.cpp",
"source/Irrlicht/CXMLWriter.cpp",
"source/Irrlicht/CZipReader.cpp",
"source/Irrlicht/irrXML.cpp",
"source/Irrlicht/CDefaultGUIElementFactory.cpp",
"source/Irrlicht/CGUIButton.cpp",
"source/Irrlicht/CGUICheckBox.cpp",
"source/Irrlicht/CGUIColorSelectDialog.cpp",
"source/Irrlicht/CGUIComboBox.cpp",
"source/Irrlicht/CGUIContextMenu.cpp",
"source/Irrlicht/CGUIEditBox.cpp",
"source/Irrlicht/CGUIEnvironment.cpp",
"source/Irrlicht/CGUIFileOpenDialog.cpp",
"source/Irrlicht/CGUIFont.cpp",
"source/Irrlicht/CGUIImage.cpp",
"source/Irrlicht/CGUIImageList.cpp",
"source/Irrlicht/CGUIInOutFader.cpp",
"source/Irrlicht/CGUIListBox.cpp",
"source/Irrlicht/CGUIMenu.cpp",
"source/Irrlicht/CGUIMeshViewer.cpp",
"source/Irrlicht/CGUIMessageBox.cpp",
"source/Irrlicht/CGUIModalScreen.cpp",
"source/Irrlicht/CGUIScrollBar.cpp",
"source/Irrlicht/CGUISkin.cpp",
"source/Irrlicht/CGUISpinBox.cpp",
"source/Irrlicht/CGUISpriteBank.cpp",
"source/Irrlicht/CGUIStaticText.cpp",
"source/Irrlicht/CGUITabControl.cpp",
"source/Irrlicht/CGUITable.cpp",
"source/Irrlicht/CGUIToolBar.cpp",
"source/Irrlicht/CGUITreeView.cpp",
"source/Irrlicht/CGUIWindow.cpp" }
filter { "system:windows" }
defines { "_IRR_WCHAR_FILESYSTEM" }
includedirs { "$(DXSDK_DIR)include" }
libdirs { "$(DXSDK_DIR)Lib/x86" }
links { "imm32" }
filter { "system:linux" }
links { "X11", "Xxf86vm" }
project "lua"
kind "StaticLib"
files { "*.c", "*.cpp", "*.h", "*.hpp" }
removefiles { "lua.c", "luac.c" }
configuration "vs*"
buildoptions { "/TP" }
configuration "not vs*"
buildoptions { "-x c++" }
project "lua"
kind "StaticLib"
files { "src/*.c", "src/*.h", "src/*.hpp" }
removefiles { "src/lua.c", "src/luac.c" }
filter "action:vs*"
buildoptions { "/TP" }
filter "not action:vs*"
buildoptions { "-x c++" }
filter "system:bsd"
defines { "LUA_USE_POSIX" }
filter "system:macosx"
defines { "LUA_USE_MACOSX" }
filter "system:linux"
defines { "LUA_USE_LINUX" }
solution "ygo"
location "build"
language "C++"
objdir "obj"
configurations { "Debug", "Release" }
configuration "windows"
defines { "WIN32", "_WIN32", "WINVER=0x0501" }
configuration "bsd"
defines { "LUA_USE_POSIX" }
includedirs { "/usr/local/include" }
libdirs { "/usr/local/lib" }
configuration "macosx"
defines { "LUA_USE_MACOSX" }
includedirs { "/usr/local/include/*" }
libdirs { "/usr/local/lib", "/usr/X11/lib" }
buildoptions { "-stdlib=libc++" }
links {"OpenGL.framework","Cocoa.framework","IOKit.framework"}
configuration "linux"
defines { "LUA_USE_LINUX" }
configuration "vs*"
flags "EnableSSE2"
buildoptions { "-wd4996", "/utf-8" }
defines { "_CRT_SECURE_NO_WARNINGS" }
configuration "not vs*"
buildoptions { "-fno-strict-aliasing", "-Wno-format-security" }
configuration {"not vs*", "windows"}
buildoptions { "-static-libgcc" }
configuration "Debug"
flags "Symbols"
defines "_DEBUG"
targetdir "bin/debug"
configuration { "Release", "not vs*" }
flags "Symbols"
defines "NDEBUG"
buildoptions "-march=native"
configuration { "Release", "vs*" }
flags { "StaticRuntime", "LinkTimeOptimization" }
configuration "Release"
flags { "OptimizeSpeed" }
targetdir "bin/release"
include "ocgcore"
include "gframe"
if os.is("windows") then
include "lua"
include "event"
include "freetype"
include "irrlicht"
include "sqlite3"
end
......@@ -33,7 +33,7 @@ solution "ygo"
end
if (os.ishost("windows") or os.getenv("USE_IRRKLANG")) and not os.getenv("NO_IRRKLANG") then
USE_IRRKLANG = true
if os.getenv("irrklang_pro") then
if os.getenv("IRRKLANG_PRO") then
IRRKLANG_PRO = true
end
end
......
Subproject commit 97bbddc05f32aeab9127fdb50f93c2de380d51fd
Subproject commit c637be9669d4dfe2c5bd34bf1c93f717cb2fe321
......@@ -267,6 +267,7 @@
!system 1190 加入手卡
!system 1191 送去墓地
!system 1192 除外
!system 1193 回到卡组
#menu
!system 1200 联机模式
!system 1201 单人模式
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment