Jelajahi Sumber

Windows core key events, polybuild now properly removes file

Ivan Safrin 13 tahun lalu
induk
melakukan
6058f09c03

+ 2 - 0
Core/Contents/Include/PolyWinCore.h

@@ -249,6 +249,8 @@ public:
 
 	private:
 
+		bool checkSpecialKeyEvents(PolyKEY key);
+
 		unsigned int nextDeviceID;
 		PolyKEY keyMap[1024];
 		unsigned int lastGamepadDetect;

+ 38 - 1
Core/Contents/Source/PolyWinCore.cpp

@@ -627,6 +627,41 @@ void Win32Core::handleMouseUp(int mouseCode,LPARAM lParam, WPARAM wParam) {
 	unlockMutex(eventMutex);
 }
 
+bool Win32Core::checkSpecialKeyEvents(PolyKEY key) {
+	
+	if(key == KEY_a && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
+		dispatchEvent(new Event(), Core::EVENT_SELECT_ALL);
+		return true;
+	}
+	
+	if(key == KEY_c && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
+		dispatchEvent(new Event(), Core::EVENT_COPY);
+		return true;
+	}
+	
+	if(key == KEY_x && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
+		dispatchEvent(new Event(), Core::EVENT_CUT);
+		return true;
+	}
+	
+	
+	if(key == KEY_y && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
+		dispatchEvent(new Event(), Core::EVENT_REDO);
+		return true;
+	}
+		
+	if(key == KEY_z  && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
+		dispatchEvent(new Event(), Core::EVENT_UNDO);
+		return true;
+	}
+	
+	if(key == KEY_v && (input->getKeyState(KEY_LCTRL) || input->getKeyState(KEY_RCTRL))) {
+		dispatchEvent(new Event(), Core::EVENT_PASTE);
+		return true;
+	}
+	return false;
+}
+
 void Win32Core::checkEvents() {
 	lockMutex(eventMutex);
 	Win32Event event;
@@ -657,7 +692,9 @@ void Win32Core::checkEvents() {
 							input->setMouseButtonState(event.mouseButton, false, getTicks());
 					break;
 					case InputEvent::EVENT_KEYDOWN:
-						input->setKeyState(event.keyCode, (char)event.unicodeChar, true, getTicks());
+						if(!checkSpecialKeyEvents((event.keyCode))) {
+							input->setKeyState(event.keyCode, (char)event.unicodeChar, true, getTicks());
+						}
 					break;
 					case InputEvent::EVENT_KEYUP:
 						input->setKeyState(event.keyCode, (char)event.unicodeChar, false, getTicks());

+ 11 - 0
IDE/Contents/Include/PolycodeScreenEditor.h

@@ -27,6 +27,17 @@
 #include <PolycodeUI.h>
 #include "PolycodeProps.h"
 
+#if defined(__APPLE__) && defined(__MACH__)
+	#define COPYMOD_1 KEY_RALT
+	#define COPYMOD_2 KEY_LALT
+#elif defined _WINDOWS
+	#define COPYMOD_1 KEY_RCTRL
+	#define COPYMOD_2 KEY_LCTRL
+#else
+	#define COPYMOD_1 KEY_RCTRL
+	#define COPYMOD_2 KEY_LCTRL
+#endif
+
 using namespace Polycode;
 
 #ifdef _WINDOWS

+ 2 - 6
IDE/Contents/Source/PolycodeScreenEditor.cpp

@@ -1664,6 +1664,7 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 	
 	if(event->getDispatcher() == CoreServices::getInstance()->getCore()->getInput()) {
 		if(event->getEventCode() == InputEvent::EVENT_KEYDOWN) {
+			printf("KEY: %d\n", inputEvent->key);
 			switch(inputEvent->key) {
 				case Polycode::KEY_ESCAPE:
 					if(selectedEntity) {
@@ -1911,12 +1912,7 @@ void PolycodeScreenEditorMain::handleEvent(Event *event) {
 			{
 				if(firstMove) {
 					Core *core = CoreServices::getInstance()->getCore();
-
-#if (defined(__APPLE__) && defined(__MACH__)) || (defined(_WINDOWS))
-					if(core->getInput()->getKeyState(KEY_RCTRL) || core->getInput()->getKeyState(KEY_RCTRL)) {
-#else
-					if(core->getInput()->getKeyState(KEY_RCTRL) || core->getInput()->getKeyState(KEY_LCTRL)) {
-#endif
+					if(core->getInput()->getKeyState(COPYMOD_1) || core->getInput()->getKeyState(COPYMOD_2)) {
 						void *data;
 						String type = Copy(&data);
 						if(data) {

+ 8 - 1
Tools/Contents/polybuild/Source/polybuild.cpp

@@ -5,6 +5,7 @@
 
 #ifdef _WINDOWS
 	#include <windows.h>
+	#include <direct.h>
 #else
 	#include <dirent.h>
 	#include <sys/types.h>
@@ -425,7 +426,13 @@ int main(int argc, char **argv) {
 	
 	zipClose(z, "");	
 
+#ifdef _WINDOWS
+	char *buffer = _getcwd(NULL, 0);
+	String workingDir = String(buffer);
+	free(buffer);
+	OSBasics::removeItem(workingDir+"/runinfo_tmp_zzzz.polyrun");
+#else
 	OSBasics::removeItem("runinfo_tmp_zzzz.polyrun");
-
+#endif
 	return 0;
 }