本文整理汇总了C++中SkPaint::breakText方法的典型用法代码示例。如果您正苦于以下问题:C++ SkPaint::breakText方法的具体用法?C++ SkPaint::breakText怎么用?C++ SkPaint::breakText使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SkPaint
的用法示例。
在下文中一共展示了SkPaint::breakText方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test_breakText
static void test_breakText() {
SkPaint paint;
const char* text = "sdfkljAKLDFJKEWkldfjlk#$%&sdfs.dsj";
size_t length = strlen(text);
SkScalar width = paint.measureText(text, length);
SkScalar mm = 0;
SkScalar nn = 0;
for (SkScalar w = 0; w <= width; w += SK_Scalar1) {
SkScalar m;
size_t n = paint.breakText(text, length, w, &m,
SkPaint::kBackward_TextBufferDirection);
SkASSERT(n <= length);
SkASSERT(m <= width);
if (n == 0) {
SkASSERT(m == 0);
} else {
// now assert that we're monotonic
if (n == nn) {
SkASSERT(m == mm);
} else {
SkASSERT(n > nn);
SkASSERT(m > mm);
}
}
nn = SkIntToScalar(n);
mm = m;
}
SkDEBUGCODE(size_t length2 =) paint.breakText(text, length, width, &mm);
SkASSERT(length2 == length);
SkASSERT(mm == width);
}
示例2: test_break
static void test_break(SkCanvas* canvas, const char text[], size_t length,
SkScalar x, SkScalar y, const SkPaint& paint,
SkScalar clickX) {
SkPaint linePaint;
linePaint.setAntiAlias(true);
SkScalar measured;
if (paint.breakText(text, length, clickX - x, &measured,
SkPaint::kForward_TextBufferDirection)) {
linePaint.setColor(SK_ColorRED);
canvas->drawLine(x, y, x + measured, y, linePaint);
}
x += paint.measureText(text, length);
if (paint.breakText(text, length, x - clickX, &measured,
SkPaint::kBackward_TextBufferDirection)) {
linePaint.setColor(SK_ColorBLUE);
canvas->drawLine(x - measured, y, x, y, linePaint);
}
}
示例3: breakText
static int breakText(JNIEnv* env, const SkPaint& paint, const jchar text[],
int count, float maxWidth, jfloatArray jmeasured,
SkPaint::TextBufferDirection tbd) {
SkASSERT(paint.getTextEncoding() == SkPaint::kUTF16_TextEncoding);
SkScalar measured;
size_t bytes = paint.breakText(text, count << 1,
SkFloatToScalar(maxWidth), &measured, tbd);
SkASSERT((bytes & 1) == 0);
if (jmeasured && env->GetArrayLength(jmeasured) > 0) {
AutoJavaFloatArray autoMeasured(env, jmeasured, 1);
jfloat* array = autoMeasured.ptr();
array[0] = SkScalarToFloat(measured);
}
return bytes >> 1;
}
示例4: linebreak
static size_t linebreak(const char text[], const char stop[],
const SkPaint& paint, SkScalar margin,
size_t* trailing = nullptr)
{
size_t lengthBreak = paint.breakText(text, stop - text, margin);
//Check for white space or line breakers before the lengthBreak
const char* start = text;
const char* word_start = text;
int prevWS = true;
if (trailing) {
*trailing = 0;
}
while (text < stop) {
const char* prevText = text;
SkUnichar uni = SkUTF8_NextUnichar(&text);
int currWS = is_ws(uni);
if (!currWS && prevWS) {
word_start = prevText;
}
prevWS = currWS;
if (text > start + lengthBreak) {
if (currWS) {
// eat the rest of the whitespace
while (text < stop && is_ws(SkUTF8_ToUnichar(text))) {
text += SkUTF8_CountUTF8Bytes(text);
}
if (trailing) {
*trailing = text - prevText;
}
} else {
// backup until a whitespace (or 1 char)
if (word_start == start) {
if (prevText > start) {
text = prevText;
}
} else {
text = word_start;
}
}
break;
}
if ('\n' == uni) {
size_t ret = text - start;
size_t lineBreakSize = 1;
if (text < stop) {
uni = SkUTF8_NextUnichar(&text);
if ('\r' == uni) {
ret = text - start;
++lineBreakSize;
}
}
if (trailing) {
*trailing = lineBreakSize;
}
return ret;
}
if ('\r' == uni) {
size_t ret = text - start;
size_t lineBreakSize = 1;
if (text < stop) {
uni = SkUTF8_NextUnichar(&text);
if ('\n' == uni) {
ret = text - start;
++lineBreakSize;
}
}
if (trailing) {
*trailing = lineBreakSize;
}
return ret;
}
}
return text - start;
}