968 void LayerAndroid::onDraw(SkCanvas* canvas, SkScalar opacity,
969 android::DrawExtra* extra, PaintStyle style)
970 {
971 if (m_haveClip) {
972 SkRect r;
973 r.set(0, 0, getSize().width(), getSize().height());
974 canvas->clipRect(r);
975 return;
976 }
977
978
979 if (!m_content && !m_imageCRC)
980 return;
981
982
983 SkAutoCanvasRestore restore(canvas, true);
984
985 int canvasOpacity = SkScalarRound(opacity * 255);
986 if (canvasOpacity < 255)
987 canvas->setDrawFilter(new OpacityDrawFilter(canvasOpacity));
988
989 if (m_imageCRC) {
990 ImageTexture* imageTexture = ImagesManager::instance()->retainImage(m_imageCRC);
991 m_dirtyRegion.setEmpty();
992 if (imageTexture) {
993 SkRect dest;
994 dest.set(0, 0, getSize().width(), getSize().height());
995 imageTexture->drawCanvas(canvas, dest);
996 }
997 ImagesManager::instance()->releaseImage(m_imageCRC);
998 }
999 contentDraw(canvas, style); <===============
1000 if (extra)
1001 extra->draw(canvas, this);
1002 }
913 void LayerAndroid::contentDraw(SkCanvas* canvas, PaintStyle style)
914 {
915 if (m_maskLayer && m_maskLayer->m_content) {
916 TODO
917
918
919 if (m_originalLayer)
920 m_originalLayer->m_content->draw(canvas);
921 else if (m_content)
922 m_content->draw(canvas);
923
924 SkPaint maskPaint;
925 maskPaint.setXfermodeMode(SkXfermode::kDstIn_Mode);
926 int count = canvas->saveLayer(0, &maskPaint, SkCanvas::kHasAlphaLayer_SaveFlag);
927 m_maskLayer->m_content->draw(canvas);
928 canvas->restoreToCount(count);
929
930 } else if (m_content)
931 m_content->draw(canvas);
932
933 if (TilesManager::instance()->getShowVisualIndicator()) {
934 float w = getSize().width();
935 float h = getSize().height();
936 SkPaint paint;
937
938 if (style == MergedLayers)
939 paint.setARGB(255, 255, 255, 0);
940 else if (style == UnmergedLayers)
941 paint.setARGB(255, 255, 0, 0);
942 else if (style == FlattenedLayers)
943 paint.setARGB(255, 255, 0, 255);
944
945 canvas->drawLine(0, 0, w, h, paint);
946 canvas->drawLine(0, h, w, 0, paint);
947
948 canvas->drawLine(0, 0, 0, h-1, paint);
949 canvas->drawLine(0, h-1, w-1, h-1, paint);
950 canvas->drawLine(w-1, h-1, w-1, 0, paint);
951 canvas->drawLine(w-1, 0, 0, 0, paint);
952
953 static SkTypeface* s_typeface = 0;
954 if (!s_typeface)
955 s_typeface = SkTypeface::CreateFromName("", SkTypeface::kBold);
956 paint.setARGB(255, 0, 0, 255);
957 paint.setTextSize(17);
958 char str[256];
959 snprintf(str, 256, "%d", uniqueId());
960 paint.setTypeface(s_typeface);
961 canvas->drawText(str, strlen(str), 2, h - 2, paint);
962 }
963
964 if (m_fixedPosition)
965 return m_fixedPosition->contentDraw(canvas, style);
966 }
323 void Font::drawComplexText(GraphicsContext* gc, TextRun const& run,
324 FloatPoint const& point, int, int) const
325 {
326 SkCanvas* canvas = gc->platformContext()->mCanvas;
327 SkPaint paint;
328
329 if (!setupForText(&paint, gc, primaryFont())) {
330 return;
331 }
332
333
334 paint.setTextEncoding(SkPaint::kUTF16_TextEncoding);
335
336 canvas->drawText(run.characters(), run.length() << 1,
337 SkFloatToScalar(point.x()), SkFloatToScalar(point.y()),
338 paint);
339 }
1703 void SkCanvas::drawText(const void* text, size_t byteLength,
1704 SkScalar x, SkScalar y, const SkPaint& paint) {
1705 LOOPER_BEGIN(paint, SkDrawFilter::kText_Type)
1706
1707 while (iter.next()) {
1708 SkDeviceFilteredPaint dfp(iter.fDevice, looper.paint());
1709 iter.fDevice->drawText(iter, text, byteLength, x, y, dfp.paint());
1710 DrawTextDecorations(iter, dfp.paint(),
1711 static_cast<const char*>(text), byteLength, x, y);
1712 }
1713
1714 LOOPER_END
1715 }