WebAPI/WebPrintAPI: Difference between revisions

Jump to navigation Jump to search
Line 126: Line 126:
== Proposed API ==
== Proposed API ==


See the example to get an idea. More details coming soon!
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.
49

edits

Navigation menu