Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
358ae344
Unverified
Commit
358ae344
authored
Oct 09, 2021
by
Shagen Ogandzhanian
Committed by
GitHub
Oct 09, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Commonize PathSegmentIterator
parent
4615faa1
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
217 additions
and
123 deletions
+217
-123
PathSegmentIterator.cc
skiko/src/commonMain/cpp/generated/PathSegmentIterator.cc
+29
-40
Path.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Path.kt
+1
-1
PathSegmentIterator.kt
...mmonMain/kotlin/org/jetbrains/skia/PathSegmentIterator.kt
+76
-7
PathTests.kt
skiko/src/commonTest/kotlin/org/jetbrains/skia/PathTests.kt
+67
-0
assertCloseEnough.kt
...nTest/kotlin/org/jetbrains/skia/util/assertCloseEnough.kt
+1
-1
makeFromResource.kt
...onTest/kotlin/org/jetbrains/skia/util/makeFromResource.kt
+1
-1
PathSegmentIterator.cc
skiko/src/jvmMain/cpp/common/PathSegmentIterator.cc
+36
-16
FontMgrTest.kt
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/FontMgrTest.kt
+1
-1
PathMeasureTest.kt
...src/jvmTest/kotlin/org/jetbrains/skiko/PathMeasureTest.kt
+1
-1
PathTest.kt
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/PathTest.kt
+0
-51
TestLineTest.kt
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/TestLineTest.kt
+2
-2
TypefaceTest.kt
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/TypefaceTest.kt
+1
-1
FontCollectionTest.kt
...otlin/org/jetbrains/skiko/paragraph/FontCollectionTest.kt
+1
-1
No files found.
skiko/src/commonMain/cpp/generated/PathSegmentIterator.cc
View file @
358ae344
// This file has been auto generated.
#include "SkPath.h"
#include "SkPath.h"
#include "common.h"
#include "common.h"
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_PathSegmentIterator__1nMake
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_PathSegmentIterator__1nMake
(
KNativePointer
pathPtr
,
KBoolean
forceClose
)
{
(
KNativePointer
pathPtr
,
KBoolean
forceClose
)
{
SkPath
*
path
=
reinterpret_cast
<
SkPath
*>
(
(
pathPtr
)
);
SkPath
*
path
=
reinterpret_cast
<
SkPath
*>
(
pathPtr
);
SkPath
::
Iter
*
iter
=
new
SkPath
::
Iter
(
*
path
,
forceClose
);
SkPath
::
Iter
*
iter
=
new
SkPath
::
Iter
(
*
path
,
forceClose
);
return
reinterpret_cast
<
KNativePointer
>
(
iter
);
return
reinterpret_cast
<
KNativePointer
>
(
iter
);
}
}
...
@@ -16,46 +13,38 @@ static void deletePathSegmentIterator(SkPath::Iter* iter) {
...
@@ -16,46 +13,38 @@ static void deletePathSegmentIterator(SkPath::Iter* iter) {
delete
iter
;
delete
iter
;
}
}
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer
()
{
()
{
return
reinterpret_cast
<
KNativePointer
>
((
&
deletePathSegmentIterator
));
return
reinterpret_cast
<
KNativePointer
>
((
&
deletePathSegmentIterator
));
}
}
SKIKO_EXPORT
void
org_jetbrains_skia_PathSegmentIterator__1nNext
(
KNativePointer
ptr
,
KInt
*
data
)
{
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_PathSegmentIterator__1nNext
SkPath
::
Iter
*
instance
=
reinterpret_cast
<
SkPath
::
Iter
*>
(
ptr
);
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_PathSegmentIterator__1nNext"
);
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_PathSegmentIterator__1nNext
(KNativePointer ptr) {
SkPath::Iter* instance = reinterpret_cast<SkPath::Iter*>((ptr));
SkPoint
pts
[
4
];
SkPoint
pts
[
4
];
SkPath
::
Verb
verb
=
instance
->
next
(
pts
);
SkPath
::
Verb
verb
=
instance
->
next
(
pts
);
KInteropPointer segment;
switch (verb) {
data
[
0
]
=
rawBits
(
pts
[
0
].
fX
);
case SkPath::Verb::kDone_Verb:
data
[
1
]
=
rawBits
(
pts
[
0
].
fY
);
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorDone);
break;
data
[
2
]
=
rawBits
(
pts
[
1
].
fX
);
case SkPath::Verb::kMove_Verb:
data
[
3
]
=
rawBits
(
pts
[
1
].
fY
);
case SkPath::Verb::kClose_Verb:
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorMoveClose, static_cast<KInt>(verb), pts[0].fX, pts[0].fY, instance->isClosedContour());
data
[
4
]
=
rawBits
(
pts
[
2
].
fX
);
break;
data
[
5
]
=
rawBits
(
pts
[
2
].
fY
);
case SkPath::Verb::kLine_Verb:
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorLine, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, instance->isCloseLine(), instance->isClosedContour());
data
[
6
]
=
rawBits
(
pts
[
3
].
fX
);
break;
data
[
7
]
=
rawBits
(
pts
[
3
].
fY
);
case SkPath::Verb::kQuad_Verb:
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorQuad, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, instance->isClosedContour());
// Otherwise it's null.
break;
if
(
verb
==
SkPath
::
Verb
::
kConic_Verb
)
case SkPath::Verb::kConic_Verb:
data
[
8
]
=
rawBits
(
instance
->
conicWeight
());
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorConic, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, instance->conicWeight(), instance->isClosedContour());
break;
int
context
=
verb
;
case SkPath::Verb::kCubic_Verb:
if
(
instance
->
isClosedContour
())
{
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorConic, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY, instance->isClosedContour());
context
=
context
|
(
1
<<
7
);
break;
}
if
(
instance
->
isCloseLine
())
{
context
=
context
|
(
1
<<
6
);
}
}
return segment;
}
#endif
data
[
9
]
=
context
;
}
\ No newline at end of file
skiko/src/commonMain/kotlin/org/jetbrains/skia/Path.kt
View file @
358ae344
...
@@ -1978,7 +1978,7 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
...
@@ -1978,7 +1978,7 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
}
}
fun
iterator
(
forceClose
:
Boolean
):
PathSegmentIterator
{
fun
iterator
(
forceClose
:
Boolean
):
PathSegmentIterator
{
return
PathSegmentIterator
.
Companion
.
make
(
this
,
forceClose
)
return
PathSegmentIterator
.
make
(
this
,
forceClose
)
}
}
/**
/**
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/PathSegmentIterator.kt
View file @
358ae344
package
org.jetbrains.skia
package
org.jetbrains.skia
import
org.jetbrains.skia.impl.InteropPointer
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.Managed
import
org.jetbrains.skia.impl.Managed
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.getPtr
import
org.jetbrains.skia.impl.getPtr
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.impl.withResult
class
PathSegmentIterator
internal
constructor
(
val
_path
:
Path
?,
ptr
:
NativePointer
)
:
Managed
(
ptr
,
PathSegmentIterator_nGetFinalizer
()),
class
PathSegmentIterator
internal
constructor
(
val
_path
:
Path
?,
ptr
:
NativePointer
)
:
Managed
(
ptr
,
PathSegmentIterator_nGetFinalizer
()),
MutableIterator
<
PathSegment
?>
{
MutableIterator
<
PathSegment
?>
{
companion
object
{
companion
object
{
fun
make
(
path
:
Path
?,
forceClose
:
Boolean
):
PathSegmentIterator
{
fun
make
(
path
:
Path
?,
forceClose
:
Boolean
):
PathSegmentIterator
{
return
try
{
return
try
{
val
ptr
=
val
i
=
PathSegmentIterator
(
path
,
_nMake
(
getPtr
(
path
),
forceClose
))
_nMake
(
getPtr
(
path
),
forceClose
)
i
.
_nextSegment
=
i
.
nextSegment
()
val
i
=
PathSegmentIterator
(
path
,
ptr
)
i
.
_nextSegment
=
PathSegmentIterator_nNext
(
ptr
)
i
i
}
finally
{
}
finally
{
reachabilityBarrier
(
path
)
reachabilityBarrier
(
path
)
...
@@ -32,7 +33,7 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin
...
@@ -32,7 +33,7 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin
return
try
{
return
try
{
if
(
_nextSegment
?.
verb
==
PathVerb
.
DONE
)
throw
NoSuchElementException
()
if
(
_nextSegment
?.
verb
==
PathVerb
.
DONE
)
throw
NoSuchElementException
()
val
res
=
_nextSegment
val
res
=
_nextSegment
_nextSegment
=
PathSegmentIterator_nNext
(
_ptr
)
_nextSegment
=
nextSegment
(
)
res
res
}
finally
{
}
finally
{
reachabilityBarrier
(
this
)
reachabilityBarrier
(
this
)
...
@@ -54,13 +55,81 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin
...
@@ -54,13 +55,81 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin
override
fun
remove
()
{
override
fun
remove
()
{
TODO
(
"Not yet implemented"
)
TODO
(
"Not yet implemented"
)
}
}
private
fun
nextSegment
()
=
pathSegmentFromIntArray
(
withResult
(
IntArray
(
10
))
{
PathSegmentIterator_nNext
(
this
.
_ptr
,
it
)
})
}
private
fun
pathSegmentFromIntArray
(
points
:
IntArray
):
PathSegment
{
val
context
=
points
.
last
()
val
verb
=
(
context
)
and
((
1
shl
3
)
-
1
)
val
isClosedBit
=
((
context
shr
7
)
and
1
)
val
isClosedLineBit
=
((
context
shr
6
)
and
1
)
val
isClosed
=
isClosedBit
!=
0
return
when
(
PathVerb
.
values
()[
verb
])
{
PathVerb
.
MOVE
,
PathVerb
.
CLOSE
->
{
PathSegment
(
verb
,
Float
.
fromBits
(
points
[
0
]),
Float
.
fromBits
(
points
[
1
]),
isClosed
)
}
PathVerb
.
LINE
->
{
PathSegment
(
Float
.
fromBits
(
points
[
0
]),
Float
.
fromBits
(
points
[
1
]),
Float
.
fromBits
(
points
[
2
]),
Float
.
fromBits
(
points
[
3
]),
isClosedLineBit
!=
0
,
isClosed
)
}
PathVerb
.
QUAD
->
{
PathSegment
(
Float
.
fromBits
(
points
[
0
]),
Float
.
fromBits
(
points
[
1
]),
Float
.
fromBits
(
points
[
2
]),
Float
.
fromBits
(
points
[
3
]),
Float
.
fromBits
(
points
[
4
]),
Float
.
fromBits
(
points
[
5
]),
isClosed
)
}
PathVerb
.
CONIC
->
{
PathSegment
(
Float
.
fromBits
(
points
[
0
]),
Float
.
fromBits
(
points
[
1
]),
Float
.
fromBits
(
points
[
2
]),
Float
.
fromBits
(
points
[
3
]),
Float
.
fromBits
(
points
[
4
]),
Float
.
fromBits
(
points
[
5
]),
Float
.
fromBits
(
points
[
8
]),
isClosed
)
}
PathVerb
.
CUBIC
->
{
PathSegment
(
Float
.
fromBits
(
points
[
0
]),
Float
.
fromBits
(
points
[
1
]),
Float
.
fromBits
(
points
[
2
]),
Float
.
fromBits
(
points
[
3
]),
Float
.
fromBits
(
points
[
4
]),
Float
.
fromBits
(
points
[
5
]),
Float
.
fromBits
(
points
[
6
]),
Float
.
fromBits
(
points
[
7
]),
isClosed
)
}
PathVerb
.
DONE
->
{
PathSegment
()
}
}
}
}
@ExternalSymbolName
(
"org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer"
)
@ExternalSymbolName
(
"org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer"
)
private
external
fun
PathSegmentIterator_nGetFinalizer
():
NativePointer
private
external
fun
PathSegmentIterator_nGetFinalizer
():
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_PathSegmentIterator__1nNext"
)
@ExternalSymbolName
(
"org_jetbrains_skia_PathSegmentIterator__1nNext"
)
private
external
fun
PathSegmentIterator_nNext
(
ptr
:
NativePointer
):
PathSegment
?
private
external
fun
PathSegmentIterator_nNext
(
ptr
:
NativePointer
,
points
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_PathSegmentIterator__1nMake"
)
@ExternalSymbolName
(
"org_jetbrains_skia_PathSegmentIterator__1nMake"
)
private
external
fun
_nMake
(
pathPtr
:
NativePointer
,
forceClose
:
Boolean
):
NativePointer
private
external
fun
_nMake
(
pathPtr
:
NativePointer
,
forceClose
:
Boolean
):
NativePointer
\ No newline at end of file
skiko/src/commonTest/kotlin/org/jetbrains/skia/PathTests.kt
0 → 100644
View file @
358ae344
package
org.jetbrains.skia
import
org.jetbrains.skia.impl.use
import
kotlin.test.Test
import
kotlin.test.assertTrue
import
kotlin.test.assertFalse
import
kotlin.test.assertEquals
import
kotlin.test.assertFailsWith
import
org.jetbrains.skiko.tests.runTest
import
org.jetbrains.skia.tests.assertCloseEnough
class
PathTests
{
@Test
fun
iterTest
()
=
runTest
{
Path
().
moveTo
(
10f
,
10f
).
lineTo
(
20f
,
0f
).
lineTo
(
20f
,
20f
).
closePath
().
use
{
p
->
p
.
iterator
().
use
{
i
->
assertTrue
(
i
.
hasNext
())
var
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
MOVE
,
s
.
verb
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p0
)
assertTrue
(
s
.
isClosedContour
,
"segment[0] is a closed contour"
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
LINE
,
s
.
verb
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p0
)
assertEquals
(
Point
(
20f
,
0f
),
s
.
p1
)
assertFalse
(
s
.
isCloseLine
,
"segment[1] is a closed line"
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
LINE
,
s
.
verb
)
assertEquals
(
Point
(
20f
,
0f
),
s
.
p0
)
assertEquals
(
Point
(
20f
,
20f
),
s
.
p1
)
assertFalse
(
s
.
isCloseLine
,
"segment[2] is a closed line"
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
LINE
,
s
.
verb
)
assertEquals
(
Point
(
20f
,
20f
),
s
.
p0
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p1
)
assertTrue
(
s
.
isCloseLine
,
"segment[3] is a closed line"
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
CLOSE
,
s
.
verb
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p0
)
assertFalse
(
i
.
hasNext
())
assertFailsWith
<
NoSuchElementException
>
{
i
.
next
()
}
}
}
}
@Test
fun
convexityTest
()
=
runTest
{
Path
().
lineTo
(
40f
,
20f
).
lineTo
(
0f
,
40f
).
lineTo
(
0f
,
0f
).
closePath
().
use
{
p
->
assertTrue
(
p
.
isConvex
)
}
Path
().
lineTo
(
40f
,
40f
).
lineTo
(
40f
,
0f
).
lineTo
(
0f
,
40f
).
lineTo
(
0f
,
0f
).
closePath
().
use
{
p
->
assertFalse
(
p
.
isConvex
)
}
}
}
\ No newline at end of file
skiko/src/
jvmTest/kotlin/org/jetbrains/skiko/helpers
/assertCloseEnough.kt
→
skiko/src/
commonTest/kotlin/org/jetbrains/skia/util
/assertCloseEnough.kt
View file @
358ae344
package
org.jetbrains.ski
ko.skija
package
org.jetbrains.ski
a.tests
import
org.jetbrains.skia.Matrix33
import
org.jetbrains.skia.Matrix33
import
org.jetbrains.skia.Point
import
org.jetbrains.skia.Point
...
...
skiko/src/
jvmTest/kotlin/org/jetbrains/skiko/helpers
/makeFromResource.kt
→
skiko/src/
commonTest/kotlin/org/jetbrains/skia/util
/makeFromResource.kt
View file @
358ae344
package
org.jetbrains.ski
ko.skija
package
org.jetbrains.ski
a.tests
import
org.jetbrains.skia.Data
import
org.jetbrains.skia.Data
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.Typeface
...
...
skiko/src/jvmMain/cpp/common/PathSegmentIterator.cc
View file @
358ae344
...
@@ -19,32 +19,52 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PathSegmentIteratorKt
...
@@ -19,32 +19,52 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PathSegmentIteratorKt
return
static_cast
<
jlong
>
(
reinterpret_cast
<
uintptr_t
>
(
&
deletePathSegmentIterator
));
return
static_cast
<
jlong
>
(
reinterpret_cast
<
uintptr_t
>
(
&
deletePathSegmentIterator
));
}
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_PathSegmentIteratorKt_PathSegmentIterator_1nNext
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_PathSegmentIteratorKt_PathSegmentIterator_1nNext
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
result
)
{
SkPath
::
Iter
*
instance
=
reinterpret_cast
<
SkPath
::
Iter
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkPath
::
Iter
*
instance
=
reinterpret_cast
<
SkPath
::
Iter
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkPoint
pts
[
4
];
SkPoint
pts
[
4
];
SkPath
::
Verb
verb
=
instance
->
next
(
pts
);
SkPath
::
Verb
verb
=
instance
->
next
(
pts
);
jobject
segment
;
int
context
=
verb
;
if
(
instance
->
isClosedContour
())
{
context
=
context
|
(
1
<<
7
);
}
if
(
instance
->
isCloseLine
())
{
context
=
context
|
(
1
<<
6
);
}
switch
(
verb
)
{
switch
(
verb
)
{
case
SkPath
:
:
Verb
::
kDone_Verb
:
case
SkPath
:
:
Verb
::
kDone_Verb
:
{
segment
=
env
->
NewObject
(
skija
::
PathSegment
::
cls
,
skija
::
PathSegment
::
ctorDone
);
jint
d
[
10
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
context
};
env
->
SetIntArrayRegion
(
result
,
0
,
10
,
d
);
break
;
break
;
}
case
SkPath
:
:
Verb
::
kMove_Verb
:
case
SkPath
:
:
Verb
::
kMove_Verb
:
case
SkPath
:
:
Verb
::
kClose_Verb
:
case
SkPath
:
:
Verb
::
kClose_Verb
:
{
segment
=
env
->
NewObject
(
skija
::
PathSegment
::
cls
,
skija
::
PathSegment
::
ctorMoveClose
,
static_cast
<
jint
>
(
verb
),
pts
[
0
].
fX
,
pts
[
0
].
fY
,
instance
->
isClosedContour
());
jint
d
[
10
]
=
{
rawBits
(
pts
[
0
].
fX
),
rawBits
(
pts
[
0
].
fY
),
0
,
0
,
0
,
0
,
0
,
0
,
0
,
context
};
env
->
SetIntArrayRegion
(
result
,
0
,
10
,
d
);
break
;
break
;
case
SkPath
:
:
Verb
::
kLine_Verb
:
}
segment
=
env
->
NewObject
(
skija
::
PathSegment
::
cls
,
skija
::
PathSegment
::
ctorLine
,
pts
[
0
].
fX
,
pts
[
0
].
fY
,
pts
[
1
].
fX
,
pts
[
1
].
fY
,
instance
->
isCloseLine
(),
instance
->
isClosedContour
());
case
SkPath
:
:
Verb
::
kLine_Verb
:
{
jint
d
[
10
]
=
{
rawBits
(
pts
[
0
].
fX
),
rawBits
(
pts
[
0
].
fY
),
rawBits
(
pts
[
1
].
fX
),
rawBits
(
pts
[
1
].
fY
),
0
,
0
,
0
,
0
,
0
,
context
};
env
->
SetIntArrayRegion
(
result
,
0
,
10
,
d
);
break
;
break
;
case
SkPath
:
:
Verb
::
kQuad_Verb
:
}
segment
=
env
->
NewObject
(
skija
::
PathSegment
::
cls
,
skija
::
PathSegment
::
ctorQuad
,
pts
[
0
].
fX
,
pts
[
0
].
fY
,
pts
[
1
].
fX
,
pts
[
1
].
fY
,
pts
[
2
].
fX
,
pts
[
2
].
fY
,
instance
->
isClosedContour
());
case
SkPath
:
:
Verb
::
kQuad_Verb
:
{
jint
d
[
10
]
=
{
rawBits
(
pts
[
0
].
fX
),
rawBits
(
pts
[
0
].
fY
),
rawBits
(
pts
[
1
].
fX
),
rawBits
(
pts
[
1
].
fY
),
rawBits
(
pts
[
2
].
fX
),
rawBits
(
pts
[
2
].
fY
),
0
,
0
,
0
,
context
};
env
->
SetIntArrayRegion
(
result
,
0
,
10
,
d
);
break
;
break
;
case
SkPath
:
:
Verb
::
kConic_Verb
:
}
segment
=
env
->
NewObject
(
skija
::
PathSegment
::
cls
,
skija
::
PathSegment
::
ctorConic
,
pts
[
0
].
fX
,
pts
[
0
].
fY
,
pts
[
1
].
fX
,
pts
[
1
].
fY
,
pts
[
2
].
fX
,
pts
[
2
].
fY
,
instance
->
conicWeight
(),
instance
->
isClosedContour
());
case
SkPath
:
:
Verb
::
kConic_Verb
:
{
jint
d
[
10
]
=
{
rawBits
(
pts
[
0
].
fX
),
rawBits
(
pts
[
0
].
fY
),
rawBits
(
pts
[
1
].
fX
),
rawBits
(
pts
[
1
].
fY
),
rawBits
(
pts
[
2
].
fX
),
rawBits
(
pts
[
2
].
fY
),
0
,
0
,
rawBits
(
instance
->
conicWeight
()),
context
};
env
->
SetIntArrayRegion
(
result
,
0
,
10
,
d
);
break
;
break
;
case
SkPath
:
:
Verb
::
kCubic_Verb
:
}
segment
=
env
->
NewObject
(
skija
::
PathSegment
::
cls
,
skija
::
PathSegment
::
ctorConic
,
pts
[
0
].
fX
,
pts
[
0
].
fY
,
pts
[
1
].
fX
,
pts
[
1
].
fY
,
pts
[
2
].
fX
,
pts
[
2
].
fY
,
pts
[
3
].
fX
,
pts
[
3
].
fY
,
instance
->
isClosedContour
());
case
SkPath
:
:
Verb
::
kCubic_Verb
:
{
jint
d
[
10
]
=
{
rawBits
(
pts
[
0
].
fX
),
rawBits
(
pts
[
0
].
fY
),
rawBits
(
pts
[
1
].
fX
),
rawBits
(
pts
[
1
].
fY
),
rawBits
(
pts
[
2
].
fX
),
rawBits
(
pts
[
2
].
fY
),
rawBits
(
pts
[
3
].
fX
),
rawBits
(
pts
[
3
].
fY
),
0
,
context
};
env
->
SetIntArrayRegion
(
result
,
0
,
10
,
d
);
break
;
break
;
}
}
return
segment
;
}
}
}
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/FontMgrTest.kt
View file @
358ae344
...
@@ -4,10 +4,10 @@ import org.jetbrains.skia.Data
...
@@ -4,10 +4,10 @@ import org.jetbrains.skia.Data
import
org.jetbrains.skia.FontStyle
import
org.jetbrains.skia.FontStyle
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.paragraph.TypefaceFontProvider
import
org.jetbrains.skia.paragraph.TypefaceFontProvider
import
org.jetbrains.skiko.skija.makeFromResource
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertNull
import
kotlin.test.assertNull
import
org.jetbrains.skia.tests.makeFromResource
class
FontMgrTest
{
class
FontMgrTest
{
@Test
@Test
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/PathMeasureTest.kt
View file @
358ae344
...
@@ -4,9 +4,9 @@ import org.jetbrains.skia.Matrix33
...
@@ -4,9 +4,9 @@ import org.jetbrains.skia.Matrix33
import
org.jetbrains.skia.Path
import
org.jetbrains.skia.Path
import
org.jetbrains.skia.PathMeasure
import
org.jetbrains.skia.PathMeasure
import
org.jetbrains.skia.Point
import
org.jetbrains.skia.Point
import
org.jetbrains.skiko.skija.assertCloseEnough
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
import
org.jetbrains.skia.tests.assertCloseEnough
class
PathMeasureTest
{
class
PathMeasureTest
{
@Test
@Test
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/PathTest.kt
View file @
358ae344
...
@@ -18,57 +18,6 @@ import kotlin.test.assertNull
...
@@ -18,57 +18,6 @@ import kotlin.test.assertNull
import
kotlin.test.assertTrue
import
kotlin.test.assertTrue
class
PathTest
{
class
PathTest
{
@Test
fun
iterTest
()
{
Path
().
moveTo
(
10f
,
10f
).
lineTo
(
20f
,
0f
).
lineTo
(
20f
,
20f
).
closePath
().
use
{
p
->
p
.
iterator
().
use
{
i
->
assertTrue
(
i
.
hasNext
())
var
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
MOVE
,
s
.
verb
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p0
)
assertTrue
(
s
.
isClosedContour
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
LINE
,
s
.
verb
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p0
)
assertEquals
(
Point
(
20f
,
0f
),
s
.
p1
)
assertFalse
(
s
.
isCloseLine
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
LINE
,
s
.
verb
)
assertEquals
(
Point
(
20f
,
0f
),
s
.
p0
)
assertEquals
(
Point
(
20f
,
20f
),
s
.
p1
)
assertFalse
(
s
.
isCloseLine
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
LINE
,
s
.
verb
)
assertEquals
(
Point
(
20f
,
20f
),
s
.
p0
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p1
)
assertTrue
(
s
.
isCloseLine
)
assertTrue
(
i
.
hasNext
())
s
=
i
.
next
()
!!
assertEquals
(
PathVerb
.
CLOSE
,
s
.
verb
)
assertEquals
(
Point
(
10f
,
10f
),
s
.
p0
)
assertFalse
(
i
.
hasNext
())
assertFailsWith
<
NoSuchElementException
>
{
i
.
next
()
}
}
}
}
@Test
fun
convexityTest
()
{
Path
().
lineTo
(
40f
,
20f
).
lineTo
(
0f
,
40f
).
lineTo
(
0f
,
0f
).
closePath
().
use
{
p
->
assertTrue
(
p
.
isConvex
)
}
Path
().
lineTo
(
40f
,
40f
).
lineTo
(
40f
,
0f
).
lineTo
(
0f
,
40f
).
lineTo
(
0f
,
0f
).
closePath
().
use
{
p
->
assertFalse
(
p
.
isConvex
)
}
}
@Test
@Test
fun
isShapeTest
()
{
fun
isShapeTest
()
{
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/TestLineTest.kt
View file @
358ae344
...
@@ -3,12 +3,12 @@ package org.jetbrains.skiko
...
@@ -3,12 +3,12 @@ package org.jetbrains.skiko
import
org.jetbrains.skia.Font
import
org.jetbrains.skia.Font
import
org.jetbrains.skia.TextLine
import
org.jetbrains.skia.TextLine
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skiko.skija.assertCloseEnough
import
org.jetbrains.skiko.skija.makeFromResource
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertContentEquals
import
kotlin.test.assertContentEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertNotEquals
import
kotlin.test.assertNotEquals
import
org.jetbrains.skia.tests.makeFromResource
import
org.jetbrains.skia.tests.assertCloseEnough
class
TextLineTest
{
class
TextLineTest
{
private
var
inter36
:
Font
=
Font
(
Typeface
.
makeFromResource
(
"InterHinted-Regular.ttf"
),
36f
)
private
var
inter36
:
Font
=
Font
(
Typeface
.
makeFromResource
(
"InterHinted-Regular.ttf"
),
36f
)
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/TypefaceTest.kt
View file @
358ae344
...
@@ -6,7 +6,6 @@ import org.jetbrains.skia.FontStyle
...
@@ -6,7 +6,6 @@ import org.jetbrains.skia.FontStyle
import
org.jetbrains.skia.FontVariation
import
org.jetbrains.skia.FontVariation
import
org.jetbrains.skia.FontVariationAxis
import
org.jetbrains.skia.FontVariationAxis
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skiko.skija.makeFromResource
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertContentEquals
import
kotlin.test.assertContentEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
...
@@ -15,6 +14,7 @@ import kotlin.test.assertNotEquals
...
@@ -15,6 +14,7 @@ import kotlin.test.assertNotEquals
import
kotlin.test.assertNotNull
import
kotlin.test.assertNotNull
import
kotlin.test.assertNull
import
kotlin.test.assertNull
import
kotlin.test.assertTrue
import
kotlin.test.assertTrue
import
org.jetbrains.skia.tests.makeFromResource
class
TypefaceTest
{
class
TypefaceTest
{
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/paragraph/FontCollectionTest.kt
View file @
358ae344
...
@@ -5,7 +5,7 @@ import org.jetbrains.skia.FontStyle
...
@@ -5,7 +5,7 @@ import org.jetbrains.skia.FontStyle
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.Typeface
import
org.jetbrains.skia.paragraph.FontCollection
import
org.jetbrains.skia.paragraph.FontCollection
import
org.jetbrains.skia.paragraph.TypefaceFontProvider
import
org.jetbrains.skia.paragraph.TypefaceFontProvider
import
org.jetbrains.ski
ko.skija
.makeFromResource
import
org.jetbrains.ski
a.tests
.makeFromResource
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertContentEquals
import
kotlin.test.assertContentEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment