diff options
author | Hal Canary <halcanary@google.com> | 2017-04-19 16:21:51 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-21 14:57:41 +0000 |
commit | 5e958e9291f53b81045f776a2af3a871381dd5fb (patch) | |
tree | 09f77510901c4d3e3a03f2f8fbb691c53ef1d15b /site | |
parent | 56e42714d351f8ecb662136076166904b9934b71 (diff) |
Documentation: site/user/api/canvas updated
BUG=skia:6523
NOTRY=true
Change-Id: I1fed8c65ba55c00f5045e56a23cbcf72d676e8d5
Reviewed-on: https://skia-review.googlesource.com/13873
Reviewed-by: Cary Clark <caryclark@google.com>
Reviewed-by: Heather Miller <hcm@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'site')
-rw-r--r-- | site/user/api/canvas.md | 71 |
1 files changed, 38 insertions, 33 deletions
diff --git a/site/user/api/canvas.md b/site/user/api/canvas.md index 3c92905152..d9e15592dc 100644 --- a/site/user/api/canvas.md +++ b/site/user/api/canvas.md @@ -35,13 +35,13 @@ the memory into which the canvas commands are drawn. #include "SkStream.h" #include "SkSurface.h" void raster(int width, int height, - void(*draw)(SkCanvas*), + void (*draw)(SkCanvas*), const char* path) { - sk_sp<SkSurface> rasterSurface( - SkSurface::MakeRasterN32Premul(width, height)); + sk_sp<SkSurface> rasterSurface = + SkSurface::MakeRasterN32Premul(width, height); SkCanvas* rasterCanvas = rasterSurface->getCanvas(); draw(rasterCanvas); - sk_sp<SkImage> img(s->newImageSnapshot()); + sk_sp<SkImage> img(rasterSurface->makeImageSnapshot()); if (!img) { return; } sk_sp<SkData> png(img->encode()); if (!png) { return; } @@ -54,18 +54,20 @@ explicitly, instead of asking Skia to manage it. <!--?prettify lang=cc?--> + #include <vector> + #include "SkSurface.h" std::vector<char> raster_direct(int width, int height, - void(*draw)(SkCanvas*)) { - SkImageInfo info = SkImageInfo::MakeN32(width, height); + void (*draw)(SkCanvas*)) { + SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); size_t rowBytes = info.minRowBytes(); size_t size = info.getSafeSize(rowBytes); std::vector<char> pixelMemory(size); // allocate memory - sk_sp<SkSurface> surface( + sk_sp<SkSurface> surface = SkSurface::MakeRasterDirect( - info, &pixelMemory[0], rowBytes)); - SkCanvas* canvas = surface.getCanvas(); + info, &pixelMemory[0], rowBytes); + SkCanvas* canvas = surface->getCanvas(); draw(canvas); - return std::move(pixelMemory); + return pixelMemory; } <span id="gpu"></span> @@ -81,6 +83,7 @@ device for you. In OpenGL mode it also assumes that the correct OpenGL context has been made current to the current thread when Skia calls are made. <!--?prettify lang=cc?--> + #include "GrContext.h" #include "gl/GrGLInterface.h" #include "SkData.h" @@ -88,7 +91,7 @@ has been made current to the current thread when Skia calls are made. #include "SkStream.h" #include "SkSurface.h" - void gl_example(int width, int height, void(*draw)(SkCanvas*), const char* path) { + void gl_example(int width, int height, void (*draw)(SkCanvas*), const char* path) { // You've already created your OpenGL context and bound it. const GrGLInterface* interface = nullptr; // Leaving interface as null makes Skia extract pointers to OpenGL functions for the current @@ -125,10 +128,10 @@ a document must include multiple pages. #include "SkDocument.h" #include "SkStream.h" void skpdf(int width, int height, - void(*draw)(SkCanvas*), + void (*draw)(SkCanvas*), const char* path) { SkFILEWStream pdfStream(path); - sk_sp<SkDocument> pdfDoc(SkDocument::MakePDF(&pdfStream)); + sk_sp<SkDocument> pdfDoc = SkDocument::MakePDF(&pdfStream); SkCanvas* pdfCanvas = pdfDoc->beginPage(SkIntToScalar(width), SkIntToScalar(height)); draw(pdfCanvas); @@ -143,17 +146,17 @@ The SkPicture backend uses SkPictureRecorder instead of SkSurface. <!--?prettify lang=cc?--> - #include "SkPictureRecorder" - #include "SkPicture" + #include "SkPictureRecorder.h" + #include "SkPicture.h" #include "SkStream.h" void picture(int width, int height, - void(*draw)(SkCanvas*), + void (*draw)(SkCanvas*), const char* path) { SkPictureRecorder recorder; SkCanvas* recordingCanvas = recorder.beginRecording(SkIntToScalar(width), SkIntToScalar(height)); draw(recordingCanvas); - sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture()); + sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); SkFILEWStream skpStream(path); // Open SKP files with `SampleApp --picture SKP_FILE` picture->serialize(&skpStream); @@ -169,9 +172,9 @@ nothing. <!--?prettify lang=cc?--> #include "SkNullCanvas.h" - void picture(int, int, void(*draw)(SkCanvas*), const char*) { - sk_sp<SkCanvas> nullCanvas(SkCreateNullCanvas()); - draw(nullCanvas); // NoOp + void null_canvas_example(int, int, void (*draw)(SkCanvas*), const char*) { + std::unique_ptr<SkCanvas> nullCanvas = SkMakeNullCanvas(); + draw(nullCanvas.get()); // NoOp } <span id="skxps"></span> @@ -184,16 +187,19 @@ The (*still experimental*) SkXPS canvas writes into an XPS document. #include "SkDocument.h" #include "SkStream.h" - void skxps(int width, int height, - void(*draw)(SkCanvas*), + #ifdef SK_BUILD_FOR_WIN + void skxps(IXpsOMObjectFactory* factory; + int width, int height, + void (*draw)(SkCanvas*), const char* path) { SkFILEWStream xpsStream(path); - sk_sp<SkDocument> xpsDoc(SkDocument::MakeXPS(&pdfStream)); + sk_sp<SkDocument> xpsDoc = SkDocument::MakeXPS(&pdfStream, factory); SkCanvas* xpsCanvas = xpsDoc->beginPage(SkIntToScalar(width), SkIntToScalar(height)); draw(xpsCanvas); xpsDoc->close(); } + #endif <span id="sksvg"></span> SkSVG @@ -207,16 +213,15 @@ The (*still experimental*) SkSVG canvas writes into an SVG document. #include "SkSVGCanvas.h" #include "SkXMLWriter.h" void sksvg(int width, int height, - void(*draw)(SkCanvas*), + void (*draw)(SkCanvas*), const char* path) { SkFILEWStream svgStream(path); std::unique_ptr<SkXMLWriter> xmlWriter( new SkXMLStreamWriter(&svgStream)); - sk_sp<SkCanvas> svgCanvas(SkSVGCanvas::Create( - SkRect::MakeWH(SkIntToScalar(src.size().width()), - SkIntToScalar(src.size().height())), - xmlWriter)); - draw(svgCanvas); + SkRect bounds = SkRect::MakeIWH(width, height); + std::unique_ptr<SkCanvas> svgCanvas = + SkSVGCanvas::Make(bounds, xmlWriter.get()); + draw(svgCanvas.get()); } <span id="example"></span> @@ -252,8 +257,8 @@ here](/dev/testing/tests) and wrap these funtions together: canvas->drawPath(path, p); } DEF_TEST(FourBackends, r) { - raster( 256, 256, example, "out_raster.png" ); - ganesh( 256, 256, example, "out_ganesh.png" ); - skpdf( 256, 256, example, "out_skpdf.pdf" ); - picture(256, 256, example, "out_picture.skp"); + raster( 256, 256, example, "out_raster.png" ); + gl_example( 256, 256, example, "out_gpu.png" ); + skpdf( 256, 256, example, "out_skpdf.pdf" ); + picture( 256, 256, example, "out_picture.skp"); } |