aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--samplecode/SampleAnimator.cpp105
-rw-r--r--samplecode/SampleSVG.cpp82
-rw-r--r--samplecode/SampleTextBox.cpp101
-rw-r--r--samplecode/SampleTextEffects.cpp12
4 files changed, 248 insertions, 52 deletions
diff --git a/samplecode/SampleAnimator.cpp b/samplecode/SampleAnimator.cpp
index 4ba88729a8..99173fc8ab 100644
--- a/samplecode/SampleAnimator.cpp
+++ b/samplecode/SampleAnimator.cpp
@@ -4,48 +4,7 @@
#include "SkAnimator.h"
#include "SkStream.h"
-
-#include "SkColorPriv.h"
-static inline void Filter_32_opaque_portable(unsigned x, unsigned y,
- SkPMColor a00, SkPMColor a01,
- SkPMColor a10, SkPMColor a11,
- SkPMColor* dstColor) {
- SkASSERT((unsigned)x <= 0xF);
- SkASSERT((unsigned)y <= 0xF);
-
- int xy = x * y;
- uint32_t mask = gMask_00FF00FF; //0xFF00FF;
-
- int scale = 256 - 16*y - 16*x + xy;
- uint32_t lo = (a00 & mask) * scale;
- uint32_t hi = ((a00 >> 8) & mask) * scale;
-
- scale = 16*x - xy;
- lo += (a01 & mask) * scale;
- hi += ((a01 >> 8) & mask) * scale;
-
- scale = 16*y - xy;
- lo += (a10 & mask) * scale;
- hi += ((a10 >> 8) & mask) * scale;
-
- lo += (a11 & mask) * xy;
- hi += ((a11 >> 8) & mask) * xy;
-
- *dstColor = ((lo >> 8) & mask) | (hi & ~mask);
-}
-
-static void test_filter() {
- for (int r = 0; r <= 0xFF; r++) {
- SkPMColor c = SkPackARGB32(0xFF, r, r, r);
- for (int y = 0; y <= 0xF; y++) {
- for (int x = 0; x <= 0xF; x++) {
- SkPMColor dst;
- Filter_32_opaque_portable(x, y, c, c, c, c, &dst);
- SkASSERT(SkGetPackedA32(dst) == 255);
- }
- }
- }
-}
+#include "SkDOM.h"
///////////////////////////////////////////////////////////////////////////////
@@ -73,9 +32,7 @@ private:
typedef SkView INHERITED;
};
-SkAnimatorView::SkAnimatorView() : fAnimator(NULL) {
- test_filter();
-}
+SkAnimatorView::SkAnimatorView() : fAnimator(NULL) {}
SkAnimatorView::~SkAnimatorView() {
delete fAnimator;
@@ -97,15 +54,65 @@ bool SkAnimatorView::decodeMemory(const void* buffer, size_t size) {
return this->decodeStream(is);
}
+static const SkDOMNode* find_nodeID(const SkDOM& dom,
+ const SkDOMNode* node, const char name[]) {
+ if (NULL == node) {
+ node = dom.getRootNode();
+ }
+ do {
+ const char* idval = dom.findAttr(node, "id");
+ if (idval && !strcmp(idval, name)) {
+ return node;
+ }
+ const SkDOMNode* child = dom.getFirstChild(node);
+ if (child) {
+ const SkDOMNode* found = find_nodeID(dom, child, name);
+ if (found) {
+ return found;
+ }
+ }
+ } while ((node = dom.getNextSibling(node)) != NULL);
+ return NULL;
+}
+
bool SkAnimatorView::decodeStream(SkStream* stream) {
delete fAnimator;
fAnimator = new SkAnimator;
fAnimator->setURIBase(fBaseURI.c_str());
+#if 0
if (!fAnimator->decodeStream(stream)) {
delete fAnimator;
fAnimator = NULL;
return false;
}
+#else
+ size_t len = stream->getLength();
+ char* text = (char*)sk_malloc_throw(len);
+ stream->read(text, len);
+ SkDOM dom;
+ const SkDOM::Node* root = dom.build(text, len);
+ if (NULL == root) {
+ return false;
+ }
+ if (!fAnimator->decodeDOM(dom, root)) {
+ delete fAnimator;
+ fAnimator = NULL;
+ return false;
+ }
+ for (int i = 0; i <= 10; i++) {
+ SkString name("glyph");
+ name.appendS32(i);
+ const SkDOM::Node* node = find_nodeID(dom, NULL, name.c_str());
+ SkASSERT(node);
+ SkRect r;
+ dom.findScalar(node, "left", &r.fLeft);
+ dom.findScalar(node, "top", &r.fTop);
+ dom.findScalar(node, "width", &r.fRight); r.fRight += r.fLeft;
+ dom.findScalar(node, "height", &r.fBottom); r.fBottom += r.fTop;
+ SkDebugf("--- %s [%g %g %g %g]\n", name.c_str(),
+ r.fLeft, r.fTop, r.fRight, r.fBottom);
+ }
+#endif
return true;
}
@@ -115,7 +122,7 @@ void SkAnimatorView::onDraw(SkCanvas* canvas) {
if (fAnimator) {
canvas->drawColor(SK_ColorWHITE);
fAnimator->draw(canvas, 0);
-
+#if 0
canvas->save();
canvas->translate(120, 30);
canvas->scale(0.5, 0.5);
@@ -129,6 +136,7 @@ void SkAnimatorView::onDraw(SkCanvas* canvas) {
canvas->restore();
this->inval(NULL);
+#endif
}
}
@@ -137,8 +145,13 @@ void SkAnimatorView::onDraw(SkCanvas* canvas) {
static SkView* MyFactory() {
SkAnimatorView* av = new SkAnimatorView;
// av->decodeFile("/skimages/test.xml");
+#if 0
av->setURIBase("/skia/trunk/animations/");
av->decodeFile("/skia/trunk/animations/checkbox.xml");
+#else
+ av->setURIBase("/");
+ av->decodeFile("/testanim.txt");
+#endif
return av;
}
diff --git a/samplecode/SampleSVG.cpp b/samplecode/SampleSVG.cpp
new file mode 100644
index 0000000000..fdb1d541b5
--- /dev/null
+++ b/samplecode/SampleSVG.cpp
@@ -0,0 +1,82 @@
+#include "SampleCode.h"
+#include "SkView.h"
+#include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
+#include "SkGradientShader.h"
+#include "SkGraphics.h"
+#include "SkImageDecoder.h"
+#include "SkPath.h"
+#include "SkRandom.h"
+#include "SkRegion.h"
+#include "SkShader.h"
+#include "SkUtils.h"
+#include "SkXfermode.h"
+#include "SkColorPriv.h"
+#include "SkColorFilter.h"
+#include "SkTime.h"
+#include "SkTypeface.h"
+#include "SkTextBox.h"
+#include "SkOSFile.h"
+#include "SkStream.h"
+
+#include "SkSVGParser.h"
+
+class SVGView : public SkView {
+public:
+ SVGView() {
+ SkXMLParserError err;
+ SkFILEStream stream("/testsvg2.svg");
+ SkSVGParser parser(&err);
+ if (parser.parse(stream)) {
+ const char* text = parser.getFinal();
+ SkFILEWStream output("/testanim.txt");
+ output.write(text, strlen(text));
+ }
+ }
+
+protected:
+ // overrides from SkEventSink
+ virtual bool onQuery(SkEvent* evt) {
+ if (SampleCode::TitleQ(*evt)) {
+ SkString str("SVG");
+ SampleCode::TitleR(evt, str.c_str());
+ return true;
+ }
+ return this->INHERITED::onQuery(evt);
+ }
+
+ void drawBG(SkCanvas* canvas) {
+ canvas->drawColor(SK_ColorWHITE);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ this->drawBG(canvas);
+ }
+
+ virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
+ return new Click(this);
+ }
+
+ virtual bool onClick(Click* click) {
+ int y = click->fICurr.fY;
+ if (y < 0) {
+ y = 0;
+ } else if (y > 255) {
+ y = 255;
+ }
+ fByte = y;
+ this->inval(NULL);
+ return true;
+ }
+
+private:
+ int fByte;
+
+ typedef SkView INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static SkView* MyFactory() { return new SVGView; }
+static SkViewRegister reg(MyFactory);
+
diff --git a/samplecode/SampleTextBox.cpp b/samplecode/SampleTextBox.cpp
new file mode 100644
index 0000000000..f8f52a2f71
--- /dev/null
+++ b/samplecode/SampleTextBox.cpp
@@ -0,0 +1,101 @@
+#include "SampleCode.h"
+#include "SkView.h"
+#include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
+#include "SkGradientShader.h"
+#include "SkGraphics.h"
+#include "SkImageDecoder.h"
+#include "SkPath.h"
+#include "SkRandom.h"
+#include "SkRegion.h"
+#include "SkShader.h"
+#include "SkUtils.h"
+#include "SkXfermode.h"
+#include "SkColorPriv.h"
+#include "SkColorFilter.h"
+#include "SkTime.h"
+#include "SkTypeface.h"
+#include "SkTextBox.h"
+#include "SkOSFile.h"
+#include "SkStream.h"
+#include "SkKey.h"
+
+static const char gText[] =
+ "When in the Course of human events it becomes necessary for one people "
+ "to dissolve the political bands which have connected them with another "
+ "and to assume among the powers of the earth, the separate and equal "
+ "station to which the Laws of Nature and of Nature's God entitle them, "
+ "a decent respect to the opinions of mankind requires that they should "
+ "declare the causes which impel them to the separation.";
+
+class TextBoxView : public SkView {
+public:
+ TextBoxView() {
+ fTextSize = SkIntToScalar(32);
+ }
+
+protected:
+ // overrides from SkEventSink
+ virtual bool onQuery(SkEvent* evt) {
+ if (SampleCode::TitleQ(*evt)) {
+ SkString str("TextBox");
+ SampleCode::TitleR(evt, str.c_str());
+ return true;
+ }
+ return this->INHERITED::onQuery(evt);
+ }
+
+ void drawBG(SkCanvas* canvas) {
+ canvas->drawColor(SK_ColorWHITE);
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+ this->drawBG(canvas);
+
+ SkScalar margin = 20;
+ SkTextBox tbox;
+ tbox.setMode(SkTextBox::kLineBreak_Mode);
+ tbox.setBox(margin, margin,
+ this->width() - margin, this->height() - margin);
+ tbox.setSpacing(SkIntToScalar(3)/3, 0);
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setTextSize(fTextSize);
+
+ tbox.draw(canvas, gText, strlen(gText), paint);
+ }
+
+ virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
+ return new Click(this);
+ }
+
+ virtual bool onClick(Click* click) {
+ const SkScalar delta = SkIntToScalar(3);
+ if (click->fState == Click::kUp_State) {
+ if (click->fCurr.fY < this->height()/2) {
+ fTextSize += delta;
+ this->inval(NULL);
+ return true;
+ } else {
+ if (fTextSize > delta) {
+ fTextSize -= delta;
+ this->inval(NULL);
+ return true;
+ }
+ }
+ }
+ return this->INHERITED::onClick(click);
+ }
+
+private:
+ SkScalar fTextSize;
+
+ typedef SkView INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static SkView* MyFactory() { return new TextBoxView; }
+static SkViewRegister reg(MyFactory);
+
diff --git a/samplecode/SampleTextEffects.cpp b/samplecode/SampleTextEffects.cpp
index 0dbde5eb74..b71f5b4c03 100644
--- a/samplecode/SampleTextEffects.cpp
+++ b/samplecode/SampleTextEffects.cpp
@@ -376,17 +376,17 @@ protected:
canvas->save();
// canvas->scale(SK_Scalar1*2, SK_Scalar1*2, 0, 0);
- SkScalar x = SkIntToScalar(20);
- SkScalar y = SkIntToScalar(40);
SkPaint paint;
paint.setAntiAlias(true);
- paint.setTextSize(SkIntToScalar(48));
+ paint.setTextSize(SkIntToScalar(56));
paint.setTypeface(SkTypeface::CreateFromName("sans-serif",
SkTypeface::kBold));
- SkString str("GOOGLE ");
- str.appendUnichar(0x5700);
+ SkScalar x = SkIntToScalar(20);
+ SkScalar y = paint.getTextSize();
+
+ SkString str("TextEffects");
paint.setTypeface(fFace);
@@ -429,7 +429,7 @@ protected:
canvas->drawRectCoords(0, 0, SkIntToScalar(120), SkIntToScalar(150), paint);
}
- if (1)
+ if (0)
{
SkAvoidXfermode mode(SK_ColorWHITE, 0xFF,
SkAvoidXfermode::kTargetColor_Mode);