Author: chris_y
Date: Sat Aug 29 09:00:57 2009
New Revision: 9495
URL:
http://source.netsurf-browser.org?rev=9495&view=rev
Log:
Changes for asynchronous printing. Currently disabled, as NetSurf window doesn't
redraw while printing in progress
Modified:
trunk/netsurf/!NetSurf/Resources/de/Messages
trunk/netsurf/!NetSurf/Resources/en/Messages
trunk/netsurf/!NetSurf/Resources/fr/Messages
trunk/netsurf/!NetSurf/Resources/it/Messages
trunk/netsurf/!NetSurf/Resources/nl/Messages
trunk/netsurf/amiga/gui.c
trunk/netsurf/amiga/print.c
trunk/netsurf/amiga/print.h
Modified: trunk/netsurf/!NetSurf/Resources/de/Messages
URL:
http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/de/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/de/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/de/Messages Sat Aug 29 09:00:57 2009
@@ -591,7 +591,7 @@
AWNotSeen:Please locate the AWViewer application and try again.
# Error messages for Amiga version only
-NoMode:No matching mode in screens database
+CompError:Unable to open
# Queries
# =======
Modified: trunk/netsurf/!NetSurf/Resources/en/Messages
URL:
http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/en/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/en/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/en/Messages Sat Aug 29 09:00:57 2009
@@ -596,7 +596,7 @@
EncNotRec:Encoding type not recognised.
# Error messages for Amiga version only
-NoMode:No matching mode in screens database
+CompError:Unable to open
# Queries
# =======
Modified: trunk/netsurf/!NetSurf/Resources/fr/Messages
URL:
http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/fr/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/fr/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/fr/Messages Sat Aug 29 09:00:57 2009
@@ -591,7 +591,7 @@
AWNotSeen:Localisez l'application AMViewer SVP puis réessayez.
# Error messages for Amiga version only
-NoMode:No matching mode in screens database
+CompError:Unable to open
# Queries
# =======
Modified: trunk/netsurf/!NetSurf/Resources/it/Messages
URL:
http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/it/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/it/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/it/Messages Sat Aug 29 09:00:57 2009
@@ -598,7 +598,7 @@
EncNotRec:Tipo di codifica sconosciuta.
# Error messages for Amiga version only
-NoMode:Questa modalità non coincide nel database degli schermi
+CompError:Unable to open
# Queries
# =======
Modified: trunk/netsurf/!NetSurf/Resources/nl/Messages
URL:
http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/nl/M...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/nl/Messages (original)
+++ trunk/netsurf/!NetSurf/Resources/nl/Messages Sat Aug 29 09:00:57 2009
@@ -591,7 +591,7 @@
AWNotSeen:Please locate the AWViewer application and try again.
# Error messages for Amiga version only
-NoMode:No matching mode in screens database
+CompError:Unable to open
# Queries
# =======
Modified: trunk/netsurf/amiga/gui.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.c?rev=9495&...
==============================================================================
--- trunk/netsurf/amiga/gui.c (original)
+++ trunk/netsurf/amiga/gui.c Sat Aug 29 09:00:57 2009
@@ -261,6 +261,8 @@
if(!(sport = AllocSysObjectTags(ASOT_PORT,
ASO_NoTrack,FALSE,
TAG_DONE))) die(messages_get("NoMemory"));
+
+ ami_print_init();
if(PopupMenuBase = OpenLibrary("popupmenu.class",0))
{
@@ -1406,9 +1408,11 @@
ULONG winsignal = 1L << sport->mp_SigBit;
ULONG appsig = 1L << appport->mp_SigBit;
ULONG schedulesig = 1L << msgport->mp_SigBit;
- ULONG signalmask = winsignal | appsig | schedulesig | rxsig;
ULONG signal;
struct Message *timermsg = NULL;
+ struct MsgPort *printmsgport = ami_print_get_msgport();
+ ULONG printsig = 1L << printmsgport->mp_SigBit;
+ ULONG signalmask = winsignal | appsig | schedulesig | rxsig | printsig;
signal = Wait(signalmask);
@@ -1423,6 +1427,11 @@
else if(signal & rxsig)
{
ami_arexx_handle();
+ }
+ else if(signal & printsig)
+ {
+ while(GetMsg(printmsgport)); //ReplyMsg
+ ami_print_cont();
}
else if(signal & schedulesig)
{
@@ -1582,6 +1591,7 @@
}
ami_clipboard_free();
+ ami_print_free();
FreeSysObject(ASOT_PORT,appport);
FreeSysObject(ASOT_PORT,sport);
@@ -2382,6 +2392,7 @@
yoffset=bbox->Top;
plot=amiplot;
+ glob = &browserglob;
if((y1<sy) || (y0>sy+height)) return;
if((x1<sx) || (x0>sx+width)) return;
@@ -2481,6 +2492,7 @@
xoffset=bbox->Left;
yoffset=bbox->Top;
plot = amiplot;
+ glob = &browserglob;
if(g->bw->reformat_pending)
{
Modified: trunk/netsurf/amiga/print.c
URL:
http://source.netsurf-browser.org/trunk/netsurf/amiga/print.c?rev=9495&am...
==============================================================================
--- trunk/netsurf/amiga/print.c (original)
+++ trunk/netsurf/amiga/print.c Sat Aug 29 09:00:57 2009
@@ -21,8 +21,8 @@
#include "render/font.h"
#include "amiga/gui.h"
#include "amiga/options.h"
+#include "amiga/print.h"
-#include <proto/exec.h>
#include <proto/Picasso96API.h>
#include <devices/printer.h>
#include <devices/prtbase.h>
@@ -46,18 +46,19 @@
struct PrinterData *PD;
struct PrinterExtendedData *PED;
struct MsgPort *msgport;
+ struct content *c;
+ struct print_settings *ps;
int page;
+ int pages;
};
struct ami_printer_info ami_print_info;
void ami_print(struct content *c)
{
- struct print_settings *ps;
+ double height, print_height;
- if(!(ami_print_info.msgport = AllocSysObjectTags(ASOT_PORT,
- ASO_NoTrack,FALSE,
- TAG_DONE))) return;
+ if(!ami_print_info.msgport) return;
if(!(ami_print_info.PReq =
(struct IODRPTagsReq *)AllocSysObjectTags(ASOT_IOREQUEST,
@@ -67,21 +68,67 @@
TAG_DONE))) return;
if(OpenDevice("printer.device", option_printer_unit,
- (struct IORequest *)ami_print_info.PReq, 0)) return;
+ (struct IORequest *)ami_print_info.PReq, 0))
+ {
+ warn_user("CompError","printer.device");
+ return;
+ }
ami_print_info.PD = (struct PrinterData *)ami_print_info.PReq->io_Device;
ami_print_info.PED = &ami_print_info.PD->pd_SegmentData->ps_PED;
- ps = print_make_settings(PRINT_DEFAULT, c->url, &nsfont);
- ps->page_width = ami_print_info.PED->ped_MaxXDots;
- ps->page_height = ami_print_info.PED->ped_MaxYDots;
- ps->scale = 1.0;
+ ami_print_info.ps = print_make_settings(PRINT_DEFAULT, c->url, &nsfont);
+ ami_print_info.ps->page_width = ami_print_info.PED->ped_MaxXDots;
+ ami_print_info.ps->page_height = ami_print_info.PED->ped_MaxYDots;
+ ami_print_info.ps->scale = 1.0;
- print_basic_run(c, &amiprinter, ps);
+ print_set_up(c, &amiprinter, ami_print_info.ps, &height);
- CloseDevice(ami_print_info.PReq);
- FreeSysObject(ASOT_IOREQUEST,ami_print_info.PReq);
+ height *= ami_print_info.ps->scale;
+ ami_print_info.pages = height / ami_print_info.ps->page_height;
+ ami_print_info.c = c;
+
+ while(ami_print_cont()); /* remove while() for async printing */
+}
+
+bool ami_print_cont(void)
+{
+ bool ret = false;
+
+ if(ami_print_info.page <= ami_print_info.pages)
+ {
+ glob = ami_print_info.gg;
+ print_draw_next_page(&amiprinter, ami_print_info.ps);
+ ami_print_dump();
+ glob = &browserglob;
+ ret = true;
+ }
+ else
+ {
+ print_cleanup(ami_print_info.c, &amiprinter, ami_print_info.ps);
+ ret = false;
+ }
+
+ return ret;
+}
+
+struct MsgPort *ami_print_init(void)
+{
+ ami_print_info.msgport = AllocSysObjectTags(ASOT_PORT,
+ ASO_NoTrack,FALSE,
+ TAG_DONE);
+
+ return ami_print_info.msgport;
+}
+
+void ami_print_free(void)
+{
FreeSysObject(ASOT_PORT,ami_print_info.msgport);
+}
+
+struct MsgPort *ami_print_get_msgport(void)
+{
+ return ami_print_info.msgport;
}
bool ami_print_begin(struct print_settings *ps)
@@ -94,7 +141,6 @@
ami_print_info.PED->ped_MaxXDots,
ami_print_info.PED->ped_MaxYDots);
- glob = ami_print_info.gg;
ami_print_info.page = 0;
return true;
@@ -102,20 +148,19 @@
bool ami_print_next_page(void)
{
- bool ret = true;
-
- if(ami_print_info.page > 0) ret = ami_print_dump();
ami_print_info.page++;
- return ret;
+ return true;
}
void ami_print_end(void)
{
- ami_print_dump();
ami_free_layers(ami_print_info.gg);
FreeVec(ami_print_info.gg);
glob = &browserglob;
+
+ CloseDevice(ami_print_info.PReq);
+ FreeSysObject(ASOT_IOREQUEST,ami_print_info.PReq);
}
bool ami_print_dump(void)
@@ -134,7 +179,7 @@
ami_print_info.PReq->io_DestRows = ami_print_info.PED->ped_MaxYDots;
ami_print_info.PReq->io_Special = 0;
- DoIO(ami_print_info.PReq);
+ DoIO(ami_print_info.PReq); /* SendIO for async printing */
return true;
}
Modified: trunk/netsurf/amiga/print.h
URL:
http://source.netsurf-browser.org/trunk/netsurf/amiga/print.h?rev=9495&am...
==============================================================================
--- trunk/netsurf/amiga/print.h (original)
+++ trunk/netsurf/amiga/print.h Sat Aug 29 09:00:57 2009
@@ -18,7 +18,13 @@
#ifndef AMIGA_PRINT_H
#define AMIGA_PRINT_H
+#include <proto/exec.h>
+
struct content;
void ami_print(struct content *c);
+bool ami_print_cont(void);
+struct MsgPort *ami_print_init(void);
+void ami_print_free(void);
+struct MsgPort *ami_print_get_msgport(void);
#endif