C # Piccolo ZUI - Squiggles только тогда, когда CTRL покачивается? - PullRequest
1 голос
/ 21 декабря 2009

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

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 07 января 2010

Для 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 # (с которым я не очень хорошо знаком), приведено в части 3 следующего учебного пособия .


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

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

}

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

0 голосов
/ 24 декабря 2011

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

public class DragHandler extends PDragEventhandler {
    @Override
    public boolean acceptsEvent(PInputEvent event, int type) {
        return super.acceptsEvent(event, type) && event.isControlDown();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...