0,0 → 1,333 |
#include<menuet/os.h> |
#define _WIN32 |
#include "fitz.h" |
#include "mupdf.h" |
#include "muxps.h" |
#include "pdfapp.h" |
|
|
|
static char Title[] = "some title"; |
static char * filename = "/hd0/1/yand.pdf"; |
static pdfapp_t gapp; |
|
void f65(unsigned x, unsigned y, unsigned w, unsigned h, char *d) //Вывод картинки |
{ |
asm ("nop"::"c"(w*65536+h), "d"(x*65536+y), "b"(d)); |
asm ("xor %eax, %eax"); |
asm ("movl %eax, %ebp"); |
asm ("pushl $32"); |
asm ("popl %esi"); |
asm ("int $0x40"::"a"(65)); |
|
} |
|
struct blit_call |
{ |
int dstx; |
int dsty; |
int w; |
int h; |
|
int srcx; |
int srcy; |
int srcw; |
int srch; |
|
unsigned char *d; |
int stride; |
}; |
|
void blit(int dstx, int dsty, int w, int h, int srcx, int srcy,int srcw, int srch, int stride, char *d) //Вызов сисфункции Blitter |
{ |
|
struct blit_call image; |
image.dstx=dstx; |
image.dsty=dsty; |
image.w=w; |
image.h=h; |
image.srcx=srcx; |
image.srcy=srcy; |
image.srcw=srcw; |
image.srch=srch; |
image.stride=stride; |
image.d=d; |
|
|
asm ("int $0x40"::"a"(73),"b"(0),"c"(&image)); |
|
} |
|
void winwarn(pdfapp_t *app, char *msg) |
{ |
fprintf(stderr, "mupdf: %s\n", msg); |
} |
|
void winerror(pdfapp_t *app, fz_error error) |
{ |
fz_catch(error, "aborting"); |
exit(1); |
} |
|
char *winpassword(pdfapp_t *app, char *filename) |
{ |
char *r = ""; |
return r; |
} |
|
|
void wincursor(pdfapp_t *app, int curs) |
{ |
|
} |
|
void wintitle(pdfapp_t *app, char *s) |
{ |
|
sprintf(Title,"uPDF: %s", s); |
} |
|
void winhelp(pdfapp_t *app) |
{ |
|
} |
|
void winresize(pdfapp_t *app, int w, int h) |
{ |
//here should be something!!! |
|
|
} |
|
|
void windocopy(pdfapp_t *app) |
{ |
} |
|
void winreloadfile(pdfapp_t *app) |
{ |
pdfapp_close(app); |
|
|
pdfapp_open(app, filename, 0, 1); |
} |
|
void winopenuri(pdfapp_t *app, char *buf) |
{ |
/* here can be browser! |
char *browser = getenv("BROWSER"); |
if (!browser) |
browser = "open"; |
if (fork() == 0) |
execlp(browser, browser, buf, (char*)0); |
* */ |
|
} |
|
|
|
void winclose(pdfapp_t *app) |
{ |
pdfapp_close(&gapp); |
__menuet__sys_exit(); |
} |
|
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c) |
{ |
asm ("int $0x40"::"a"(13), "b"(x*65536+w), "c"(y*65536+h), "d"(c)); |
} |
|
|
static void winblit(pdfapp_t *app) |
{ |
char yoba[32]; |
int x0 = gapp.panx; |
int y0 = gapp.pany; |
int x1 = gapp.panx + gapp.image->w; |
int y1 = gapp.pany + gapp.image->h; |
__menuet__debug_out(" Window blit\n"); |
/* |
XSetForeground(xdpy, xgc, xbgcolor.pixel); |
fillrect(0, 0, x0, gapp.winh); |
fillrect(x1, 0, gapp.winw - x1, gapp.winh); |
fillrect(0, 0, gapp.winw, y0); |
fillrect(0, y1, gapp.winw, gapp.winh - y1);*/ |
if (gapp.image->h-y0 > 0) { |
kol_paint_bar(0, gapp.image->h-y0, 590, 368, 0xEFEFEF); |
} |
/*kol_paint_bar(x1, 0, gapp.winw - x1, gapp.winh, 0x00FF00); |
kol_paint_bar(0, 0, gapp.winw, y0, 0xFF0000); |
kol_paint_bar(0, y1, gapp.winw, gapp.winh - y1, 0xFFFF);*/ |
|
|
/*XSetForeground(xdpy, xgc, xshcolor.pixel); |
fillrect(x0+2, y1, gapp.image->w, 2); |
fillrect(x1, y0+2, 2, gapp.image->h);*/ |
sprintf (yoba, "%d x %d, %d x %d \n", gapp.image->w, gapp.image->h, gapp.winw, gapp.winh); |
__menuet__debug_out(yoba); |
|
|
if (gapp.image->n == 4) |
/*ximage_blit(xwin, xgc, |
x0, y0, |
gapp.image->samples, |
0, 0, |
gapp.image->w, |
gapp.image->h, |
gapp.image->w * gapp.image->n);*/ |
// f65(x0,y0+32,gapp.image->w,gapp.image->h,gapp.image->samples); |
|
blit(6, 24, 588, 368, x0, y0,gapp.image->w, gapp.image->h, gapp.image->w * gapp.image->n, gapp.image->samples); |
|
|
else if (gapp.image->n == 2) |
{ |
int i = gapp.image->w*gapp.image->h; |
unsigned char *color = malloc(i*4); |
if (color != NULL) |
{ |
unsigned char *s = gapp.image->samples; |
unsigned char *d = color; |
for (; i > 0 ; i--) |
{ |
d[2] = d[1] = d[0] = *s++; |
d[3] = *s++; |
d += 4; |
} |
/*ximage_blit(xwin, xgc, |
x0, y0, |
color, |
0, 0, |
gapp.image->w, |
gapp.image->h, |
gapp.image->w * 4); */ |
//f65(x0,y0,gapp.image->w,gapp.image->h,color); |
blit(6, 24, 588, 368, x0, y0,gapp.image->w, gapp.image->h, gapp.image->w * 4, color); |
free(color); |
} |
} |
|
|
__menuet__bar(0,0,600,20,0xFFFFFF); |
__menuet__make_button(0,0,40,20,7,0x404040FF); //(posirion x, position y, width, height, id, color) |
__menuet__write_text(5,4,0xFFFFFF,"Open",4); |
|
__menuet__make_button(550,0,20,20,2,0x404040FF); //prev page |
__menuet__write_text(555,3,0xFFFFFF,"<",1); |
|
__menuet__make_button(570,0,20,20,3,0x404040FF); //nex page |
__menuet__write_text(575,3,0xFFFFFF,">",1); |
|
__menuet__make_button(40,0,20,20,4,0x404040FF); //show help |
__menuet__write_text(45,3,0xFFFFFF,"?",1); |
|
__menuet__make_button(60,0,20,20,5,0x404040FF); //magnify + |
__menuet__write_text(65,3,0xFFFFFF,"+",1); |
|
__menuet__make_button(80,0,20,20,6,0x404040FF); //magnify - |
__menuet__write_text(85,3,0xFFFFFF,"-",1); |
|
__menuet__make_button(570,20,20,20,8,0x404040FF); // move up |
__menuet__write_text(575,3,0xFFFFFF,"^",1); |
|
__menuet__make_button(570,360,20,20,9,0x404040FF); // move down |
__menuet__write_text(575,363,0xFFFFFF,"v",1); |
|
__menuet__make_button(100,0,20,20,10,0x404040FF); // rotate + 15 deg |
__menuet__write_text(105,3,0xFFFFFF,"cw",1); |
|
__menuet__make_button(120,0,20,20,11,0x404040FF); // rotate - 15 deg |
__menuet__write_text(125,3,0xFFFFFF,"ccw",1); |
|
|
} |
|
void paint(void) |
{ |
__menuet__window_redraw(1); |
//__menuet__define_window(10,10,600,400,0x64CFCFCF,0x800000FF,Title); |
__menuet__define_window(10,10,600,400,0x73CFCFCF,0x800000FF,Title); |
__menuet__bar(0,0,600,400,0xFFFFFF); |
winblit(&gapp); |
__menuet__window_redraw(2); |
} |
|
void winrepaint(pdfapp_t *app) |
{ |
winblit(&gapp); |
} |
|
void winrepaintsearch(pdfapp_t *app) |
{ |
paint(); |
//search! |
} |
|
|
int main (void) |
{ |
char* original_command_line = *(char**)0x1C; |
__menuet__debug_out(original_command_line); |
|
char buf[128]; |
int resolution = 72; |
int pageno = 1; |
__menuet__debug_out("\nStarted\n"); |
fz_accelerate(); |
__menuet__debug_out("PDF init\n"); |
pdfapp_init(&gapp); |
gapp.scrw = 600; |
gapp.scrh = 400; |
gapp.resolution = resolution; |
gapp.pageno = pageno; |
__menuet__debug_out("PDF Open\n"); |
pdfapp_open(&gapp, original_command_line, 0, 0); |
__menuet__debug_out("PDF Opened\n"); |
|
|
|
int i; |
int butt; |
|
__menuet__debug_out("Inital paint\n"); |
pdfapp_onresize(&gapp, 600, 400); |
paint(); |
for(;;) |
{ |
|
i=__menuet__wait_for_event(); |
butt = __menuet__get_button_id(); |
if (gapp.image) |
{ |
|
gapp.shrinkwrap = 0; |
} |
switch(i) |
{ |
case 1: |
paint(); |
|
continue; |
case 2: |
buf[0]=__menuet__getkey(); |
pdfapp_onkey(&gapp, buf[0]); |
continue; |
case 3: |
if(butt==1) __menuet__sys_exit();//browse file |
if(butt==2) pdfapp_onkey(&gapp, '['); //previous page |
if(butt==3) pdfapp_onkey(&gapp, ']'); __menuet__debug_out("\nStarted\n"); //next page |
if(butt==4) pdfapp_onkey(&gapp, '?'); //show help window |
if(butt==5) pdfapp_onkey(&gapp, '+'); //magnify + |
if(butt==6) pdfapp_onkey(&gapp, '-'); //mag - |
if(butt==7) ;//mag open file |
if(butt==8) pdfapp_onkey(&gapp, 'j'); //move up |
if(butt==9) pdfapp_onkey(&gapp, 'k'); //move down |
if(butt==10) pdfapp_onkey(&gapp, 'a'); //rotate +15 deg |
if(butt==11) pdfapp_onkey(&gapp, 's'); //rotate -15deg |
continue; |
|
} |
} |
return 0; |
} |
|