2014-02-20 6 views
0

Вот моя проблема:Невозможно изменить GC в Xlib после вызова XClearArea

Я использую XClearArea, чтобы очистить область экрана с окном фона пиксельной. Это имеет цвет переднего плана как BLACK для графического контекста.

После вызова XClearArea Я пытаюсь провести линию, используя API XDrawLine. Здесь я использую GC, у которого есть передний RED.

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

Не мог бы кто-нибудь рассказать, почему это происходит и как эта проблема может быть устранена.

Любая помощь была бы принята с благодарностью. Благодарю.

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

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

Когда клавиша стрелка используется, я стараюсь, чтобы очистить предыдущую строку, используя 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 Window Manager. Я не могу использовать GTK/QT.

Спасибо, что за помощь.

+0

Показать еще код. Считаете ли вы использование набора инструментов, такого как Gtk или Qt? –

ответ

0

Не уверен, что тебе сказать, не полный код, но ...

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

так

XClearArea (XtDisplay (Widget, XtWindow (Widget), 0, 0, window_width, window_height, True);

, вероятно, следует:

XClearArea (XtDisplay (Widget), XtWindow (Widget), 0, 0, window_width, window_height, True);

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

Кроме того, вы можете быть лучше вызвать

XSetForeground (XtDisplay (Widget), YourGC, YourRedpixel);

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

+0

Спасибо за ответ Пол. Вызывая XSetForeground, мы пытаемся изменить основной GC. Это сработает, но проблема в том, почему мы не можем использовать новый RED_GC в вызове XDrawLine вместо того, чтобы изменять передний план существующего GC. –