のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

skcanvas->drawText

    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     // only continue drawing if layer is drawable
    979     if (!m_content && !m_imageCRC)
    980         return;
    981 
    982     // we just have this save/restore for opacity...
    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: we should use a shader instead of doing
    917         // the masking in software
    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     // go to chars, instead of glyphs, which was set by setupForText()
    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 }