* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-#define IMAGE_SCALE 8
-#define WIDTH 128
-#define HEIGHT 64
-
-#define IMAGE_WIDTH (WIDTH * IMAGE_SCALE)
-#define IMAGE_HEIGHT (HEIGHT * IMAGE_SCALE)
-
-#define DEFAULT_WIDTH IMAGE_WIDTH
-#define DEFAULT_HEIGHT IMAGE_HEIGHT
-
#define TIMEOUT 50
#define PASS_KEYS
-#include "frame.c"
-#include "ao_draw.h"
-
-#define STRIDE ((WIDTH + 31) / 32)
-
-static uint32_t bits[STRIDE * HEIGHT];
-
-static struct ao_bitmap fb = {
- .base = bits,
- .stride = STRIDE,
- .width = WIDTH,
- .height = HEIGHT
-};
+#include "test-frame.c"
-#define BIG_FONT FrutigerLT_Roman_64_font
-#define VOLT_FONT FrutigerLT_Roman_64_font
-#define SMALL_FONT NotoMono_12_font
-#define TINY_FONT NotoMono_10_font
+#define BIG_FONT BitstreamVeraSans_Roman_58_font
+#define VOLT_FONT BitstreamVeraSans_Roman_58_font
+#define SMALL_FONT BitstreamVeraSans_Roman_12_font
+#define TINY_FONT BitstreamVeraSans_Roman_12_font
#define LOGO_FONT BenguiatGothicStd_Bold_26_font
#define LABEL_Y (int16_t) (SMALL_FONT.ascent)
-#define VALUE_Y (int16_t) (LABEL_Y + BIG_FONT.ascent)
+#define VALUE_Y (int16_t) (LABEL_Y + BIG_FONT.ascent + 3)
#define BOX_X 2
#define PAD_X 90
#define BOX_LABEL_X 30
#define RSSI_LABEL_X 15
#define PAD_LABEL_X 95
#define SEP_X (PAD_X - 10)
+#define SCAN_X (WIDTH - 100) / 2
+#define SCAN_Y 49
+#define SCAN_HEIGHT 4
+#define FOUND_Y 63
+#define FOUND_WIDTH 21
+#define MAX_VALID (WIDTH / FOUND_WIDTH)
static int box_number = 1;
static int pad_number = 1;
.y_scale = 48, .y_off = 0,
};
-#define SCAN_X (WIDTH - 100) / 2
-#define SCAN_Y 51
-#define SCAN_HEIGHT 4
-#define FOUND_Y 64
-#define FOUND_WIDTH 14
-#define MAX_VALID (WIDTH / FOUND_WIDTH)
-
static const struct ao_transform bowtie_transform = {
.x_scale = 1, .x_off = 50,
.y_scale = 1, .y_off = 20,
static const float lco_volts = 4.1f;
static const int rssi = -30;
-#define IMAGE_STRIDE ((IMAGE_WIDTH + 31) / 32)
-
-static uint32_t image_bits[IMAGE_STRIDE * IMAGE_HEIGHT];
-
static int boxes[] = { 1, 2, 3, 5, 8, 11, 13, 17, 19, 23, 29, 31, 37, 62, 97 };
static int max_box = 97;
box_number = max_box;
}
+static bool redraw_all = true;
+
void HandleExpose(Display *dpy, Window win, GC gc)
{
char str[64];
int i;
int v;
+ int last_box;
int16_t b;
- ao_rect(&fb, 0, 0, WIDTH, HEIGHT, 0xffffffff, AO_COPY);
+ if (redraw_all)
+ ao_rect(&fb, 0, 0, WIDTH, HEIGHT, 0xffffffff, AO_COPY);
if (do_polys == 1)
current_timeout = TIMEOUT;
current_timeout = 0;
switch (do_polys) {
case 1:
- ao_logo(&fb, &logo_transform, &LOGO_FONT, 0x00000000, AO_COPY);
+ if (redraw_all)
+ ao_logo(&fb, &logo_transform, &LOGO_FONT, 0x00000000, AO_COPY);
+ else
+ ao_rect(&fb, 0, SCAN_Y, WIDTH, HEIGHT-SCAN_Y, 0xffffffff, AO_COPY);
if (scan_number) {
ao_rect(&fb, SCAN_X, SCAN_Y, (int16_t) scan_number, SCAN_HEIGHT, 0x00000000, AO_COPY);
b = 0;
v = 0;
+ last_box = 0;
for (i = scan_number; i > 1; i--) {
if (valid_box(i)) {
+ if (!last_box)
+ last_box = i;
v++;
if (v == MAX_VALID)
break;
}
for (; i <= scan_number; i++) {
if (valid_box(i)) {
- sprintf(str, "%02d", i);
+ sprintf(str, "%02d%s", i, i == last_box ? "" : ",");
ao_text(&fb, &TINY_FONT, 0 + FOUND_WIDTH * b, FOUND_Y, str, 0x00000000, AO_COPY);
b++;
}
}
+ redraw_all = false;
}
break;
case 2:
break;
}
- XImage *source_image = XCreateImage(dpy, visual, 1, XYBitmap, 0, (char *) bits, WIDTH, HEIGHT, 32, STRIDE*4);
- XImage *image = XCreateImage(dpy, visual, 1, XYBitmap, 0, (char *) image_bits, IMAGE_WIDTH, IMAGE_HEIGHT, 32, IMAGE_STRIDE * 4);
- int ix, iy;
- int dx, dy;
-
- for (iy = 0; iy < HEIGHT; iy++) {
- for (ix = 0; ix < WIDTH; ix++) {
- unsigned long bit = XGetPixel(source_image, ix, iy);
- for (dy = 0; dy < IMAGE_SCALE; dy++) {
-
- for (dx = 0; dx < IMAGE_SCALE; dx++) {
- XPutPixel(image, ix * IMAGE_SCALE + dx, iy * IMAGE_SCALE + dy, bit);
- }
- }
- }
- }
- XSetForeground(dpy, gc, WhitePixel(dpy, screen));
- XSetBackground(dpy, gc, BlackPixel(dpy, screen));
- XPutImage(dpy, win, gc, image, 0, 0, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
- free(image);
+ DoDisplay(dpy, win, gc);
}
void
HandleKeyPress(Display *dpy, Window win, GC gc, XEvent *ev)
{
char string[10];
+
+ redraw_all = true;
if (XLookupString ((XKeyEvent *) ev, string, sizeof (string), 0, 0) >= 1) {
switch (string[0]) {
case 'q':
if (scan_number < 99)
scan_number++;
else {
+ redraw_all = true;
box_number = boxes[0];
pad_number = 1;
do_polys = 0;