From p.murrell at auckland.ac.nz  Thu Oct 23 22:30:32 2003
From: p.murrell at auckland.ac.nz (Paul Murrell)
Date: Thu Oct 23 22:29:45 2003
Subject: [Rd] Ask for information about device architecture
References: <3F980E71.4020007@wanadoo.fr>
Message-ID: <3F983A68.6050706@stat.auckland.ac.nz>

Hi


l.bize@wanadoo.fr wrote:
> Hello.
> I'm looking for documentation about the graphic device model in R.
> I would understand it in the details, but it seems a bit complex :)
> Thanks for any documents which will help me.


I'm assuming you want to write a new device ...

Here are a couple of places to look:

The API for graphics devices (such as it is) is in
R/src/include/R_ext/graphicsDevice.h
There's a reasonable amount of documentation in the code; you should 
probably ingore the first set of "NOTES" and look at all of the comments 
in the NewDevDesc structure, plus the stuff at the end of the file.

The file
R/src/modules/X11/devX11.c
provides a "template" for how a device should be implemented.  It also 
has a reasonable amount of documentation in the code.
Most of the device functions should be fairly straightforward -- 
depending on what sort of device you want to implement, dev_MetricInfo 
can be challenging, but returning 0 for all values is a valid option at 
least initially.
Probably the trickiest part is writing the device initialisation and 
making sure that you allocate/deallocate structures in the correct 
places -- here the X11 template can be particularly useful.

There are a couple of examples of add-on devices for R, so the source 
code for these (particularly the stuff for initialising the device) 
might be useful;  see the gtkDevice package and the RSvgDevice package 
(both on CRAN).

There is a document describing a reorganisation of R's graphics code 
(started a couple of years ago, but still ongoing -- see below) at
http://www.stat.auckland.ac.nz/~paul/R/graphicsChanges.html
Some of this is relevant to graphics device structures and includes a 
section on what should happen when a device is started and when it is 
killed.

Note that my current plan is to make some changes to this stuff in the 
near future (e.g., the graphical primitive functions dev_line, etc will 
be getting a graphical-parameter-structure rather than individual 
graphical parameters col, lwd, ...), so if you go ahead with anything, 
please keep in touch so that I can let you know when these changes (are 
about to) happen.

Paul
-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul@stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/


[Rd] Ask for information about device architecture
Paul Murrell