in svg/src/main/java/jetbrains/jetpad/projectional/svg/toAwt/SvgElementMapper.java [48:119]
protected void registerSynchronizers(SynchronizersConfiguration conf) {
super.registerSynchronizers(conf);
conf.add(new Synchronizer() {
private Registration myReg;
@Override
public void attach(SynchronizerContext ctx) {
myReg = getSource().addListener(new SvgElementListener<Object>() {
@Override
public void onAttrSet(SvgAttributeEvent<Object> event) {
if (event.getNewValue() == null) {
getTarget().removeAttribute(event.getAttrSpec().toString());
}
getTarget().setAttribute(event.getAttrSpec().toString(), event.getNewValue().toString());
}
});
for (SvgAttributeSpec<?> key : getSource().getAttributeKeys()) {
getTarget().setAttribute(key.toString(), getSource().getAttribute(key.getName()).get().toString());
}
}
@Override
public void detach() {
myReg.remove();
}
});
conf.add(Synchronizers.forPropsOneWay(getSource().handlersSet(), new WritableProperty<Set<SvgEventSpec>>() {
@Override
public void set(Set<SvgEventSpec> value) {
if (myHandlerRegs == null) {
myHandlerRegs = new EnumMap<>(SvgEventSpec.class);
}
for (SvgEventSpec spec : SvgEventSpec.values()) {
if (!value.contains(spec) && myHandlerRegs.containsKey(spec)) {
myHandlerRegs.remove(spec).remove();
}
if (!value.contains(spec) || myHandlerRegs.containsKey(spec)) continue;
switch (spec) {
case MOUSE_CLICKED:
addMouseHandler(spec, SVGConstants.SVG_CLICK_EVENT_TYPE);
break;
case MOUSE_PRESSED:
addMouseHandler(spec, SVGConstants.SVG_MOUSEDOWN_EVENT_TYPE);
break;
case MOUSE_RELEASED:
addMouseHandler(spec, SVGConstants.SVG_MOUSEUP_EVENT_TYPE);
break;
case MOUSE_OVER:
addMouseHandler(spec, SVGConstants.SVG_MOUSEOVER_EVENT_TYPE);
break;
case MOUSE_MOVE:
addMouseHandler(spec, SVGConstants.SVG_MOUSEMOVE_EVENT_TYPE);
break;
case MOUSE_OUT:
addMouseHandler(spec, SVGConstants.SVG_MOUSEOUT_EVENT_TYPE);
break;
default:
break;
}
}
if (myHandlerRegs.isEmpty()) {
myHandlerRegs = null;
}
}
}));
}