⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 platformcontextskia.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void PlatformContextSkia::drawRect(SkRect rect){    SkPaint paint;    int fillcolorNotTransparent = m_state->m_fillColor & 0xFF000000;    if (fillcolorNotTransparent) {        setupPaintForFilling(&paint);        canvas()->drawRect(rect, paint);    }    if (m_state->m_strokeStyle != WebCore::NoStroke &&        (m_state->m_strokeColor & 0xFF000000)) {        if (fillcolorNotTransparent) {            // This call is expensive so don't call it unnecessarily.            paint.reset();        }        setupPaintForStroking(&paint, &rect, 0);        canvas()->drawRect(rect, paint);    }}void PlatformContextSkia::setupPaintCommon(SkPaint* paint) const{#ifdef SK_DEBUGx    {        SkPaint defaultPaint;        SkASSERT(*paint == defaultPaint);    }#endif    paint->setAntiAlias(m_state->m_useAntialiasing);    paint->setPorterDuffXfermode(m_state->m_porterDuffMode);    paint->setLooper(m_state->m_looper);    if (m_state->m_gradient)        paint->setShader(m_state->m_gradient);    else if (m_state->m_pattern)        paint->setShader(m_state->m_pattern);}void PlatformContextSkia::setupPaintForFilling(SkPaint* paint) const{    setupPaintCommon(paint);    paint->setColor(m_state->applyAlpha(m_state->m_fillColor));}float PlatformContextSkia::setupPaintForStroking(SkPaint* paint, SkRect* rect, int length) const{    setupPaintCommon(paint);    float width = m_state->m_strokeThickness;    // This allows dashing and dotting to work properly for hairline strokes.    if (width == 0)        width = 1;    paint->setColor(m_state->applyAlpha(m_state->m_strokeColor));    paint->setStyle(SkPaint::kStroke_Style);    paint->setStrokeWidth(SkFloatToScalar(width));    paint->setStrokeCap(m_state->m_lineCap);    paint->setStrokeJoin(m_state->m_lineJoin);    paint->setStrokeMiter(SkFloatToScalar(m_state->m_miterLimit));    if (rect != 0 && (static_cast<int>(roundf(width)) & 1))        rect->inset(-SK_ScalarHalf, -SK_ScalarHalf);    if (m_state->m_dash)        paint->setPathEffect(m_state->m_dash);    else {        switch (m_state->m_strokeStyle) {        case WebCore::NoStroke:        case WebCore::SolidStroke:            break;        case WebCore::DashedStroke:            width = m_state->m_dashRatio * width;            // Fall through.        case WebCore::DottedStroke:            SkScalar dashLength;            if (length) {                // Determine about how many dashes or dots we should have.                int numDashes = length / roundf(width);                if (!(numDashes & 1))                    numDashes++;    // Make it odd so we end on a dash/dot.                // Use the number of dashes to determine the length of a                // dash/dot, which will be approximately width                dashLength = SkScalarDiv(SkIntToScalar(length), SkIntToScalar(numDashes));            } else                dashLength = SkFloatToScalar(width);            SkScalar intervals[2] = { dashLength, dashLength };            paint->setPathEffect(new SkDashPathEffect(intervals, 2, 0))->unref();        }    }    return width;}void PlatformContextSkia::setDrawLooper(SkDrawLooper* dl){    SkRefCnt_SafeAssign(m_state->m_looper, dl);}void PlatformContextSkia::setMiterLimit(float ml){    m_state->m_miterLimit = ml;}void PlatformContextSkia::setAlpha(float alpha){    m_state->m_alpha = alpha;}void PlatformContextSkia::setLineCap(SkPaint::Cap lc){    m_state->m_lineCap = lc;}void PlatformContextSkia::setLineJoin(SkPaint::Join lj){    m_state->m_lineJoin = lj;}void PlatformContextSkia::setPorterDuffMode(SkPorterDuff::Mode pdm){    m_state->m_porterDuffMode = pdm;}void PlatformContextSkia::setFillColor(SkColor color){    m_state->m_fillColor = color;}SkDrawLooper* PlatformContextSkia::getDrawLooper() const{    return m_state->m_looper;}WebCore::StrokeStyle PlatformContextSkia::getStrokeStyle() const{    return m_state->m_strokeStyle;}void PlatformContextSkia::setStrokeStyle(WebCore::StrokeStyle strokeStyle){    m_state->m_strokeStyle = strokeStyle;}void PlatformContextSkia::setStrokeColor(SkColor strokeColor){    m_state->m_strokeColor = strokeColor;}float PlatformContextSkia::getStrokeThickness() const{    return m_state->m_strokeThickness;}void PlatformContextSkia::setStrokeThickness(float thickness){    m_state->m_strokeThickness = thickness;}int PlatformContextSkia::getTextDrawingMode() const{    return m_state->m_textDrawingMode;}void PlatformContextSkia::setTextDrawingMode(int mode){  // cTextClip is never used, so we assert that it isn't set:  // https://bugs.webkit.org/show_bug.cgi?id=21898  ASSERT((mode & WebCore::cTextClip) == 0);  m_state->m_textDrawingMode = mode;}void PlatformContextSkia::setUseAntialiasing(bool enable){    m_state->m_useAntialiasing = enable;}SkColor PlatformContextSkia::effectiveFillColor() const{    return m_state->applyAlpha(m_state->m_fillColor);}SkColor PlatformContextSkia::effectiveStrokeColor() const{    return m_state->applyAlpha(m_state->m_strokeColor);}void PlatformContextSkia::beginPath(){    m_path.reset();}void PlatformContextSkia::addPath(const SkPath& path){    m_path.addPath(path, m_canvas->getTotalMatrix());}SkPath PlatformContextSkia::currentPathInLocalCoordinates() const{    SkPath localPath = m_path;    const SkMatrix& matrix = m_canvas->getTotalMatrix();    SkMatrix inverseMatrix;    matrix.invert(&inverseMatrix);    localPath.transform(inverseMatrix);    return localPath;}void PlatformContextSkia::setFillRule(SkPath::FillType fr){    m_path.setFillType(fr);}void PlatformContextSkia::setGradient(SkShader* gradient){    if (gradient != m_state->m_gradient) {        m_state->m_gradient->safeUnref();        m_state->m_gradient = gradient;    }}void PlatformContextSkia::setPattern(SkShader* pattern){    if (pattern != m_state->m_pattern) {        m_state->m_pattern->safeUnref();        m_state->m_pattern = pattern;    }}void PlatformContextSkia::setDashPathEffect(SkDashPathEffect* dash){    if (dash != m_state->m_dash) {        m_state->m_dash->safeUnref();        m_state->m_dash = dash;    }}void PlatformContextSkia::paintSkPaint(const SkRect& rect,                                       const SkPaint& paint){    m_canvas->drawRect(rect, paint);}const SkBitmap* PlatformContextSkia::bitmap() const{    return &m_canvas->getDevice()->accessBitmap(false);}bool PlatformContextSkia::isPrinting(){    return m_canvas->getTopPlatformDevice().IsVectorial();}#if defined(__linux__) || PLATFORM(WIN_OS)void PlatformContextSkia::applyClipFromImage(const WebCore::FloatRect& rect, const SkBitmap& imageBuffer){    // NOTE: this assumes the image mask contains opaque black for the portions that are to be shown, as such we    // only look at the alpha when compositing. I'm not 100% sure this is what WebKit expects for image clipping.    SkPaint paint;    paint.setPorterDuffXfermode(SkPorterDuff::kDstIn_Mode);    m_canvas->drawBitmap(imageBuffer, SkFloatToScalar(rect.x()), SkFloatToScalar(rect.y()), &paint);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -