C# Piccolo ZUI - Squiggles только тогда, когда CTRL покачивается?

Я использую библиотеку Piccolo 2D ZUI в приложении C# Winform.

Один из примеров, который показывает библиотека, - это добавление обработчика squiggle (рисование линий) на холст.

Проблема состоит в том, что если вы включите обработчик squiggle и разрешите перетаскивание холста, то оба события происходят одновременно.

Я хотел бы унаследовать PDragEventhandler, чтобы он работал только тогда, когда не нажата клавиша CTRL. Затем, когда нажата клавиша CTRL, спиглер запускается (я понял это).

Код, используемый для обработчика перетаскивания:

InitializeComponent();
//add input event listener            
pCanvas1.AddInputEventListener(new PDragEventHandler());

Могу ли я унаследовать PDragEventhandler, а затем сказать, что выполняется только тогда, когда CTRL не нажата? Или мне нужно перекомпилировать библиотеку Piccolo, чтобы включить эту функцию?

2 ответа

Для Java это очень прямой путь. В инициализации вы захотите внести следующие изменения:

public void mouseDragged(PInputEvent e) {
    super.mouseDragged(e);

    // Update the squiggle while dragging.
    updateSquiggle(e);
}

в

public void mouseDragged(PInputEvent e) {
     super.mouseDragged(e);
     if (e.isControlDown()) {
         updateSquiggle(e);
     }   
}


Объяснение: Это возможно, потому что PInputEvent наследует событие java и поэтому имеет опцию isControlDown(). В C# это не так, и вам нужно будет расширить его вручную или добавить. В третьей части следующего урока есть описание того, как это сделать для C# (с которым я не очень знаком) .


Для C# я бы предположил, что слушатель должен выглядеть примерно так:

protected void squiggle_ControlDown(object sender, PInputEventArgs e) {
    PNode node = (PNode)sender;
    switch (e.KeyCode) {
            case Keys.Control:
                    updateSquiggle();
                    break;
    }

}

Надеюсь, это поможет, хотелось бы, чтобы прошло не так много времени с тех пор, как я использовал C#, или я мог бы дать вам более конкретный ответ.

Вы можете переопределить метод acceptptsEvent() для управления отправкой событий. Например, чтобы принимать события только с модификатором управляющей клавиши:

public class DragHandler extends PDragEventhandler {
    @Override
    public boolean acceptsEvent(PInputEvent event, int type) {
        return super.acceptsEvent(event, type) && event.isControlDown();
    }
}
Другие вопросы по тегам