1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SampleCode.h" 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkView.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMaskFilter.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorShader.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGradientShader.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGraphics.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h" 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRegion.h" 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkShader.h" 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkUtils.h" 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorPriv.h" 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorFilter.h" 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTime.h" 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypeface.h" 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTextBox.h" 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkOSFile.h" 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkStream.h" 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern void skia_set_text_gamma(float blackGamma, float whiteGamma); 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if defined(SK_BUILD_FOR_WIN) && defined(SK_FONTHOST_WIN_GDI) 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONT&); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic const char gText[] = 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "When in the Course of human events it becomes necessary for one people " 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "to dissolve the political bands which have connected them with another " 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "and to assume among the powers of the earth, the separate and equal " 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "station to which the Laws of Nature and of Nature's God entitle them, " 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "a decent respect to the opinions of mankind requires that they should " 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "declare the causes which impel them to the separation."; 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass TextBoxView : public SampleView { 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot TextBoxView() { 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if defined(SK_BUILD_FOR_WIN) && defined(SK_FONTHOST_WIN_GDI) 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot LOGFONT lf; 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_bzero(&lf, sizeof(lf)); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot lf.lfHeight = 9; 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTypeface* tf0 = SkCreateTypefaceFromLOGFONT(lf); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot lf.lfHeight = 12; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTypeface* tf1 = SkCreateTypefaceFromLOGFONT(lf); 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // we assert that different sizes should not affect which face we get 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkASSERT(tf0 == tf1); 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tf0->unref(); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tf1->unref(); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // overrides from SkEventSink 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual bool onQuery(SkEvent* evt) { 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (SampleCode::TitleQ(*evt)) { 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SampleCode::TitleR(evt, "TextBox"); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return this->INHERITED::onQuery(evt); 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void drawTest(SkCanvas* canvas, SkScalar w, SkScalar h, SkColor fg, SkColor bg) { 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoCanvasRestore acr(canvas, true); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(SkRect::MakeWH(w, h)); 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(bg); 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar margin = 20; 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTextBox tbox; 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tbox.setMode(SkTextBox::kLineBreak_Mode); 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tbox.setBox(margin, margin, 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot w - margin, h - margin); 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tbox.setSpacing(SkIntToScalar(3)/3, 0); 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(true); 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setLCDRenderText(true); 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(fg); 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tbox.setText(gText, strlen(gText), paint); 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 9; i < 24; i += 2) { 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setTextSize(SkIntToScalar(i)); 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tbox.draw(canvas); 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, tbox.getTextHeight() + paint.getFontSpacing()); 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual void onDrawContent(SkCanvas* canvas) { 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar width = this->width() / 3; 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot drawTest(canvas, width, this->height(), SK_ColorBLACK, SK_ColorWHITE); 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(width, 0); 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot drawTest(canvas, width, this->height(), SK_ColorWHITE, SK_ColorBLACK); 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(width, 0); 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot drawTest(canvas, width, this->height()/2, SK_ColorGRAY, SK_ColorWHITE); 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, this->height()/2); 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot drawTest(canvas, width, this->height()/2, SK_ColorGRAY, SK_ColorBLACK); 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef SampleView INHERITED; 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkView* MyFactory() { return new TextBoxView; } 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkViewRegister reg(MyFactory); 112