SWT, используя прозрачное перетаскивание изображения на анимированном фоне в Windows - PullRequest
1 голос
/ 12 января 2012

У меня есть собственный виджет, основанный на Canvas, который отображает некоторые элементы, которые пользователь может перетаскивать. Когда пользователь перетаскивает что-либо, я использую Изображение перетаскиваемого элемента в качестве перетаскиваемого изображения:

final DragSource source = new DragSource(this, DND.DROP_MOVE);
source.setDragSourceEffect(new DragSourceEffect(this) {
    @Override
    public void dragStart(DragSourceEvent event) {
        event.image =   // do some stuff to generate a partially
                        // transparent image of the dragged item...
    }
});

Это работало нормально, пока я не реализовал анимацию элементов в Canvas, чтобы указать пользователю, как элементы будут переставлены, если произойдет отбрасывание. То есть он по-прежнему отлично работает на всех платформах (GTK, Mac), кроме Windows. В Windows это выглядит так, как будто я перемещаю мышь, платформа делает снимок текущего содержимого Canvas, создает перетаскиваемое изображение сверху и помещает (непрозрачный) результат на экран. Очевидно, что этот механизм приводит к ужасным результатам, когда фон на самом деле анимируется и изменяется, когда мышь не двигается. В области, где появляется перетаскиваемое изображение, по-прежнему отображается содержимое во время последнего перемещения мыши, а область вокруг перетаскиваемого изображения анимируется и обновляется.

Решение, которое приходит на ум, заключается в том, чтобы самостоятельно реализовать перетаскивание изображения, вручную перемещая прозрачную оболочку нестандартной формы вместе с мышью. Прежде чем я это сделаю, верна ли моя интерпретация проблемы и, возможно, есть простое решение, которое исправило бы рендеринг перетаскиваемого изображения на анимированном фоне в Windows?

1 Ответ

0 голосов
/ 13 января 2012

Перерисовка во время перетаскивания, похоже, является основной головной болью, и есть ошибка , о которой также сообщалось для вашей конкретной ситуации. Таким образом, ваша интерпретация верна в том смысле, что (в Windows?) Перетаскивание не приводит к перерисовке / обновлению базового элемента управления (и если вы сами его принудите, вы просто получите много сыра).

...