本文整理汇总了C++中SkPaint::getStrokeWidth方法的典型用法代码示例。如果您正苦于以下问题:C++ SkPaint::getStrokeWidth方法的具体用法?C++ SkPaint::getStrokeWidth怎么用?C++ SkPaint::getStrokeWidth使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SkPaint
的用法示例。
在下文中一共展示了SkPaint::getStrokeWidth方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SkMaxScalar
// found and fixed for webkit: mishandling when we hit recursion limit on
// mostly degenerate cubic flatness test
DEF_TEST(Paint_regression_cubic, reporter) {
SkPath path, stroke;
SkPaint paint;
path.moveTo(460.2881309415525f,
303.250847066498f);
path.cubicTo(463.36378422175284f,
302.1169735073363f,
456.32239330810046f,
304.720354932878f,
453.15255460013304f,
305.788586869862f);
SkRect fillR, strokeR;
fillR = path.getBounds();
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(SkIntToScalar(2));
paint.getFillPath(path, &stroke);
strokeR = stroke.getBounds();
SkRect maxR = fillR;
SkScalar miter = SkMaxScalar(SK_Scalar1, paint.getStrokeMiter());
SkScalar inset = paint.getStrokeJoin() == SkPaint::kMiter_Join ?
SkScalarMul(paint.getStrokeWidth(), miter) :
paint.getStrokeWidth();
maxR.inset(-inset, -inset);
// test that our stroke didn't explode
REPORTER_ASSERT(reporter, maxR.contains(strokeR));
}
示例2: init
void SkStrokeRec::init(const SkPaint& paint, SkPaint::Style style) {
switch (style) {
case SkPaint::kFill_Style:
fWidth = kStrokeRec_FillStyleWidth;
fStrokeAndFill = false;
break;
case SkPaint::kStroke_Style:
fWidth = paint.getStrokeWidth();
fStrokeAndFill = false;
break;
case SkPaint::kStrokeAndFill_Style:
if (0 == paint.getStrokeWidth()) {
// hairline+fill == fill
fWidth = kStrokeRec_FillStyleWidth;
fStrokeAndFill = false;
} else {
fWidth = paint.getStrokeWidth();
fStrokeAndFill = true;
}
break;
default:
SkDEBUGFAIL("unknown paint style");
// fall back on just fill
fWidth = kStrokeRec_FillStyleWidth;
fStrokeAndFill = false;
break;
}
// copy these from the paint, regardless of our "style"
fMiterLimit = paint.getStrokeMiter();
fCap = paint.getStrokeCap();
fJoin = paint.getStrokeJoin();
}
示例3: handlePath
virtual void handlePath(SkCanvas* canvas, const SkPath& path,
const SkPaint& paint, int N) override {
SkPoint pts[2];
if (!path.isLine(pts) || pts[0].fY != pts[1].fY) {
this->INHERITED::handlePath(canvas, path, paint, N);
} else {
SkRect rect;
rect.fLeft = pts[0].fX;
rect.fTop = pts[0].fY - paint.getStrokeWidth() / 2;
rect.fRight = rect.fLeft + SkIntToScalar(fWidth);
rect.fBottom = rect.fTop + paint.getStrokeWidth();
SkPaint p(paint);
p.setStyle(SkPaint::kFill_Style);
p.setPathEffect(nullptr);
int count = SkScalarRoundToInt((pts[1].fX - pts[0].fX) / (2*fWidth));
SkScalar dx = SkIntToScalar(2 * fWidth);
for (int i = 0; i < N*10; ++i) {
SkRect r = rect;
for (int j = 0; j < count; ++j) {
canvas->drawRect(r, p);
r.offset(dx, 0);
}
}
}
}
示例4: onDraw
void onDraw(SkCanvas* canvas) override {
canvas->translate(20, 20);
SkRect r = SkRect::MakeWH(1000, 1000);
SkPaint paint;
paint.setAntiAlias(true);
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(15);
const SkScalar inset = paint.getStrokeWidth() + 4;
const SkScalar sweepAngle = 345;
SkRandom rand;
SkScalar sign = 1;
while (r.width() > paint.getStrokeWidth() * 3) {
paint.setColor(sk_tool_utils::color_to_565(rand.nextU() | (0xFF << 24)));
SkScalar startAngle = rand.nextUScalar1() * 360;
SkScalar speed = SkScalarSqrt(16 / r.width()) * 0.5f;
startAngle += fRotate * 360 * speed * sign;
SkPath path;
path.addArc(r, startAngle, sweepAngle);
canvas->drawPath(path, paint);
r.inset(inset, inset);
sign = -sign;
}
}
示例5: paint
static void lettersToBitmap2(SkBitmap* dst, const char chars[],
const SkPaint& original, SkBitmap::Config config) {
SkPath path;
SkScalar x = 0;
SkScalar width;
SkPath p;
for (size_t i = 0; i < strlen(chars); i++) {
original.getTextPath(&chars[i], 1, x, 0, &p);
path.addPath(p);
original.getTextWidths(&chars[i], 1, &width);
x += width;
}
SkRect bounds = path.getBounds();
SkScalar sw = -original.getStrokeWidth();
bounds.inset(sw, sw);
path.offset(-bounds.fLeft, -bounds.fTop);
bounds.offset(-bounds.fLeft, -bounds.fTop);
int w = SkScalarRound(bounds.width());
int h = SkScalarRound(bounds.height());
SkPaint paint(original);
paint.setAntiAlias(true);
paint.setXfermodeMode(SkXfermode::kDstATop_Mode);
paint.setColor(original.getColor());
paint.setStyle(SkPaint::kStroke_Style);
dst->setConfig(config, w, h);
dst->allocPixels();
dst->eraseColor(SK_ColorWHITE);
SkCanvas canvas(*dst);
canvas.drawPath(path, paint);
}
示例6:
SkStroke::SkStroke(const SkPaint& p) {
fWidth = p.getStrokeWidth();
fMiterLimit = p.getStrokeMiter();
fCap = (uint8_t)p.getStrokeCap();
fJoin = (uint8_t)p.getStrokeJoin();
fDoFill = SkToU8(p.getStyle() == SkPaint::kStrokeAndFill_Style);
}
示例7: canDraw
bool GrStencilAndCoverTextContext::canDraw(const GrRenderTarget* rt,
const GrClip& clip,
const GrPaint& paint,
const SkPaint& skPaint,
const SkMatrix& viewMatrix) {
if (skPaint.getRasterizer()) {
return false;
}
if (skPaint.getMaskFilter()) {
return false;
}
if (SkPathEffect* pe = skPaint.getPathEffect()) {
if (pe->asADash(NULL) != SkPathEffect::kDash_DashType) {
return false;
}
}
// No hairlines unless we can map the 1 px width to the object space.
if (skPaint.getStyle() == SkPaint::kStroke_Style
&& skPaint.getStrokeWidth() == 0
&& viewMatrix.hasPerspective()) {
return false;
}
// No color bitmap fonts.
SkScalerContext::Rec rec;
SkScalerContext::MakeRec(skPaint, &fDeviceProperties, NULL, &rec);
return rec.getFormat() != SkMask::kARGB32_Format;
}
示例8: if
void OsmAnd::MapRasterizer_P::rasterizePolylineShadow(
const Context& context,
SkCanvas& canvas,
const SkPath& path,
SkPaint& paint,
const ColorARGB shadowColor,
const float shadowRadius)
{
if (context.shadowMode == MapPresentationEnvironment::ShadowMode::BlurShadow && shadowRadius > 0.0f)
{
// simply draw shadow? difference from option 3 ?
paint.setLooper(SkBlurDrawLooper::Create(
shadowColor.toSkColor(),
SkBlurMaskFilter::ConvertRadiusToSigma(shadowRadius),
0,
0))->unref();
canvas.drawPath(path, paint);
}
else if (context.shadowMode == MapPresentationEnvironment::ShadowMode::SolidShadow && shadowRadius > 0.0f)
{
paint.setLooper(nullptr);
paint.setStrokeWidth(paint.getStrokeWidth() + shadowRadius * 2);
paint.setColorFilter(SkColorFilter::CreateModeFilter(
shadowColor.toSkColor(),
SkXfermode::kSrcIn_Mode))->unref();
canvas.drawPath(path, paint);
}
}
示例9: onDrawContent
virtual void onDrawContent(SkCanvas* canvas) {
static const char* gStr[] = {
"11",
"44",
"112233",
"411327463524",
};
SkPaint paint;
paint.setStrokeWidth(SkIntToScalar(1));
SkScalar x0 = SkIntToScalar(10);
SkScalar y0 = SkIntToScalar(10);
SkScalar x1 = x0 + SkIntToScalar(1000);
for (size_t i = 0; i < SK_ARRAY_COUNT(gStr); i++) {
SkScalar interval[12];
size_t len = SkMin32(strlen(gStr[i]), SK_ARRAY_COUNT(interval));
for (size_t j = 0; j < len; j++) {
interval[j] = SkIntToScalar(gStr[i][j] - '0');
}
SkDashPathEffect dash(interval, len, 0);
paint.setPathEffect(&dash);
canvas->drawLine(x0, y0, x1, y0, paint);
paint.setPathEffect(NULL);
y0 += paint.getStrokeWidth() * 3;
}
setBitmapDash(&paint, 3);
canvas->drawLine(x0, y0, x1, y0, paint);
}
示例10: draw_rect
static void draw_rect(SkCanvas* canvas, bool showGL, int flags) {
SkPaint paint;
paint.setAntiAlias(true);
SkRect r = SkRect::MakeLTRB(50, 70, 250, 370);
setFade(&paint, showGL);
canvas->drawRect(r, paint);
if (showGL) {
show_mesh(canvas, r);
}
canvas->translate(320, 0);
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(25);
canvas->drawRect(r, paint);
if (showGL) {
SkScalar rad = paint.getStrokeWidth() / 2;
SkPoint pts[8];
r.outset(rad, rad);
r.toQuad(&pts[0]);
r.inset(rad*2, rad*2);
r.toQuad(&pts[4]);
const uint16_t indices[] = {
0, 4, 1, 5, 2, 6, 3, 7, 0, 4
};
show_mesh(canvas, pts, indices, SK_ARRAY_COUNT(indices));
}
}
示例11: fStrokeWidth
SkPDFGraphicState::SkPDFGraphicState(const SkPaint& p)
: fStrokeWidth(p.getStrokeWidth())
, fStrokeMiter(p.getStrokeMiter())
, fAlpha(p.getAlpha())
, fStrokeCap(SkToU8(p.getStrokeCap()))
, fStrokeJoin(SkToU8(p.getStrokeJoin()))
, fMode(SkToU8(mode_for_pdf(p.getXfermode()))) {}
示例12: draw_sweep
static void draw_sweep(SkCanvas* c, int width, int height, SkScalar angle) {
SkRect r;
SkPaint p;
p.setAntiAlias(true);
// p.setDither(true);
p.setStrokeWidth(SkIntToScalar(width/10));
p.setStyle(SkPaint::kStroke_Style);
r.set(0, 0, SkIntToScalar(width), SkIntToScalar(height));
// SkColor colors[] = { SK_ColorRED, SK_ColorBLUE, SK_ColorGREEN, SK_ColorCYAN };
SkColor colors[] = { 0x4c737373, 0x4c737373, 0xffffd300 };
SkShader* s = SkGradientShader::CreateSweep(r.centerX(), r.centerY(),
colors, NULL, SK_ARRAY_COUNT(colors));
p.setShader(s)->unref();
SkAutoCanvasRestore acr(c, true);
c->translate(r.centerX(), r.centerY());
c->rotate(angle);
c->translate(-r.centerX(), -r.centerY());
SkRect bounds = r;
r.inset(p.getStrokeWidth(), p.getStrokeWidth());
SkRect innerBounds = r;
if (true) {
c->drawOval(r, p);
} else {
SkScalar x = r.centerX();
SkScalar y = r.centerY();
SkScalar radius = r.width() / 2;
SkScalar thickness = p.getStrokeWidth();
SkScalar sweep = SkFloatToScalar(360.0f);
SkPath path;
path.moveTo(x + radius, y);
// outer top
path.lineTo(x + radius + thickness, y);
// outer arc
path.arcTo(bounds, 0, sweep, false);
// inner arc
path.arcTo(innerBounds, sweep, -sweep, false);
path.close();
}
}
示例13: type
TessellationCache::Description::Description(Type type, const Matrix4& transform, const SkPaint& paint)
: type(type)
, aa(paint.isAntiAlias())
, cap(paint.getStrokeCap())
, style(paint.getStyle())
, strokeWidth(paint.getStrokeWidth()) {
PathTessellator::extractTessellationScales(transform, &scaleX, &scaleY);
memset(&shape, 0, sizeof(Shape));
}
示例14: onDrawContent
virtual void onDrawContent(SkCanvas* canvas) {
SkPaint paint;
paint.setAntiAlias(true);
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(SkIntToScalar(20));
SkPaint hair;
hair.setStyle(SkPaint::kStroke_Style);
hair.setColor(SK_ColorRED);
static const SkISize gSize[] = {
{ 100, 50 },
{ 100, 0 },
{ 0, 50 },
{ 0, 0 }
};
static const SkPaint::Join gJoin[] = {
SkPaint::kMiter_Join,
SkPaint::kRound_Join,
SkPaint::kBevel_Join
};
canvas->translate(paint.getStrokeWidth(), paint.getStrokeWidth());
for (size_t i = 0; i < SK_ARRAY_COUNT(gJoin); ++i) {
paint.setStrokeJoin(gJoin[i]);
canvas->save();
for (size_t j = 0; j < SK_ARRAY_COUNT(gSize); ++j) {
SkRect r = SkRect::MakeWH(SkIntToScalar(gSize[j].fWidth),
SkIntToScalar(gSize[j].fHeight));
canvas->drawRect(r, paint);
canvas->drawRect(r, hair);
canvas->translate(0, SkIntToScalar(100));
}
canvas->restore();
canvas->translate(SkIntToScalar(150), 0);
}
}
示例15: drawPoints
void SkPDFDevice::drawPoints(const SkDraw& d, SkCanvas::PointMode mode,
size_t count, const SkPoint* points,
const SkPaint& paint) {
if (count == 0)
return;
switch (mode) {
case SkCanvas::kPolygon_PointMode:
updateGSFromPaint(paint, false);
SkPDFUtils::MoveTo(points[0].fX, points[0].fY, &fContent);
for (size_t i = 1; i < count; i++) {
SkPDFUtils::AppendLine(points[i].fX, points[i].fY, &fContent);
}
SkPDFUtils::StrokePath(&fContent);
break;
case SkCanvas::kLines_PointMode:
updateGSFromPaint(paint, false);
for (size_t i = 0; i < count/2; i++) {
SkPDFUtils::MoveTo(points[i * 2].fX, points[i * 2].fY,
&fContent);
SkPDFUtils::AppendLine(points[i * 2 + 1].fX,
points[i * 2 + 1].fY, &fContent);
SkPDFUtils::StrokePath(&fContent);
}
break;
case SkCanvas::kPoints_PointMode:
if (paint.getStrokeCap() == SkPaint::kRound_Cap) {
updateGSFromPaint(paint, false);
for (size_t i = 0; i < count; i++) {
SkPDFUtils::MoveTo(points[i].fX, points[i].fY, &fContent);
SkPDFUtils::StrokePath(&fContent);
}
} else {
// PDF won't draw a single point with square/butt caps because
// the orientation is ambiguous. Draw a rectangle instead.
SkPaint newPaint = paint;
newPaint.setStyle(SkPaint::kFill_Style);
SkScalar strokeWidth = paint.getStrokeWidth();
SkScalar halfStroke = strokeWidth * SK_ScalarHalf;
for (size_t i = 0; i < count; i++) {
SkRect r = SkRect::MakeXYWH(points[i].fX, points[i].fY,
0, 0);
r.inset(-halfStroke, -halfStroke);
drawRect(d, r, newPaint);
}
}
break;
default:
SkASSERT(false);
}
}