focus event
This commit is contained in:
parent
917e638538
commit
780189a1a6
4 changed files with 37 additions and 11 deletions
|
|
@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
const decoder = new TextDecoder();
|
const decoder = new TextDecoder();
|
||||||
const encoder = new TextEncoder();
|
const encoder = new TextEncoder();
|
||||||
|
|
||||||
let memorycounter = -1;
|
let memorycounter = 0;
|
||||||
const jsmemory = new Map();
|
const jsmemory = new Map();
|
||||||
const eventHandlers = new Map();
|
const eventHandlers = new Map();
|
||||||
|
|
||||||
|
|
@ -188,7 +188,17 @@ function addFocusListener(ptr, handlerID) {
|
||||||
|
|
||||||
const handler = function (event) {
|
const handler = function (event) {
|
||||||
const { ExecuteFocusHandler } = window.crafter_webbuild_wasi.instance.exports;
|
const { ExecuteFocusHandler } = window.crafter_webbuild_wasi.instance.exports;
|
||||||
ExecuteFocusHandler(handlerID);
|
if(event.relatedTarget) {
|
||||||
|
const targetKey = ++memorycounter;
|
||||||
|
const relatedTargetKey = ++memorycounter;
|
||||||
|
jsmemory.set(targetKey, event.target);
|
||||||
|
jsmemory.set(relatedTargetKey, event.relatedTarget);
|
||||||
|
ExecuteFocusHandler(handlerID, targetKey, relatedTargetKey);
|
||||||
|
} else {
|
||||||
|
const targetKey = ++memorycounter;
|
||||||
|
jsmemory.set(targetKey, event.target);
|
||||||
|
ExecuteFocusHandler(handlerID, targetKey, 0);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
eventHandlers.set(`${ptr}-${handlerID}-focus`, handler);
|
eventHandlers.set(`${ptr}-${handlerID}-focus`, handler);
|
||||||
|
|
@ -209,7 +219,17 @@ function addBlurListener(ptr, handlerID) {
|
||||||
|
|
||||||
const handler = function (event) {
|
const handler = function (event) {
|
||||||
const { ExecuteBlurHandler } = window.crafter_webbuild_wasi.instance.exports;
|
const { ExecuteBlurHandler } = window.crafter_webbuild_wasi.instance.exports;
|
||||||
ExecuteBlurHandler(handlerID);
|
if(event.relatedTarget) {
|
||||||
|
const targetKey = ++memorycounter;
|
||||||
|
const relatedTargetKey = ++memorycounter;
|
||||||
|
jsmemory.set(targetKey, event.target);
|
||||||
|
jsmemory.set(relatedTargetKey, event.relatedTarget);
|
||||||
|
ExecuteBlurHandler(handlerID, targetKey, relatedTargetKey);
|
||||||
|
} else {
|
||||||
|
const targetKey = ++memorycounter;
|
||||||
|
jsmemory.set(targetKey, event.target);
|
||||||
|
ExecuteBlurHandler(handlerID, targetKey, 0);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
eventHandlers.set(`${ptr}-${handlerID}-blur`, handler);
|
eventHandlers.set(`${ptr}-${handlerID}-blur`, handler);
|
||||||
|
|
|
||||||
|
|
@ -42,10 +42,10 @@ export namespace Crafter::CppDOMBindings {
|
||||||
std::unordered_map<int, std::function<void(Crafter::MouseEvent)>>* mouseUpHandlers = new std::unordered_map<int, std::function<void(Crafter::MouseEvent)>>();
|
std::unordered_map<int, std::function<void(Crafter::MouseEvent)>>* mouseUpHandlers = new std::unordered_map<int, std::function<void(Crafter::MouseEvent)>>();
|
||||||
|
|
||||||
std::int32_t focusHandlerMaxId = 0;
|
std::int32_t focusHandlerMaxId = 0;
|
||||||
std::unordered_map<int, std::function<void(void)>>* focusHandlers = new std::unordered_map<int, std::function<void(void)>>();
|
std::unordered_map<int, std::function<void(Crafter::FocusEvent)>>* focusHandlers = new std::unordered_map<int, std::function<void(Crafter::FocusEvent)>>();
|
||||||
|
|
||||||
std::int32_t blurHandlerMaxId = 0;
|
std::int32_t blurHandlerMaxId = 0;
|
||||||
std::unordered_map<int, std::function<void(void)>>* blurHandlers = new std::unordered_map<int, std::function<void(void)>>();
|
std::unordered_map<int, std::function<void(Crafter::FocusEvent)>>* blurHandlers = new std::unordered_map<int, std::function<void(Crafter::FocusEvent)>>();
|
||||||
|
|
||||||
std::int32_t keyDownHandlerMaxId = 0;
|
std::int32_t keyDownHandlerMaxId = 0;
|
||||||
std::unordered_map<int, std::function<void(Crafter::KeyboardEvent)>>* keyDownHandlers = new std::unordered_map<int, std::function<void(Crafter::KeyboardEvent)>>();
|
std::unordered_map<int, std::function<void(Crafter::KeyboardEvent)>>* keyDownHandlers = new std::unordered_map<int, std::function<void(Crafter::KeyboardEvent)>>();
|
||||||
|
|
@ -130,12 +130,12 @@ extern "C" {
|
||||||
Crafter::CppDOMBindings::mouseUpHandlers->find(handlerID)->second(Crafter::MouseEvent(clientX, clientY, screenX, screenY, button, buttons, altKey, ctrlKey, shiftKey, metaKey));
|
Crafter::CppDOMBindings::mouseUpHandlers->find(handlerID)->second(Crafter::MouseEvent(clientX, clientY, screenX, screenY, button, buttons, altKey, ctrlKey, shiftKey, metaKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((export_name("ExecuteFocusHandler"))) void ExecuteFocusHandler(std::int32_t handlerID) {
|
__attribute__((export_name("ExecuteFocusHandler"))) void ExecuteFocusHandler(std::int32_t handlerID, void* target, void* relatedTarget) {
|
||||||
Crafter::CppDOMBindings::focusHandlers->find(handlerID)->second();
|
Crafter::CppDOMBindings::focusHandlers->find(handlerID)->second(Crafter::FocusEvent(target, relatedTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((export_name("ExecuteBlurHandler"))) void ExecuteBlurHandler(std::int32_t handlerID) {
|
__attribute__((export_name("ExecuteBlurHandler"))) void ExecuteBlurHandler(std::int32_t handlerID, void* target, void* relatedTarget) {
|
||||||
Crafter::CppDOMBindings::blurHandlers->find(handlerID)->second();
|
Crafter::CppDOMBindings::blurHandlers->find(handlerID)->second(Crafter::FocusEvent(target, relatedTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__((export_name("ExecuteKeyDownHandler"))) void ExecuteKeyDownHandler(std::int32_t handlerID, const char* key, std::int32_t keyCode, bool altKey, bool ctrlKey, bool shiftKey, bool metaKey) {
|
__attribute__((export_name("ExecuteKeyDownHandler"))) void ExecuteKeyDownHandler(std::int32_t handlerID, const char* key, std::int32_t keyCode, bool altKey, bool ctrlKey, bool shiftKey, bool metaKey) {
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,12 @@ export namespace Crafter {
|
||||||
KeyboardEvent(const char* key, std::int32_t keyCode, bool altKey, bool ctrlKey, bool shiftKey, bool metaKey) : key(key), keyCode(keyCode), altKey(altKey), ctrlKey(ctrlKey), shiftKey(shiftKey), metaKey(metaKey) {}
|
KeyboardEvent(const char* key, std::int32_t keyCode, bool altKey, bool ctrlKey, bool shiftKey, bool metaKey) : key(key), keyCode(keyCode), altKey(altKey), ctrlKey(ctrlKey), shiftKey(shiftKey), metaKey(metaKey) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FocusEvent {
|
||||||
|
void* target;
|
||||||
|
void* relatedTarget;
|
||||||
|
FocusEvent(void* target, void* relatedTarget) : target(target), relatedTarget(relatedTarget) {}
|
||||||
|
};
|
||||||
|
|
||||||
// Mouse event structure
|
// Mouse event structure
|
||||||
struct MouseEvent {
|
struct MouseEvent {
|
||||||
double clientX;
|
double clientX;
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ namespace Crafter {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Focus Events
|
// Focus Events
|
||||||
std::int32_t AddFocusListener(std::function<void(void)> callback) {
|
std::int32_t AddFocusListener(std::function<void(Crafter::FocusEvent)> callback) {
|
||||||
std::int32_t id = CppDOMBindings::focusHandlerMaxId++;
|
std::int32_t id = CppDOMBindings::focusHandlerMaxId++;
|
||||||
focusHandlers.push_back(id);
|
focusHandlers.push_back(id);
|
||||||
CppDOMBindings::focusHandlers->insert({id, callback});
|
CppDOMBindings::focusHandlers->insert({id, callback});
|
||||||
|
|
@ -162,7 +162,7 @@ namespace Crafter {
|
||||||
CppDOMBindings::RemoveFocusListener(ptr, id);
|
CppDOMBindings::RemoveFocusListener(ptr, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::int32_t AddBlurListener(std::function<void(void)> callback) {
|
std::int32_t AddBlurListener(std::function<void(Crafter::FocusEvent)> callback) {
|
||||||
std::int32_t id = CppDOMBindings::blurHandlerMaxId++;
|
std::int32_t id = CppDOMBindings::blurHandlerMaxId++;
|
||||||
blurHandlers.push_back(id);
|
blurHandlers.push_back(id);
|
||||||
CppDOMBindings::blurHandlers->insert({id, callback});
|
CppDOMBindings::blurHandlers->insert({id, callback});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue