File: draw_system.c

package info (click to toggle)
garlic 1.6-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 4,516 kB
  • sloc: ansic: 52,465; makefile: 2,254
file content (94 lines) | stat: -rw-r--r-- 2,255 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* Copyright (C) 2000-2003 Damir Zucic */

/*=============================================================================

				draw_system.c

Purpose:
	Put small legend describing the coordinate system to the top left
	corner of  the main window.  Do not  create pixmap,  just use raw
	pixmap data. Red color is treated as transparent. Read system.xpm
	to check the pixmap!

Input:
	(1) Pointer to GUIS structure, with GUI data.
	(2) Pixmap file (included as header).

Output:
	(1) Small transparent pixmap drawn to  the top left corner of the
	    main window.
	(2) Return value.

Return value:
	(1) Positive on success.
	(2) Negative on failure.

========includes:============================================================*/

#include <stdio.h>

#include <string.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>

#include "defines.h"
#include "typedefs.h"
#include "system.xpm"

/*======put coordinate system description to the top left corner:============*/

int DrawSystem_ (GUIS *guiSP)
{
static int		width = 50, height = 54, i, j, screen_x, screen_y;
int			current_char;

/* Prepare two graphics contexts (set colors): */
XSetForeground (guiSP->displaySP, guiSP->theGCA[0], guiSP->black_colorID);
XSetForeground (guiSP->displaySP, guiSP->theGCA[1], guiSP->white_colorID);

/* Draw the pixmap to the screen, leaving part of the background visible: */
for (i = 0; i < height; i++) /* i is line index */
	{
	for (j = 0; j < width; j++) /* j is column index */
		{
		/** Prepare the pixel position: **/
		screen_x = j;
		screen_y = i + guiSP->main_winS.font_height + 7;

		/** Check the current character: **/
		current_char = system_xpm[i + 4][j]; 
		switch (current_char)
			{
			case '#': /* Do nothing - transparent color (red)! */
				break;

			case 'a':
				XDrawPoint (guiSP->displaySP,
					    guiSP->main_winS.ID,
					    guiSP->theGCA[0],
					    screen_x, screen_y);
				break;

			case '.':
				XDrawPoint (guiSP->displaySP,
					    guiSP->main_winS.ID,
					    guiSP->theGCA[1],
					    screen_x, screen_y);
				break;

			default:
				;
			}
		}
	}

/* Return positive value on success: */
return 1;
}

/*===========================================================================*/