Невозможно изменить GC в Xlib после вызова XClearArea

Вот моя проблема:

Я использую XClearArea, чтобы очистить область экрана с растровым изображением фона окна. Цвет переднего плана ЧЕРНЫЙ для графического контекста.

После вызова XClearArea я пытаюсь нарисовать линию, используя XDrawLine API. Здесь я использую GC, у которого передний план КРАСНЫЙ.

Однако я заметил, что вызов XDrawLine рисует черную линию. Другими словами, XClearArea не позволяет мне превратить Foreground в RED , несмотря на явное указание нового GC в моем вызове XDrawLine.

Может ли кто-нибудь пролить свет на то, почему это происходит и как эту проблему можно решить.

Любая помощь будет принята с благодарностью. Спасибо.

РЕДАКТИРОВАТЬ: Позвольте мне добавить КОД, чтобы показать мою проблему. Я пытаюсь реализовать линию в области рисования, которую можно перемещать с помощью клавиш со стрелками на клавиатуре. Вот что я пытаюсь сделать:

  • Нарисуйте линию.
  • Нажмите на линию, чтобы сделать ее КРАСНОЙ.
  • Используйте клавишу со стрелкой, чтобы переместить линию влево или вправо.
  • При использовании клавиши со стрелкой линия остается КРАСНОЙ.

Когда используется клавиша со стрелкой, я пытаюсь очистить предыдущую строку с помощью XClearArea API,

XClearArea(XtDisplay(Widget,XtWindow(Widget),0, 0,WINDOW_WIDTH, WINDOW_HEIGHT, True);

Фон PIXMAP имеет черный передний план.

Теперь, когда это сделано, попробуйте нарисовать линию с помощью функции XDrawLine:

XDrawLine(XtDisplay(Widget, XtWindow(Widget),RED_GC,x1, y1,x2,y2);

Здесь я пытаюсь использовать новый RED_GC, который может установить передний план на RED.

Тем не менее, кажется, что система по-прежнему рисует линию с черным цветом на переднем плане.

К сожалению, мне приходится работать с Xlib с помощью оконного менеджера OpenMotif. Я не могу использовать GTK/QT.

Заранее спасибо за вашу помощь.


person arun nath    schedule 20.02.2014    source источник
comment
Показать больше кода. Рассматривали ли вы возможность использования такого инструментария, как Gtk или Qt?   -  person Basile Starynkevitch    schedule 20.02.2014


Ответы (1)


Не знаю, что вам сказать без полного кода, но...

Вызов XtDisplay принимает только 1 параметр.

so

XClearArea(XtDisplay(Виджет,XtWindow(Виджет),0, 0,WINDOW_WIDTH, WINDOW_HEIGHT, True);

Вероятно, должно быть:

XClearArea (XtDisplay (виджет), XtWindow (виджет), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, True);

То же самое для XDrawLine()

Также вам может быть лучше позвонить

XSetForeground (XtDisplay (виджет), YourGC, YourRedpixel);

установить передний план. (Но, может быть, вы...)

person PaulB    schedule 21.02.2014
comment
Спасибо за ваш ответ Павел. Вызывая XSetForeground, мы пытаемся модифицировать основной GC. Это сработает, но проблема в том, почему мы не можем использовать новый RED_GC в вызове XDrawLine вместо того, чтобы модифицировать передний план существующего GC. - person arun nath; 24.02.2014