| Index: gm/deviceproperties.cpp
|
| ===================================================================
|
| --- gm/deviceproperties.cpp (revision 0)
|
| +++ gm/deviceproperties.cpp (working copy)
|
| @@ -0,0 +1,113 @@
|
| +/*
|
| + * 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 "SkTypeface.h"
|
| +
|
| +namespace skiagm {
|
| +
|
| +class DevicePropertiesGM : public GM {
|
| +public:
|
| + DevicePropertiesGM() {
|
| + this->setBGColor(0xFFFFFFFF);
|
| + }
|
| +
|
| + virtual ~DevicePropertiesGM() {
|
| + }
|
| +
|
| +protected:
|
| + virtual SkString onShortName() {
|
| + return SkString("deviceproperties");
|
| + }
|
| +
|
| + virtual SkISize onISize() {
|
| + return make_isize(1450, 750);
|
| + }
|
| +
|
| + static void rotate_about(SkCanvas* canvas,
|
| + SkScalar degrees,
|
| + SkScalar px, SkScalar py) {
|
| + canvas->translate(px, py);
|
| + canvas->rotate(degrees);
|
| + canvas->translate(-px, -py);
|
| + }
|
| +
|
| + virtual void onDraw(SkCanvas* originalCanvas) {
|
| + SkISize size = this->getISize();
|
| + SkBitmap bitmap;
|
| + bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
|
| + bitmap.allocPixels();
|
| + SkDeviceProperties properties = SkDeviceProperties::Make(
|
| + SkDeviceProperties::Geometry::Make(SkDeviceProperties::Geometry::kVertical_Orientation,
|
| + SkDeviceProperties::Geometry::kBGR_Layout),
|
| + SK_Scalar1);
|
| + SkDevice device(bitmap, properties);
|
| + SkCanvas canvas(&device);
|
| + canvas.drawColor(SK_ColorWHITE);
|
| +
|
| + SkPaint paint;
|
| +
|
| + paint.setAntiAlias(true);
|
| + paint.setLCDRenderText(true);
|
| + //With freetype the default (normal hinting) can be really ugly.
|
| + //Most distros now set slight (vertical hinting only) in any event.
|
| + paint.setHinting(SkPaint::kSlight_Hinting);
|
| + SkSafeUnref(paint.setTypeface(SkTypeface::CreateFromName("Times Roman", SkTypeface::kNormal)));
|
| +
|
| + const char* text = "Hamburgefons ooo mmm";
|
| + const size_t textLen = strlen(text);
|
| +
|
| + for (int j = 0; j < 2; ++j) {
|
| + for (int i = 0; i < 6; ++i) {
|
| + SkScalar x = SkIntToScalar(10);
|
| + SkScalar y = SkIntToScalar(20);
|
| +
|
| + SkAutoCanvasRestore acr(&canvas, true);
|
| + canvas.translate(SkIntToScalar(50 + i * 230),
|
| + SkIntToScalar(20));
|
| + rotate_about(&canvas, SkIntToScalar(i * 5), x, y * 10);
|
| +
|
| + {
|
| + SkPaint p;
|
| + p.setAntiAlias(true);
|
| + SkRect r;
|
| + r.set(x - SkIntToScalar(3), SkIntToScalar(15),
|
| + x - SkIntToScalar(1), SkIntToScalar(280));
|
| + canvas.drawRect(r, p);
|
| + }
|
| +
|
| + int index = 0;
|
| + for (int ps = 6; ps <= 22; ps++) {
|
| + paint.setTextSize(SkIntToScalar(ps));
|
| + canvas.drawText(text, textLen, x, y, paint);
|
| + y += paint.getFontMetrics(NULL);
|
| + index += 1;
|
| + }
|
| + }
|
| + canvas.translate(0, SkIntToScalar(360));
|
| + paint.setSubpixelText(true);
|
| + }
|
| + originalCanvas->drawBitmap(bitmap, 0, 0);
|
| + }
|
| +
|
| +#ifdef SK_BUILD_FOR_ANDROID
|
| + virtual uint32_t onGetFlags() const SK_OVERRIDE {
|
| + // On android, we fail due to bad gpu drivers (it seems) by adding too
|
| + // much to our text atlas (texture).
|
| + return kSkipGPU_Flag;
|
| + }
|
| +#endif
|
| +
|
| +private:
|
| + typedef GM INHERITED;
|
| +};
|
| +
|
| +//////////////////////////////////////////////////////////////////////////////
|
| +
|
| +static GM* MyFactory(void*) { return new DevicePropertiesGM; }
|
| +static GMRegistry reg(MyFactory);
|
| +
|
| +}
|
|
|