aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/internal_links.cpp
diff options
context:
space:
mode:
authorGravatar epoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-03-08 09:09:10 +0000
committerGravatar epoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-03-08 09:09:10 +0000
commitb58772f86659cfe0e8d9247fcee878dddd8fdad9 (patch)
tree78c54090d70af79ab206ef5137833c0703874203 /gm/internal_links.cpp
parent754a3eb73b796398062f09cc98eae224262a3bc8 (diff)
PDF: add support for named destinations.
Landing patchset 7 from https://codereview.appspot.com/7374052 for dml@google.com Review URL: https://codereview.chromium.org/12533009 git-svn-id: http://skia.googlecode.com/svn/trunk@8034 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/internal_links.cpp')
-rw-r--r--gm/internal_links.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/gm/internal_links.cpp b/gm/internal_links.cpp
new file mode 100644
index 0000000000..3fdbbd51fc
--- /dev/null
+++ b/gm/internal_links.cpp
@@ -0,0 +1,77 @@
+
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include "gm.h"
+
+#include "SkAnnotation.h"
+#include "SkData.h"
+
+namespace skiagm {
+
+/** Draws two rectangles. In output formats that support internal links (PDF),
+ * clicking the one labeled "Link to A" should take you to the one labeled
+ * "Target A". Note that you'll need to zoom your PDF viewer in a fair bit in
+ * order for the scrolling to not be blocked by the edge of the document.
+ */
+class InternalLinksGM : public GM {
+public:
+ InternalLinksGM() {
+ this->setBGColor(0xFFDDDDDD);
+ }
+
+protected:
+ virtual SkString onShortName() {
+ return SkString("internal_links");
+ }
+
+ virtual SkISize onISize() {
+ return make_isize(700, 500);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ SkAutoTUnref<SkData> name(SkData::NewWithCString("target-a"));
+
+ canvas->save();
+ canvas->translate(SkIntToScalar(100), SkIntToScalar(100));
+ drawLabeledRect(canvas, "Link to A", 0, 0);
+ SkRect rect = SkRect::MakeXYWH(0, 0, SkIntToScalar(50), SkIntToScalar(20));
+ SkAnnotateLinkToDestination(canvas, rect, name.get());
+ canvas->restore();
+
+ canvas->save();
+ canvas->translate(SkIntToScalar(200), SkIntToScalar(200));
+ SkPoint point = SkPoint::Make(SkIntToScalar(100), SkIntToScalar(50));
+ drawLabeledRect(canvas, "Target A", point.x(), point.y());
+ SkAnnotateNamedDestination(canvas, point, name.get());
+ canvas->restore();
+ }
+
+private:
+ /** Draw an arbitrary rectangle at a given location and label it with some
+ * text. */
+ void drawLabeledRect(SkCanvas* canvas, const char* text, SkScalar x, SkScalar y) {
+ SkPaint paint;
+ paint.setColor(SK_ColorBLUE);
+ SkRect rect = SkRect::MakeXYWH(x, y,
+ SkIntToScalar(50), SkIntToScalar(20));
+ canvas->drawRect(rect, paint);
+
+ paint.setAntiAlias(true);
+ paint.setTextSize(SkIntToScalar(25));
+ paint.setColor(SK_ColorBLACK);
+ canvas->drawText(text, strlen(text), x, y, paint);
+ }
+
+ typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return SkNEW(InternalLinksGM); }
+static GMRegistry reg(MyFactory);
+
+}