49
edits
(→Scope) |
|||
| Line 126: | Line 126: | ||
== Proposed API == | == Proposed API == | ||
See the example to get an idea. | See the example to get an idea. (This section is still work in progress.) | ||
The PrintRenderingContext definition is very much the same as the [http://dev.w3.org/html5/2dcontext/ HTML5 Canvas' Context] | |||
Changes are listed on top and are commented out. The reason for removing the APIs for the PrintRenderingContext is given on lines starting with //!. | |||
interface PrintFontContext: CanvasText | |||
{ | |||
// back-reference to the printDocument. | |||
readonly attribute PrintDocument printDocument; | |||
} | |||
interface PrintRenderingContext { | |||
// --- | |||
// Stuff removed compared to CanvasRenderingContext2d. | |||
// --- | |||
//! There is no notion of "pixels" while printing. Therefore, remove all the | |||
// APIs that deal with "raw" pixel data. | |||
// // pixel manipulation | |||
// ImageData createImageData(double sw, double sh); | |||
// ImageData createImageData(ImageData imagedata); | |||
// ImageData getImageData(double sx, double sy, double sw, double sh); | |||
// void putImageData(ImageData imagedata, double dx, double dy); | |||
// void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight); | |||
//! No sense to reference back to a canvas. | |||
// readonly attribute HTMLCanvasElement canvas; | |||
//! No focusRing drawing or scrolling. | |||
// void drawSystemFocusRing(Element element); | |||
// void drawSystemFocusRing(Path path, Element element); | |||
// boolean drawCustomFocusRing(Element element); | |||
// boolean drawCustomFocusRing(Path path, Element element); | |||
// void scrollPathIntoView(); | |||
// void scrollPathIntoView(Path path); | |||
//! Remove the measureText function from this interface and add it to the | |||
// CanvasText interface to be reuseable for the PrintFontContext. | |||
// TextMetrics measureText(DOMString text); | |||
// --- | |||
// Stuff added compared to CanvasRenderingContext2d. | |||
// --- | |||
// back-reference to the printDocument. | |||
readonly attribute PrintDocument printDocument; | |||
// tell the backend that this page has finished rendering. | |||
void endPage(); | |||
// --- | |||
// From here everything stays the same compared to CanvasRenderingContext2d. | |||
// --- | |||
// state | |||
void save(); // push state on state stack | |||
void restore(); // pop state stack and restore state | |||
// compositing | |||
attribute double globalAlpha; // (default 1.0) | |||
attribute DOMString globalCompositeOperation; // (default source-over) | |||
// colors and styles (see also the CanvasLineStyles interface) | |||
attribute any strokeStyle; // (default black) | |||
attribute any fillStyle; // (default black) | |||
CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1); | |||
CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1); | |||
CanvasPattern createPattern((HTMLImageElement or HTMLCanvasElement or HTMLVideoElement) image, DOMString repetition); | |||
// shadows | |||
attribute double shadowOffsetX; // (default 0) | |||
attribute double shadowOffsetY; // (default 0) | |||
attribute double shadowBlur; // (default 0) | |||
attribute DOMString shadowColor; // (default transparent black) | |||
// rects | |||
void clearRect(double x, double y, double w, double h); | |||
void fillRect(double x, double y, double w, double h); | |||
void strokeRect(double x, double y, double w, double h); | |||
// path API (see also CanvasPathMethods) | |||
void beginPath(); | |||
void fill(); | |||
void fill(Path path); | |||
void stroke(); | |||
void stroke(Path path); | |||
void clip(); | |||
void clip(Path path); | |||
boolean isPointInPath(double x, double y); | |||
boolean isPointInPath(Path path, double x, double y); | |||
// text (see also the CanvasText interface) | |||
void fillText(DOMString text, double x, double y, optional double maxWidth); | |||
void strokeText(DOMString text, double x, double y, optional double maxWidth); | |||
// drawing images | |||
void drawImage((HTMLImageElement or HTMLCanvasElement or HTMLVideoElement) image, double dx, double dy); | |||
void drawImage((HTMLImageElement or HTMLCanvasElement or HTMLVideoElement) image, double dx, double dy, double dw, double dh); | |||
void drawImage((HTMLImageElement or HTMLCanvasElement or HTMLVideoElement) image, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh); | |||
}; | |||
PrintRenderingContext implements CanvasTransformation; | |||
PrintRenderingContext implements CanvasLineStyles; | |||
PrintRenderingContext implements CanvasPathMethods; | |||
PrintRenderingContext implements CanvasText; | |||
[NoInterfaceObject] | |||
interface CanvasTransformation { | |||
// transformations (default transform is the identity matrix) | |||
void scale(double x, double y); | |||
void rotate(double angle); | |||
void translate(double x, double y); | |||
void transform(double a, double b, double c, double d, double e, double f); | |||
void setTransform(double a, double b, double c, double d, double e, double f); | |||
}; | |||
[NoInterfaceObject] | |||
interface CanvasLineStyles { | |||
// line caps/joins | |||
attribute double lineWidth; // (default 1) | |||
attribute DOMString lineCap; // "butt", "round", "square" (default "butt") | |||
attribute DOMString lineJoin; // "round", "bevel", "miter" (default "miter") | |||
attribute double miterLimit; // (default 10) | |||
}; | |||
[NoInterfaceObject] | |||
interface CanvasText { | |||
// text | |||
attribute DOMString font; // (default 10px sans-serif) | |||
attribute DOMString textAlign; // "start", "end", "left", "right", "center" (default: "start") | |||
attribute DOMString textBaseline; // "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" (default: "alphabetic") | |||
TextMetrics measureText(DOMString text); | |||
}; | |||
[NoInterfaceObject] | |||
interface CanvasPathMethods { | |||
// shared path API methods | |||
void closePath(); | |||
void moveTo(double x, double y); | |||
void lineTo(double x, double y); | |||
void quadraticCurveTo(double cpx, double cpy, double x, double y); | |||
void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y); | |||
void arcTo(double x1, double y1, double x2, double y2, double radius); | |||
void rect(double x, double y, double w, double h); | |||
void arc(double x, double y, double radius, double startAngle, double endAngle, optional boolean anticlockwise); | |||
}; | |||
interface CanvasGradient { | |||
// opaque object | |||
void addColorStop(double offset, DOMString color); | |||
}; | |||
interface CanvasPattern { | |||
// opaque object | |||
}; | |||
interface TextMetrics { | |||
readonly attribute double width; | |||
}; | |||
[Constructor(optional Element scope)] | |||
interface Path { | |||
void addFill(Path path); | |||
void addStroke(Path path); | |||
void addFillText(DOMString text, double x, double y, optional double maxWidth); | |||
void addStrokeText(DOMString text, double x, double y, optional double maxWidth); | |||
void addFillText(DOMString text, Path path, optional double maxWidth); | |||
void addStrokeText(DOMString text, Path path, optional double maxWidth); | |||
}; | |||
Path implements CanvasTransformation; | |||
Path implements CanvasLineStyles; | |||
Path implements CanvasPathMethods; | |||
Path implements CanvasText; | |||
== Implementation == | == Implementation == | ||
Some basic investigation in the Gecko codebase. No code written so far. | Some basic investigation in the Gecko codebase. No code written so far. | ||
edits