kolibrios-gitea/contrib/media/updf/apps/kos_main.c
right-hearted 4f7ee97ec9 uPDF with buttons
git-svn-id: svn://kolibrios.org@4680 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-03-22 21:00:40 +00:00

334 lines
7.0 KiB
C

#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;
}