Subject:
Re: [nanogui] No BLACK with True Types?
From:
"Greg Haerr" ####@####.####
Date:
29 Jan 2002 17:08:33 -0000
Message-Id: <00e901c1a8e5$bba95b20$3aba46a6@xmission.com>
: One problem: I'm using True Types, but I can't use the defined color BLACK
: (with GrSetForeground) to write. With all other colors it works. BLACK also
: works fine with the nano-X system fonts.
I think this has to do with a kluge in engine/devfonts.c. Look for
the GrArea() call and inspect. This will be fixed when we use
the new blitters to draw the font cells.
Regards,
Greg
:
: I use the framebuffer device (Linux 2.4.3.) 8bpp.
:
: regards
: Olaf
:
:
:
: Am Dienstag, 29. Januar 2002 17:32 schrieb Alex Holden:
: > Henry Chea wrote:
: > > Maybe point me to examples, docs, or perhaps edit my source code below to
: > > show how to solve the problem?
: >
: > One way is to use a pipe to send events to the slave.
: >
: > Something along these lines (completely untested):
: >
: > file://control.c
: > #include <unistd.h>
: > #include <stdio.h>
: > #define MWINCLUDECOLORS
: > #include "microwin/nano-X.h"
: >
: > GR_WINDOW_ID control_wid;
: > GR_GC_ID gc;
: >
: > int control_fd;
: > int pipefds[2];
: >
: > void event_handler (GR_EVENT *event);
: >
: > int main (void)
: > {
: > pid_t pid;
: >
: > if(pipe(pipefds) < 0) {
: > fprintf(stderr, "pipe() failed\n");
: > exit(1);
: > }
: >
: > if((pid = fork()) < 0) {
: > fprintf(stderr, "fork() failed\n");
: > exit(1);
: > } else if(pid > 0) {
: > close(pipefds[0]); /* parent closes the output side */
: > } else {
: > close(pipefds[1]); /* child closes the input side */
: > /* Set stdin to the output of the pipe: */
: > if(dup2(pipefds[0], STDIN_FILENO) != STDIN_FILENO) {
: > fprintf(stderr, "dup2() failed\n");
: > exit(1);
: > }
: > close(pipefds[0]);
: > if(execl("/usr/local/bin/SLAVE", "SLAVE", NULL) < 0) {
: > fprintf(stderr, "execl() failed\n");
: > exit(1);
: > }
: > }
: >
: > if ((control_fd = GrOpen()) < 0)
: > {
: > fprintf (stderr, "GrOpen failed");
: > exit (1);
: > }
: >
: >
: > gc = GrNewGC();
: > GrSetGCUseBackground (gc, GR_FALSE);
: > GrSetGCForeground (gc, BLUE);
: >
: > control_wid = GrNewWindowEx (GR_WM_PROPS_NOMOVE |
: > GR_WM_PROPS_BORDER |
: > GR_WM_PROPS_NOAUTOMOVE |
: > GR_WM_PROPS_NOAUTORESIZE,
: > "Control Window",
: > GR_ROOT_WINDOW_ID,
: > 0, 0, 150, 478, YELLOW);
: >
: > GrSelectEvents (control_wid, GR_EVENT_MASK_EXPOSURE |
: > GR_EVENT_MASK_BUTTON_DOWN);
: >
: > GrMapWindow (control_wid);
: > GrMainLoop (event_handler);
: > }
: >
: > void event_handler (GR_EVENT *event)
: > {
: > switch (event->type)
: > {
: > case GR_EVENT_TYPE_EXPOSURE:
: > GrText (control_wid, gc, 20, 20,
: > "Click me", -1, GR_TFASCII);
: > break;
: >
: > case GR_EVENT_TYPE_BUTTON_DOWN:
: > GrClearWindow (control_wid , GR_TRUE);
: > if(write(pipe_fds[1], "1", 1) != 1) {
: > fprintf(stderr, "Couldn't write message to child\n");
: > exit(1);
: > }
: > break;
: > }
: > }
: >
: > ******************************
: > file://SLAVE.C
: > #include <stdio.h>
: > #define MWINCLUDECOLORS
: > #include "microwin/nano-X.h"
: >
: > GR_WINDOW_ID slave_wid;
: > GR_GC_ID gc;
: >
: > void event_handler (GR_EVENT *event);
: >
: > int slave_fd;
: >
: > int main (void)
: > {
: > if ((slave_fd = GrOpen()) < 0)
: > {
: > fprintf (stderr, "GrOpen failed");
: > exit (1);
: > }
: >
: > gc = GrNewGC();
: > GrSetGCUseBackground (gc, GR_FALSE);
: > GrSetGCForeground (gc, RED);
: >
: >
: > slave_wid = GrNewWindowEx (GR_WM_PROPS_APPFRAME |
: > GR_WM_PROPS_CAPTION |
: > GR_WM_PROPS_CLOSEBOX,
: > "slave Window",
: > GR_ROOT_WINDOW_ID,
: > 150, 150, 200, 100, WHITE);
: >
: > GrRegisterInput(STDIN_FILENO);
: >
: >
: > GrSelectEvents (slave_wid, GR_EVENT_MASK_CLOSE_REQ|
: > GR_EVENT_TYPE_FDINPUT);
: >
: > GrMapWindow (slave_wid);
: > GrMainLoop (event_handler);
: > }
: >
: > void event_handler (GR_EVENT *event)
: > {
: > char in;
: >
: > switch (event->type)
: > {
: > case GR_EVENT_TYPE_CLOSE_REQ:
: > GrClose();
: > exit (0);
: >
: > case GR_EVENT_TYPE_FDINPUT:
: > if(read(STDIN_FILENO, &in, 1) != 1) {
: > fprintf(stderr, "couldn't read event from parent\n");
: > exit(1);
: > }
: > if(in == '1') {
: > GrText (slave_wid, gc, 50, 50,
: > "Button 1 pressed", -1, GR_TFASCII);
: > } else if(in == '2') {
: > GrText (slave_wid, gc, 50, 50,
: > "Button 2 pressed", -1, GR_TFASCII);
: > } else {
: > GrText (slave_wid, gc, 50, 50,
: > "Unknown button pressed", -1, GR_TFASCII);
: > }
: > break;
: > }
: > }
:
: ---------------------------------------------------------------------
: To unsubscribe, e-mail: ####@####.####
: For additional commands, e-mail: ####@####.####
: