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
8fccb7ea
Unverified
Commit
8fccb7ea
authored
Mar 04, 2022
by
Aleksandr Veselov
Committed by
GitHub
Mar 04, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support of TextIndent (#510)
parent
e8b3b444
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
157 additions
and
17 deletions
+157
-17
gradle.properties
skiko/gradle.properties
+10
-10
ParagraphStyle.kt
...ain/kotlin/org/jetbrains/skia/paragraph/ParagraphStyle.kt
+26
-6
TextIndent.kt
...monMain/kotlin/org/jetbrains/skia/paragraph/TextIndent.kt
+3
-0
ParagraphStyleTests.kt
...tlin/org/jetbrains/skiko/paragraph/ParagraphStyleTests.kt
+15
-0
ParagraphStyle.cc
skiko/src/jvmMain/cpp/common/paragraph/ParagraphStyle.cc
+18
-1
TextStyleTest.kt
...est/kotlin/org/jetbrains/skiko/paragraph/TextStyleTest.kt
+69
-0
org_jetbrains_skiko_tests_org_jetbrains_skiko_paragraph_TextStyleTest_canApplyTextIndent.png
...ains_skiko_paragraph_TextStyleTest_canApplyTextIndent.png
+0
-0
ParagraphStyle.cc
skiko/src/nativeJsMain/cpp/paragraph/ParagraphStyle.cc
+16
-0
No files found.
skiko/gradle.properties
View file @
8fccb7ea
...
@@ -3,15 +3,15 @@ deploy.version=0.0.0
...
@@ -3,15 +3,15 @@ deploy.version=0.0.0
kotlin.mpp.enableGranularSourceSetsMetadata
=
true
kotlin.mpp.enableGranularSourceSetsMetadata
=
true
kotlin.native.enableDependencyPropagation
=
false
kotlin.native.enableDependencyPropagation
=
false
dependencies.skia.windows-x64
=
m99-
51988d0bc1
dependencies.skia.windows-x64
=
m99-
f85ab491eb
dependencies.skia.linux-x64
=
m99-
51988d0bc1
dependencies.skia.linux-x64
=
m99-
f85ab491eb
dependencies.skia.macos-x64
=
m99-
51988d0bc1
dependencies.skia.macos-x64
=
m99-
f85ab491eb
dependencies.skia.linux-arm64
=
m99-
51988d0bc1
dependencies.skia.linux-arm64
=
m99-
f85ab491eb
dependencies.skia.macos-arm64
=
m99-
51988d0bc1
dependencies.skia.macos-arm64
=
m99-
f85ab491eb
dependencies.skia.wasm-wasm
=
m99-
51988d0bc1
dependencies.skia.wasm-wasm
=
m99-
f85ab491eb
dependencies.skia.ios-x64
=
m99-
51988d0bc1
dependencies.skia.ios-x64
=
m99-
f85ab491eb
dependencies.skia.ios-arm64
=
m99-
51988d0bc1
dependencies.skia.ios-arm64
=
m99-
f85ab491eb
dependencies.skia.android-x64
=
m99-
51988d0bc1
dependencies.skia.android-x64
=
m99-
f85ab491eb
dependencies.skia.android-arm64
=
m99-
51988d0bc1
dependencies.skia.android-arm64
=
m99-
f85ab491eb
org.gradle.jvmargs
=
-Xmx3G -XX:MaxMetaspaceSize=512m
org.gradle.jvmargs
=
-Xmx3G -XX:MaxMetaspaceSize=512m
skiko/src/commonMain/kotlin/org/jetbrains/skia/paragraph/ParagraphStyle.kt
View file @
8fccb7ea
package
org.jetbrains.skia.paragraph
package
org.jetbrains.skia.paragraph
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.Native
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.ExternalSymbolName
import
org.jetbrains.skia.ExternalSymbolName
import
org.jetbrains.skia.impl.InteropPointer
import
org.jetbrains.skia.impl.*
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.getPtr
import
org.jetbrains.skia.impl.getPtr
import
org.jetbrains.skia.impl.interopScope
import
org.jetbrains.skia.impl.interopScope
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.impl.withResult
import
org.jetbrains.skia.impl.withStringResult
import
org.jetbrains.skia.impl.withStringResult
class
ParagraphStyle
:
Managed
(
ParagraphStyle_nMake
(),
_FinalizerHolder
.
PTR
)
{
class
ParagraphStyle
:
Managed
(
ParagraphStyle_nMake
(),
_FinalizerHolder
.
PTR
)
{
...
@@ -170,6 +167,23 @@ class ParagraphStyle : Managed(ParagraphStyle_nMake(), _FinalizerHolder.PTR) {
...
@@ -170,6 +167,23 @@ class ParagraphStyle : Managed(ParagraphStyle_nMake(), _FinalizerHolder.PTR) {
return
this
return
this
}
}
var
textIndent
:
TextIndent
get
()
=
try
{
Stats
.
onNativeCall
()
val
indents
=
withResult
(
FloatArray
(
2
))
{
_nGetTextIndent
(
_ptr
,
it
)
}
TextIndent
(
indents
[
0
],
indents
[
1
])
}
finally
{
reachabilityBarrier
(
this
)
}
set
(
value
)
=
try
{
Stats
.
onNativeCall
()
_nSetTextIndent
(
_ptr
,
value
.
firstLine
,
value
.
restLine
)
}
finally
{
reachabilityBarrier
(
this
)
}
internal
object
_FinalizerHolder
{
internal
object
_FinalizerHolder
{
val
PTR
=
ParagraphStyle_nGetFinalizer
()
val
PTR
=
ParagraphStyle_nGetFinalizer
()
}
}
...
@@ -244,3 +258,9 @@ private external fun _nIsHintingEnabled(ptr: NativePointer): Boolean
...
@@ -244,3 +258,9 @@ private external fun _nIsHintingEnabled(ptr: NativePointer): Boolean
@ExternalSymbolName
(
"org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting"
)
@ExternalSymbolName
(
"org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting"
)
private
external
fun
_nDisableHinting
(
ptr
:
NativePointer
)
private
external
fun
_nDisableHinting
(
ptr
:
NativePointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_paragraph_ParagraphStyle__1nSetTextIndent"
)
private
external
fun
_nSetTextIndent
(
ptr
:
NativePointer
,
firstLine
:
Float
,
restLine
:
Float
)
@ExternalSymbolName
(
"org_jetbrains_skia_paragraph_ParagraphStyle__1nGetTextIndent"
)
private
external
fun
_nGetTextIndent
(
ptr
:
NativePointer
,
result
:
InteropPointer
)
\ No newline at end of file
skiko/src/commonMain/kotlin/org/jetbrains/skia/paragraph/TextIndent.kt
0 → 100644
View file @
8fccb7ea
package
org.jetbrains.skia.paragraph
data class
TextIndent
(
var
firstLine
:
Float
=
0.0f
,
var
restLine
:
Float
=
0.0f
)
skiko/src/commonTest/kotlin/org/jetbrains/skiko/paragraph/ParagraphStyleTests.kt
View file @
8fccb7ea
...
@@ -2,6 +2,7 @@ package org.jetbrains.skiko.paragraph
...
@@ -2,6 +2,7 @@ package org.jetbrains.skiko.paragraph
import
org.jetbrains.skia.impl.use
import
org.jetbrains.skia.impl.use
import
org.jetbrains.skia.paragraph.ParagraphStyle
import
org.jetbrains.skia.paragraph.ParagraphStyle
import
org.jetbrains.skia.paragraph.TextIndent
import
kotlin.test.Test
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertEquals
import
kotlin.test.assertNull
import
kotlin.test.assertNull
...
@@ -17,4 +18,18 @@ class ParagraphStyleTests {
...
@@ -17,4 +18,18 @@ class ParagraphStyleTests {
assertEquals
(
".^."
,
paragraphStyle
.
ellipsis
)
assertEquals
(
".^."
,
paragraphStyle
.
ellipsis
)
}
}
}
}
@Test
fun
paragraphStyleTextIndentTests
()
{
ParagraphStyle
().
use
{
paragraphStyle
->
assertEquals
(
TextIndent
(),
paragraphStyle
.
textIndent
)
val
indent
=
TextIndent
(
20f
,
10f
)
paragraphStyle
.
textIndent
=
indent
assertEquals
(
indent
,
paragraphStyle
.
textIndent
)
val
indent2
=
TextIndent
(-
20f
,
-
10f
)
paragraphStyle
.
textIndent
=
indent2
assertEquals
(
indent2
,
paragraphStyle
.
textIndent
)
}
}
}
}
\ No newline at end of file
skiko/src/jvmMain/cpp/common/paragraph/ParagraphStyle.cc
View file @
8fccb7ea
...
@@ -148,3 +148,20 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_ParagraphSty
...
@@ -148,3 +148,20 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_ParagraphSty
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
instance
->
turnHintingOff
();
instance
->
turnHintingOff
();
}
}
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nSetTextIndent
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jfloat
firstLine
,
jfloat
restLine
)
{
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
TextIndent
indent
;
indent
.
setFirstLine
(
firstLine
);
indent
.
setRestLine
(
restLine
);
instance
->
setTextIndent
(
indent
);
}
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nGetTextIndent
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jfloatArray
result
)
{
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
TextIndent
indent
=
instance
->
getTextIndent
();
float
resultData
[
2
]
=
{
indent
.
getFirstLine
(),
indent
.
getRestLine
()
};
env
->
SetFloatArrayRegion
(
result
,
0
,
2
,
resultData
);
}
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/paragraph/TextStyleTest.kt
View file @
8fccb7ea
...
@@ -61,4 +61,73 @@ class TextStyleTest {
...
@@ -61,4 +61,73 @@ class TextStyleTest {
screenshots
.
assert
(
image
)
screenshots
.
assert
(
image
)
}
}
@Test
fun
canApplyTextIndent
()
=
runTest
{
if
(
hostOs
!=
OS
.
MacOS
)
{
return
@runTest
}
val
fontCollection
=
FontCollection
().
apply
{
setDefaultFontManager
(
TypefaceFontProvider
().
apply
{
val
inter
=
Typeface
.
makeFromResource
(
"./fonts/Inter-Hinted-Regular.ttf"
,
0
)
registerTypeface
(
inter
,
"Inter"
)
})
}
val
textStyle
=
TextStyle
().
apply
{
fontFamilies
=
arrayOf
(
"Inter"
)
fontSize
=
28.0f
color
=
Color
.
BLACK
}
fun
drawParagraph
(
canvas
:
Canvas
,
x
:
Float
,
y
:
Float
,
dir
:
Direction
,
align
:
Alignment
)
{
val
paragraphStyle
=
ParagraphStyle
().
apply
{
this
.
textStyle
=
textStyle
alignment
=
align
direction
=
dir
textIndent
=
TextIndent
(
80f
,
40.0f
)
}
val
paragraph
=
ParagraphBuilder
(
paragraphStyle
,
fontCollection
).
run
{
val
text
=
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do"
+
" eiusmod tempor incididunt ut labore et dolore magna aliqua."
addText
(
text
)
build
()
}
paragraph
.
layout
(
500f
)
paragraph
.
paint
(
canvas
,
x
,
y
)
}
val
image
=
with
(
Surface
.
makeRasterN32Premul
(
1200
,
800
))
{
canvas
.
drawRect
(
Rect
(
0.0f
,
0.0f
,
width
.
toFloat
(),
height
.
toFloat
()),
Paint
().
apply
{
color
=
Color
.
WHITE
})
val
linePaint
=
Paint
().
apply
{
strokeWidth
=
2.0f
setStroke
(
true
)
color
=
Color
.
makeRGB
(
128
,
128
,
128
)
}
for
(
tick
in
listOf
(
50f
,
550f
,
650f
,
1150f
))
{
canvas
.
drawLine
(
tick
,
0f
,
tick
,
height
.
toFloat
(),
linePaint
)
}
var
y
=
20f
for
(
align
in
listOf
(
Alignment
.
LEFT
,
Alignment
.
CENTER
,
Alignment
.
RIGHT
,
Alignment
.
JUSTIFY
))
{
var
x
=
50f
for
(
dir
in
listOf
(
Direction
.
LTR
,
Direction
.
RTL
))
{
drawParagraph
(
canvas
,
x
,
y
,
dir
,
align
)
x
+=
600f
}
y
+=
200f
}
makeImageSnapshot
()
}
screenshots
.
assert
(
image
)
}
}
}
\ No newline at end of file
skiko/src/jvmTest/screenshots/org_jetbrains_skiko_tests_org_jetbrains_skiko_paragraph_TextStyleTest_canApplyTextIndent.png
0 → 100644
View file @
8fccb7ea
126 KB
skiko/src/nativeJsMain/cpp/paragraph/ParagraphStyle.cc
View file @
8fccb7ea
...
@@ -148,3 +148,19 @@ SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting
...
@@ -148,3 +148,19 @@ SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
((
ptr
));
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
((
ptr
));
instance
->
turnHintingOff
();
instance
->
turnHintingOff
();
}
}
SKIKO_EXPORT
void
org_jetbrains_skia_paragraph_ParagraphStyle__1nSetTextIndent
(
KNativePointer
ptr
,
KFloat
firstLine
,
KFloat
restLine
)
{
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
((
ptr
));
TextIndent
indent
;
indent
.
setFirstLine
(
firstLine
);
indent
.
setRestLine
(
restLine
);
instance
->
setTextIndent
(
indent
);
}
SKIKO_EXPORT
void
org_jetbrains_skia_paragraph_ParagraphStyle__1nGetTextIndent
(
KNativePointer
ptr
,
KInteropPointer
result
)
{
ParagraphStyle
*
instance
=
reinterpret_cast
<
ParagraphStyle
*>
((
ptr
));
TextIndent
*
indent
=
reinterpret_cast
<
TextIndent
*>
(
result
);
*
indent
=
instance
->
getTextIndent
();
}
\ No newline at end of file
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