/
svg_element.cc
46 lines (34 loc) · 1.53 KB
/
svg_element.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
* Copyright (C) 2021 Alibaba Inc. All rights reserved.
* Author: Kraken Team.
*/
#include "svg_element.h"
namespace kraken::binding::jsc {
void bindSVGElement(std::unique_ptr<JSContext> &context) {
auto SVGElement = JSSVGElement::instance(context.get());
JSC_GLOBAL_SET_PROPERTY(context, "SVGElement", SVGElement->classObject);
}
std::unordered_map<JSContext *, JSSVGElement *> JSSVGElement::instanceMap{};
JSSVGElement::~JSSVGElement() {
instanceMap.erase(context);
}
JSSVGElement::JSSVGElement(JSContext *context) : JSElement(context) {}
JSObjectRef JSSVGElement::instanceConstructor(JSContextRef ctx, JSObjectRef constructor, size_t argumentCount,
const JSValueRef *arguments, JSValueRef *exception) {
auto instance = new SVGElementInstance(this);
return instance->object;
}
JSSVGElement::SVGElementInstance::SVGElementInstance(JSSVGElement *jsSVGElement)
: ElementInstance(jsSVGElement, "svg", false), nativeSVGElement(new NativeSVGElement(nativeElement)) {
std::string tagName = "svg";
NativeString args_01{};
buildUICommandArgs(tagName, args_01);
foundation::UICommandTaskMessageQueue::instance(context->getContextId())
->registerCommand(eventTargetId, UICommand::createElement, args_01, nativeSVGElement);
}
JSSVGElement::SVGElementInstance::~SVGElementInstance() {
::foundation::UICommandCallbackQueue::instance()->registerCallback([](void *ptr) {
delete reinterpret_cast<NativeSVGElement *>(ptr);
}, nativeSVGElement);
}
} // namespace kraken::binding::jsc