joep@tnosoes.izf.tno.nl (Joep Mathijssen) (05/29/91)
Hi,
Below is a small (?!) C-program to demonstrate a problem I'm having.
When you press a LEFT or RIGHT shiftbutton, the background colors
from the two textsw are set. This works fine as long as you do not type
text into the windows. When you do and then change the colors
the margin before the text gets the wrong color (color[0]).
Is this a bug or a feature?
Joep
===============================================================================
Joep Mathijssen
TNO Institute for Perception Phone : +31 34 63 562 11
P.O. Box 23 Fax : +31 34 63 539 77
3769 ZG Soesterberg E-mail: uunet!hp4nl.nluug.nl!tnosoes!joep
The Netherlands or: joep@izf.tno.nl
===============================================================================
----------------------------------------------------------------------
#include <stdio.h>
#include <xview/xview.h>
#include <xview/textsw.h>
#include <xview/cms.h>
#include <xview/notify.h>
typedef struct {
Frame BaseWindow;
Textsw Text1, Text2;
}
BaseFrame;
BaseFrame basefrm;
Notify_value swap(win, e, a, t)
Xv_window win;
Event *e;
Notify_arg a;
Notify_event_type t;
{
if (event_action(e) == SHIFT_LEFT) {
xv_set( basefrm.Text1, WIN_BACKGROUND_COLOR, CMS_CONTROL_COLORS, NULL);
xv_set( basefrm.Text2, WIN_BACKGROUND_COLOR, CMS_CONTROL_COLORS+1,NULL);
}
if (event_action(e) == SHIFT_RIGHT) {
xv_set( basefrm.Text1, WIN_BACKGROUND_COLOR, CMS_CONTROL_COLORS+1,NULL);
xv_set( basefrm.Text2, WIN_BACKGROUND_COLOR, CMS_CONTROL_COLORS, NULL);
}
return notify_next_event_func(win, (Notify_event)e, a, t);
}
main()
{
Cms cms;
struct itimerval timer;
static Xv_singlecolor colors[] = { 225, 141, 204,
125, 241, 104,
0, 0, 0,
0, 0, 0 };
cms = (Cms)xv_create(NULL, CMS,
CMS_NAME, "palette",
CMS_TYPE, XV_STATIC_CMS,
CMS_CONTROL_CMS,TRUE,
CMS_SIZE, CMS_CONTROL_COLORS + 4,
CMS_COLORS, colors,
NULL);
basefrm.BaseWindow = xv_create(NULL, FRAME,
FRAME_LABEL, "Press LEFT/RIGHT-SHIFT to swap colors!",
NULL);
basefrm.Text1 = xv_create(basefrm.BaseWindow, TEXTSW,
WIN_HEIGHT, 75,
WIN_CMS, cms,
NULL);
basefrm.Text2 = xv_create(basefrm.BaseWindow, TEXTSW,
WIN_HEIGHT, 75,
WIN_CMS, cms,
NULL);
window_fit(basefrm.BaseWindow);
notify_interpose_event_func(textsw_first(basefrm.Text1),
(Notify_func) swap, NOTIFY_SAFE);
notify_interpose_event_func(textsw_first(basefrm.Text2),
(Notify_func) swap, NOTIFY_SAFE);
xv_main_loop(basefrm.BaseWindow);
exit(0);
}