[w3m-dev 03929] clear image
* image.c (syncImage): added (drawImage): rewrite using syncImage() (clearImage): use clear image command (6) * w3mimgdisplay.c: change protocol 2 => terminate drawing 6 => clear image (main): '2' calls TermImage() '6' calls ClearImage() TermImage() when exit (TermImage): renamed from ClearImage (ClearImage): rewritten to call w_op->clear() * w3mimg.h/w3mimg.h (w3mimg_op): add clear() * w3mimg/fb/fb.c (fb_clear): added * w3mimg/fb/fb.h (fb_clear): added * w3mimg/fb/fb_img.c (fb_image_clear): added * w3mimg/fb/fb_w3mimg.c (w3mfb_clear): added (w3mimg_fbopen): initialize wop->clear * w3mimg/x11/x11_w3mimg.c (x11_clear): added (w3mimg_x11open): initialize wop->clear From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
@@ -1,3 +1,26 @@
|
|||||||
|
2003-07-08 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
|
* [w3m-dev 03929] clear image
|
||||||
|
* image.c (syncImage): added
|
||||||
|
(drawImage): rewrite using syncImage()
|
||||||
|
(clearImage): use clear image command (6)
|
||||||
|
* w3mimgdisplay.c: change protocol
|
||||||
|
2 => terminate drawing
|
||||||
|
6 => clear image
|
||||||
|
(main): '2' calls TermImage()
|
||||||
|
'6' calls ClearImage()
|
||||||
|
TermImage() when exit
|
||||||
|
(TermImage): renamed from ClearImage
|
||||||
|
(ClearImage): rewritten to call w_op->clear()
|
||||||
|
* w3mimg.h/w3mimg.h (w3mimg_op): add clear()
|
||||||
|
* w3mimg/fb/fb.c (fb_clear): added
|
||||||
|
* w3mimg/fb/fb.h (fb_clear): added
|
||||||
|
* w3mimg/fb/fb_img.c (fb_image_clear): added
|
||||||
|
* w3mimg/fb/fb_w3mimg.c (w3mfb_clear): added
|
||||||
|
(w3mimg_fbopen): initialize wop->clear
|
||||||
|
* w3mimg/x11/x11_w3mimg.c (x11_clear): added
|
||||||
|
(w3mimg_x11open): initialize wop->clear
|
||||||
|
|
||||||
2003-07-08 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
2003-07-08 Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
* [w3m-dev 03927] deflate
|
* [w3m-dev 03927] deflate
|
||||||
@@ -7869,4 +7892,4 @@ a * [w3m-dev 03276] compile error on EWS4800
|
|||||||
* release-0-2-1
|
* release-0-2-1
|
||||||
* import w3m-0.2.1
|
* import w3m-0.2.1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.844 2003/07/07 15:39:43 ukai Exp $
|
$Id: ChangeLog,v 1.845 2003/07/07 15:48:16 ukai Exp $
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: image.c,v 1.34 2003/02/24 16:27:36 ukai Exp $ */
|
/* $Id: image.c,v 1.35 2003/07/07 15:48:16 ukai Exp $ */
|
||||||
|
|
||||||
#include "fm.h"
|
#include "fm.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -149,6 +149,24 @@ addImage(ImageCache * cache, int x, int y, int sx, int sy, int w, int h)
|
|||||||
n_terminal_image++;
|
n_terminal_image++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
syncImage(void)
|
||||||
|
{
|
||||||
|
fputs("3;\n", Imgdisplay_wf); /* XSync() */
|
||||||
|
fputs("4;\n", Imgdisplay_wf); /* put '\n' */
|
||||||
|
while (fflush(Imgdisplay_wf) != 0) {
|
||||||
|
if (ferror(Imgdisplay_wf))
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if (!fgetc(Imgdisplay_rf))
|
||||||
|
goto err;
|
||||||
|
return;
|
||||||
|
err:
|
||||||
|
closeImgdisplay();
|
||||||
|
image_index += MAX_IMAGE;
|
||||||
|
n_terminal_image = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
drawImage()
|
drawImage()
|
||||||
{
|
{
|
||||||
@@ -169,10 +187,6 @@ drawImage()
|
|||||||
if (!openImgdisplay())
|
if (!openImgdisplay())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!draw) {
|
|
||||||
fputs("3;\n", Imgdisplay_wf); /* XSync() */
|
|
||||||
draw = TRUE;
|
|
||||||
}
|
|
||||||
if (i->cache->index > 0) {
|
if (i->cache->index > 0) {
|
||||||
i->cache->index *= -1;
|
i->cache->index *= -1;
|
||||||
fputs("0;", Imgdisplay_wf); /* DrawImage() */
|
fputs("0;", Imgdisplay_wf); /* DrawImage() */
|
||||||
@@ -187,49 +201,39 @@ drawImage()
|
|||||||
fputs(buf, Imgdisplay_wf);
|
fputs(buf, Imgdisplay_wf);
|
||||||
fputs(i->cache->file, Imgdisplay_wf);
|
fputs(i->cache->file, Imgdisplay_wf);
|
||||||
fputs("\n", Imgdisplay_wf);
|
fputs("\n", Imgdisplay_wf);
|
||||||
fputs("4;\n", Imgdisplay_wf); /* put '\n' */
|
draw = TRUE;
|
||||||
while (fflush(Imgdisplay_wf) != 0) {
|
|
||||||
if (ferror(Imgdisplay_wf))
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!fgetc(Imgdisplay_rf))
|
|
||||||
goto err;
|
|
||||||
}
|
}
|
||||||
if (!draw)
|
if (!draw)
|
||||||
return;
|
return;
|
||||||
fputs("3;\n", Imgdisplay_wf); /* XSync() */
|
syncImage();
|
||||||
fputs("4;\n", Imgdisplay_wf); /* put '\n' */
|
|
||||||
while (fflush(Imgdisplay_wf) != 0) {
|
|
||||||
if (ferror(Imgdisplay_wf))
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (!fgetc(Imgdisplay_rf))
|
|
||||||
goto err;
|
|
||||||
/*
|
|
||||||
* touch_line();
|
|
||||||
* touch_column(CurColumn);
|
|
||||||
* #ifdef JP_CHARSET
|
|
||||||
* if (CurColumn > 0 &&
|
|
||||||
* CHMODE(ScreenImage[CurLine]->lineprop[CurColumn]) == C_WCHAR2)
|
|
||||||
* touch_column(CurColumn - 1);
|
|
||||||
* else if (CurColumn < COLS - 1 &&
|
|
||||||
* CHMODE(ScreenImage[CurLine]->lineprop[CurColumn]) == C_WCHAR1)
|
|
||||||
* touch_column(CurColumn + 1);
|
|
||||||
* #endif
|
|
||||||
*/
|
|
||||||
touch_cursor();
|
touch_cursor();
|
||||||
refresh();
|
refresh();
|
||||||
return;
|
|
||||||
err:
|
|
||||||
closeImgdisplay();
|
|
||||||
image_index += MAX_IMAGE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
clearImage()
|
clearImage()
|
||||||
{
|
{
|
||||||
|
static char buf[64];
|
||||||
|
int j;
|
||||||
|
TerminalImage *i;
|
||||||
|
|
||||||
if (!activeImage)
|
if (!activeImage)
|
||||||
return;
|
return;
|
||||||
|
if (!n_terminal_image)
|
||||||
|
return;
|
||||||
|
if (!Imgdisplay_wf) {
|
||||||
|
n_terminal_image = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (j = 0; j < n_terminal_image; j++) {
|
||||||
|
i = &terminal_image[j];
|
||||||
|
if (!(i->cache->loaded & IMG_FLAG_LOADED &&
|
||||||
|
i->width > 0 && i->height > 0))
|
||||||
|
continue;
|
||||||
|
sprintf(buf, "6;%d;%d;%d;%d\n", i->x, i->y, i->width, i->height);
|
||||||
|
fputs(buf, Imgdisplay_wf);
|
||||||
|
}
|
||||||
|
syncImage();
|
||||||
n_terminal_image = 0;
|
n_terminal_image = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+25
-1
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: fb.c,v 1.9 2002/10/31 09:36:22 ukai Exp $ */
|
/* $Id: fb.c,v 1.10 2003/07/07 15:48:17 ukai Exp $ */
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
fb.c 0.3 Copyright (C) 2002, hito
|
fb.c 0.3 Copyright (C) 2002, hito
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
@@ -365,6 +365,30 @@ fb_height(void)
|
|||||||
return vscinfo.yres;
|
return vscinfo.yres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fb_clear(int x, int y, int w, int h, int r, int g, int b)
|
||||||
|
{
|
||||||
|
unsigned long bg;
|
||||||
|
int i, offset_fb;
|
||||||
|
|
||||||
|
if (is_open != TRUE || x > fb_width() || y > fb_height())
|
||||||
|
return 1;
|
||||||
|
if (x + w > fb_width())
|
||||||
|
w = fb_width() - x;
|
||||||
|
if (y + h > fb_height())
|
||||||
|
h = fb_height() - y;
|
||||||
|
|
||||||
|
offset_fb = fscinfo.line_length * y + pixel_size * x;
|
||||||
|
bg = ((r >> (CHAR_BIT - vscinfo.red.length)) << vscinfo.red.offset) +
|
||||||
|
((g >> (CHAR_BIT - vscinfo.green.length)) << vscinfo.green.offset) +
|
||||||
|
((b >> (CHAR_BIT - vscinfo.blue.length)) << vscinfo.blue.offset);
|
||||||
|
for (i = 0; i < h; i++) {
|
||||||
|
memcpy(buf + offset_fb, bg, pixel_size * w);
|
||||||
|
offset_fb += fscinfo.line_length;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/********* static functions **************/
|
/********* static functions **************/
|
||||||
static
|
static
|
||||||
int
|
int
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: fb.h,v 1.6 2002/10/10 16:16:03 ukai Exp $ */
|
/* $Id: fb.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */
|
||||||
#ifndef fb_header
|
#ifndef fb_header
|
||||||
#define fb_header
|
#define fb_header
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
@@ -29,5 +29,6 @@ int fb_open(void);
|
|||||||
void fb_close(void);
|
void fb_close(void);
|
||||||
int fb_width(void);
|
int fb_width(void);
|
||||||
int fb_height(void);
|
int fb_height(void);
|
||||||
|
int fb_clear(int x, int y, int w, int h, int r, int g, int b);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+7
-1
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: fb_img.c,v 1.5 2002/10/10 16:16:04 ukai Exp $ */
|
/* $Id: fb_img.c,v 1.6 2003/07/07 15:48:17 ukai Exp $ */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -24,3 +24,9 @@ fb_image_set_bg(int r, int g, int b)
|
|||||||
bg_g = g;
|
bg_g = g;
|
||||||
bg_b = b;
|
bg_b = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fb_image_clear(int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
return fb_clear(x, y, w, h, bg_r, bg_g, bg_b);
|
||||||
|
}
|
||||||
|
|||||||
+11
-1
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: fb_w3mimg.c,v 1.11 2003/04/03 16:35:48 ukai Exp $ */
|
/* $Id: fb_w3mimg.c,v 1.12 2003/07/07 15:48:17 ukai Exp $ */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -60,6 +60,15 @@ w3mfb_close(w3mimg_op * self)
|
|||||||
fb_close();
|
fb_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
w3mfb_clear(w3mimg_op * self, int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
if (self == NULL)
|
||||||
|
return 0;
|
||||||
|
fb_image_clear(x, y, w, h);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
w3mfb_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
|
w3mfb_load_image(w3mimg_op * self, W3MImage * img, char *fname, int w, int h)
|
||||||
{
|
{
|
||||||
@@ -179,6 +188,7 @@ w3mimg_fbopen()
|
|||||||
wop->set_background = w3mfb_set_background;
|
wop->set_background = w3mfb_set_background;
|
||||||
wop->sync = w3mfb_sync;
|
wop->sync = w3mfb_sync;
|
||||||
wop->close = w3mfb_close;
|
wop->close = w3mfb_close;
|
||||||
|
wop->clear = w3mfb_clear;
|
||||||
|
|
||||||
wop->load_image = w3mfb_load_image;
|
wop->load_image = w3mfb_load_image;
|
||||||
wop->show_image = w3mfb_show_image;
|
wop->show_image = w3mfb_show_image;
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: w3mimg.h,v 1.6 2003/03/24 15:45:58 ukai Exp $ */
|
/* $Id: w3mimg.h,v 1.7 2003/07/07 15:48:17 ukai Exp $ */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#ifdef USE_W3MIMG_FB
|
#ifdef USE_W3MIMG_FB
|
||||||
@@ -32,6 +32,7 @@ typedef struct _w3mimg_op {
|
|||||||
void (*free_image) (struct _w3mimg_op * self, W3MImage * img);
|
void (*free_image) (struct _w3mimg_op * self, W3MImage * img);
|
||||||
int (*get_image_size) (struct _w3mimg_op * self, W3MImage * img,
|
int (*get_image_size) (struct _w3mimg_op * self, W3MImage * img,
|
||||||
char *fname, int *w, int *h);
|
char *fname, int *w, int *h);
|
||||||
|
int (*clear) (struct _w3mimg_op * self, int x, int y, int w, int h);
|
||||||
} w3mimg_op;
|
} w3mimg_op;
|
||||||
|
|
||||||
#ifdef USE_W3MIMG_X11
|
#ifdef USE_W3MIMG_X11
|
||||||
|
|||||||
+15
-1
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: x11_w3mimg.c,v 1.22 2003/06/13 15:04:00 ukai Exp $ */
|
/* $Id: x11_w3mimg.c,v 1.23 2003/07/07 15:48:17 ukai Exp $ */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -122,6 +122,19 @@ x11_finish(w3mimg_op * self)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
x11_clear(w3mimg_op * self, int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
struct x11_info *xi;
|
||||||
|
if (self == NULL)
|
||||||
|
return 0;
|
||||||
|
xi = (struct x11_info *)self->priv;
|
||||||
|
if (xi == NULL)
|
||||||
|
return 0;
|
||||||
|
XClearArea(xi->display, xi->window, x, y, w, h, FALSE);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
x11_active(w3mimg_op * self)
|
x11_active(w3mimg_op * self)
|
||||||
{
|
{
|
||||||
@@ -688,6 +701,7 @@ w3mimg_x11open()
|
|||||||
wop->set_background = x11_set_background;
|
wop->set_background = x11_set_background;
|
||||||
wop->sync = x11_sync;
|
wop->sync = x11_sync;
|
||||||
wop->close = x11_close;
|
wop->close = x11_close;
|
||||||
|
wop->clear = x11_clear;
|
||||||
|
|
||||||
wop->load_image = x11_load_image;
|
wop->load_image = x11_load_image;
|
||||||
wop->show_image = x11_show_image;
|
wop->show_image = x11_show_image;
|
||||||
|
|||||||
+39
-6
@@ -1,4 +1,4 @@
|
|||||||
/* $Id: w3mimgdisplay.c,v 1.13 2003/03/24 15:45:57 ukai Exp $ */
|
/* $Id: w3mimgdisplay.c,v 1.14 2003/07/07 15:48:16 ukai Exp $ */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -21,7 +21,8 @@ static int maxImage = 0, maxAnim = 100;
|
|||||||
|
|
||||||
static void GetOption(int argc, char **argv);
|
static void GetOption(int argc, char **argv);
|
||||||
static void DrawImage(char *buf, int redraw);
|
static void DrawImage(char *buf, int redraw);
|
||||||
static void ClearImage(void);
|
static void TermImage(void);
|
||||||
|
static void ClearImage(char *buf);
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
@@ -100,15 +101,18 @@ main(int argc, char **argv)
|
|||||||
* op args
|
* op args
|
||||||
* 0; params draw image
|
* 0; params draw image
|
||||||
* 1; params redraw image
|
* 1; params redraw image
|
||||||
* 2; -none- clear image
|
* 2; -none- terminate drawing
|
||||||
* 3; -none- sync drawing
|
* 3; -none- sync drawing
|
||||||
* 4; -none- nop, sync communication
|
* 4; -none- nop, sync communication
|
||||||
* response '\n'
|
* response '\n'
|
||||||
* 5; path get size of image,
|
* 5; path get size of image,
|
||||||
* response "<width> <height>\n"
|
* response "<width> <height>\n"
|
||||||
|
* 6; params(6) clear image
|
||||||
*
|
*
|
||||||
* params
|
* params
|
||||||
* <n>;<x>;<y>;<w>;<h>;<sx>;<sy>;<sw>;<sh>;<path>
|
* <n>;<x>;<y>;<w>;<h>;<sx>;<sy>;<sw>;<sh>;<path>
|
||||||
|
* params(6)
|
||||||
|
* <x>;<y>;<w>;<h>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
switch (buf[0]) {
|
switch (buf[0]) {
|
||||||
@@ -119,7 +123,7 @@ main(int argc, char **argv)
|
|||||||
DrawImage(&buf[2], 1);
|
DrawImage(&buf[2], 1);
|
||||||
break;
|
break;
|
||||||
case '2':
|
case '2':
|
||||||
ClearImage();
|
TermImage();
|
||||||
break;
|
break;
|
||||||
case '3':
|
case '3':
|
||||||
w_op->sync(w_op);
|
w_op->sync(w_op);
|
||||||
@@ -144,9 +148,12 @@ main(int argc, char **argv)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case '6':
|
||||||
|
ClearImage(&buf[2]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ClearImage();
|
TermImage();
|
||||||
w_op->close(w_op);
|
w_op->close(w_op);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
@@ -278,7 +285,7 @@ DrawImage(char *buf, int redraw)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ClearImage(void)
|
TermImage(void)
|
||||||
{
|
{
|
||||||
w_op->finish(w_op);
|
w_op->finish(w_op);
|
||||||
if (imageBuf) {
|
if (imageBuf) {
|
||||||
@@ -291,3 +298,29 @@ ClearImage(void)
|
|||||||
}
|
}
|
||||||
maxImage = 0;
|
maxImage = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ClearImage(char *buf)
|
||||||
|
{
|
||||||
|
char *p = buf;
|
||||||
|
int x = 0, y = 0, w = 0, h = 0;
|
||||||
|
|
||||||
|
if (!p)
|
||||||
|
return;
|
||||||
|
for (; isdigit(*p); p++)
|
||||||
|
x = 10 * x + (*p - '0');
|
||||||
|
if (*(p++) != ';')
|
||||||
|
return;
|
||||||
|
for (; isdigit(*p); p++)
|
||||||
|
y = 10 * y + (*p - '0');
|
||||||
|
if (*(p++) != ';')
|
||||||
|
return;
|
||||||
|
for (; isdigit(*p); p++)
|
||||||
|
w = 10 * w + (*p - '0');
|
||||||
|
if (*(p++) != ';')
|
||||||
|
return;
|
||||||
|
for (; isdigit(*p); p++)
|
||||||
|
h = 10 * h + (*p - '0');
|
||||||
|
|
||||||
|
w_op->clear(w_op, x, y, w, h);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user