⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fb-gui.c

📁 linux下开源图片codec
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <linux/fb.h>#include "fbtools.h"#include "fs.h"#include "fb-gui.h"/* public */int visible = 1;/* private */static struct fs_font *f;static char *x11_font = "10x20";static int ys =  3;static int xs = 10;/* ---------------------------------------------------------------------- *//* clear screen (areas)                                                   */void fb_clear_mem(void){    if (visible)	fb_memset(fb_mem,0,fb_fix.smem_len);}void fb_clear_screen(void){    if (visible)	fb_memset(fb_mem,0,fb_fix.line_length * fb_var.yres);}static void fb_clear_rect(int x1, int x2, int y1,int y2){    unsigned char *ptr;    int y,h;    if (!visible)	return;    if (x2 < x1)	h = x2, x2 = x1, x1 = h;    if (y2 < y1)	h = y2, y2 = y1, y1 = h;    ptr  = fb_mem;    ptr += y1 * fb_fix.line_length;    ptr += x1 * fs_bpp;    for (y = y1; y <= y2; y++) {	fb_memset(ptr, 0, (x2 - x1 + 1) * fs_bpp);	ptr += fb_fix.line_length;    }}/* ---------------------------------------------------------------------- *//* draw lines                                                             */static void fb_setpixel(int x, int y, unsigned int color){    unsigned char *ptr;    ptr  = fb_mem;    ptr += y * fb_fix.line_length;    ptr += x * fs_bpp;    fs_setpixel(ptr, color);}static void fb_line(int x1, int x2, int y1,int y2){    int x,y,h;    float inc;    if (x2 < x1)	h = x2, x2 = x1, x1 = h;    if (y2 < y1)	h = y2, y2 = y1, y1 = h;    if (x2 - x1 < y2 - y1) {	inc = (float)(x2-x1)/(float)(y2-y1);	for (y = y1; y <= y2; y++) {	    x = x1 + inc * (y - y1);	    fb_setpixel(x,y,fs_white);	}    } else {	inc = (float)(y2-y1)/(float)(x2-x1);	for (x = x1; x <= x2; x++) {	    y = y1 + inc * (x - x1);	    fb_setpixel(x,y,fs_white);	}    }}static void fb_rect(int x1, int x2, int y1,int y2){    fb_line(x1, x2, y1, y1);    fb_line(x1, x2, y2, y2);    fb_line(x1, x1, y1, y2);    fb_line(x2, x2, y1, y2);}/* ---------------------------------------------------------------------- *//* text stuff                                                             */void fb_text_init1(char *font){    char   *fonts[2] = { font, NULL };    if (NULL == f)	f = fs_consolefont(font ? fonts : NULL);#ifndef X_DISPLAY_MISSING    if (NULL == f && 0 == fs_connect(NULL))	f = fs_open(font ? font : x11_font);#endif    if (NULL == f) {	fprintf(stderr,"no font available\n");	exit(1);    }}void fb_text_init2(void){    fs_init_fb(255);}int  fb_font_width(void){    return f->width;}void fb_status_line(unsigned char *msg){    int y;        if (!visible)	return;    y = fb_var.yres - f->height - ys;    fb_memset(fb_mem + fb_fix.line_length * y, 0,	      fb_fix.line_length * (f->height+ys));    fb_line(0, fb_var.xres, y, y);    fs_puts(f, 0, y+ys, msg);}void fb_edit_line(unsigned char *str, int pos){    int x,y;        if (!visible)	return;    y = fb_var.yres - f->height - ys;    x = pos * f->width;    fb_memset(fb_mem + fb_fix.line_length * y, 0,	      fb_fix.line_length * (f->height+ys));    fb_line(0, fb_var.xres, y, y);    fs_puts(f, 0, y+ys, str);    fb_line(x, x + f->width, fb_var.yres-1, fb_var.yres-1);    fb_line(x, x + f->width, fb_var.yres-2, fb_var.yres-2);}void fb_text_box(int x, int y, char *lines[], unsigned int count){    unsigned int i,len,max, x1, x2, y1, y2;    if (!visible)	return;    max = 0;    for (i = 0; i < count; i++) {	len = strlen(lines[i]);	if (max < len)	    max = len;    }    x1 = x;    x2 = x + max * f->width;    y1 = y;    y2 = y + count * f->height;    x += xs; x2 += 2*xs;    y += ys; y2 += 2*ys;        fb_clear_rect(x1, x2, y1, y2);    fb_rect(x1, x2, y1, y2);    for (i = 0; i < count; i++) {	fs_puts(f,x,y,lines[i]);	y += f->height;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -