/* * Class: org_libharu_PdfPage * Method: curveTo2 * Signature: (FFFF)V */ JNIEXPORT void JNICALL Java_org_libharu_PdfPage_curveTo2(JNIEnv *env, jobject obj, jfloat x2, jfloat y2, jfloat x3, jfloat y3) { jint page; /* Get mHPDFPagePointer */ page = (*env)->GetIntField(env, obj, mHPDFPagePointer); HPDF_Page_CurveTo2((HPDF_Page) page, (HPDF_REAL) x2, (HPDF_REAL) y2, (HPDF_REAL) x3, (HPDF_REAL) y3); }
void WPdfImage::drawPlainPath(const WPainterPath& path) { if (path.isEmpty()) return; const std::vector<WPainterPath::Segment>& segments = path.segments(); if (segments.size() > 0 && segments[0].type() != SegmentType::MoveTo) HPDF_Page_MoveTo(page_, 0, 0); for (unsigned i = 0; i < segments.size(); ++i) { const WPainterPath::Segment s = segments[i]; switch (s.type()) { case SegmentType::MoveTo: HPDF_Page_MoveTo(page_, s.x(), s.y()); break; case SegmentType::LineTo: HPDF_Page_LineTo(page_, s.x(), s.y()); break; case SegmentType::CubicC1: { const double x1 = s.x(); const double y1 = s.y(); const double x2 = segments[i+1].x(); const double y2 = segments[i+1].y(); const double x3 = segments[i+2].x(); const double y3 = segments[i+2].y(); HPDF_Page_CurveTo(page_, x1, y1, x2, y2, x3, y3); i += 2; break; } case SegmentType::CubicC2: case SegmentType::CubicEnd: assert(false); case SegmentType::ArcC: { const double x = s.x(); const double y = s.y(); const double radius = segments[i+1].x(); double ang1 = segments[i+2].x(); double ang2 = ang1 + segments[i+2].y(); HPDF_Page_Arc(page_, x, y, radius, ang1 + 90, ang2 + 90); i += 2; break; } case SegmentType::ArcR: case SegmentType::ArcAngleSweep: assert(false); case SegmentType::QuadC: { const double x1 = s.x(); const double y1 = s.y(); const double x2 = segments[i+1].x(); const double y2 = segments[i+1].y(); // or CurveTo3 ?? Are these any different ?? HPDF_Page_CurveTo2(page_, x1, y1, x2, y2); i += 1; break; } case SegmentType::QuadEnd: assert(false); } } }