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
e9fdfe70
Unverified
Commit
e9fdfe70
authored
Feb 15, 2022
by
Nikolay Igotti
Committed by
GitHub
Feb 15, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add multiplatform openUri API (#497)
parent
87e97798
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
145 additions
and
10 deletions
+145
-10
build.gradle.kts
skiko/build.gradle.kts
+5
-8
Actuals.android.kt
...androidMain/kotlin/org/jetbrains/skiko/Actuals.android.kt
+21
-1
Actuals.awt.kt
skiko/src/awtMain/kotlin/org/jetbrains/skiko/Actuals.awt.kt
+29
-0
Platform.kt
skiko/src/commonMain/kotlin/org/jetbrains/skiko/Platform.kt
+27
-0
Actuals.ios.kt
skiko/src/iosMain/kotlin/org/jetbrains/skiko/Actuals.ios.kt
+16
-0
Actuals.js.kt
skiko/src/jsMain/kotlin/org/jetbrains/skiko/Actuals.js.kt
+16
-1
Actuals.linux.kt
...src/linuxMain/kotlin/org/jetbrains/skiko/Actuals.linux.kt
+13
-0
Actuals.macos.kt
...src/macosMain/kotlin/org/jetbrains/skiko/Actuals.macos.kt
+18
-0
No files found.
skiko/build.gradle.kts
View file @
e9fdfe70
...
...
@@ -334,6 +334,11 @@ kotlin {
}
if
(
supportNative
)
{
all
{
// Really ugly, see https://youtrack.jetbrains.com/issue/KT-46649 why it is required,
// note that setting it per source set still keeps it unset in commonized source sets.
languageSettings
.
optIn
(
"kotlin.native.SymbolNameIsInternal"
)
}
// See https://kotlinlang.org/docs/mpp-share-on-platforms.html#configure-the-hierarchical-structure-manually
val
nativeMain
by
creating
{
dependsOn
(
nativeJsMain
)
...
...
@@ -1236,14 +1241,6 @@ if (skiko.isCIBuild || mavenCentral.signArtifacts) {
}
}
afterEvaluate
{
tasks
.
withType
<
KotlinCompile
>().
configureEach
{
// this one is actually KotlinJvmCompile
if
(
name
==
"compileTestKotlinJvm"
)
{
kotlinOptions
.
freeCompilerArgs
+=
"-Xopt-in=kotlin.RequiresOptIn"
}
}
}
/**
* Do not call inside tasks.register or tasks.call callback
* (tasks' registration during other task's registration is prohibited)
...
...
skiko/src/androidMain/kotlin/org/jetbrains/skiko/Actuals.android.kt
View file @
e9fdfe70
package
org.jetbrains.skiko
import
android.content.Context
import
android.content.*
import
android.content.ClipboardManager
import
android.content.res.Configuration
import
android.net.Uri
import
org.jetbrains.skiko.redrawer.Redrawer
actual
fun
setSystemLookAndFeel
():
Unit
=
TODO
()
internal
class
AndroidOpenGLRedrawer
(
...
...
@@ -45,3 +48,20 @@ actual val currentSystemTheme: SystemTheme
else
->
SystemTheme
.
UNKNOWN
}
}
internal
actual
fun
URIHandler_openUri
(
uri
:
String
)
{
defaultContext
!!
.
startActivity
(
Intent
(
Intent
.
ACTION_VIEW
,
Uri
.
parse
(
uri
)))
}
internal
actual
fun
ClipboardManager_setText
(
text
:
String
)
{
val
clipboard
=
defaultContext
!!
.
getSystemService
(
Context
.
CLIPBOARD_SERVICE
)
as
ClipboardManager
val
clip
=
ClipData
.
newPlainText
(
""
,
text
)
clipboard
.
setPrimaryClip
(
clip
)
}
internal
actual
fun
ClipboardManager_getText
():
String
?
{
val
context
=
defaultContext
!!
val
clipboard
=
context
.
getSystemService
(
Context
.
CLIPBOARD_SERVICE
)
as
ClipboardManager
val
clip
=
clipboard
.
primaryClip
?:
return
null
return
clip
.
getItemAt
(
0
)
?.
text
?.
toString
()
}
\ No newline at end of file
skiko/src/awtMain/kotlin/org/jetbrains/skiko/Actuals.awt.kt
View file @
e9fdfe70
package
org.jetbrains.skiko
import
org.jetbrains.skiko.redrawer.*
import
java.awt.Desktop
import
java.awt.Toolkit
import
java.awt.datatransfer.DataFlavor
import
java.awt.datatransfer.StringSelection
import
java.awt.datatransfer.UnsupportedFlavorException
import
java.net.URI
import
javax.swing.UIManager
actual
fun
setSystemLookAndFeel
()
=
UIManager
.
setLookAndFeel
(
UIManager
.
getSystemLookAndFeelClassName
())
...
...
@@ -34,3 +40,26 @@ internal actual fun makeDefaultRenderFactory(): RenderFactory {
}
}
}
internal
actual
fun
URIHandler_openUri
(
uri
:
String
)
{
Desktop
.
getDesktop
().
browse
(
URI
(
uri
))
}
private
val
systemClipboard
by
lazy
{
try
{
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
()
}
catch
(
e
:
java
.
awt
.
HeadlessException
)
{
null
}
}
internal
actual
fun
ClipboardManager_setText
(
text
:
String
)
{
systemClipboard
?.
setContents
(
StringSelection
(
text
),
null
)
}
internal
actual
fun
ClipboardManager_getText
():
String
?
{
return
try
{
systemClipboard
?.
getData
(
DataFlavor
.
stringFlavor
)
as
String
?
}
catch
(
_
:
UnsupportedFlavorException
)
{
null
}
}
skiko/src/commonMain/kotlin/org/jetbrains/skiko/Platform.kt
0 → 100644
View file @
e9fdfe70
package
org.jetbrains.skiko
/**
* Manager for opening external links. Is open so that platform could provide an override if default doesn't fit.
*/
open
class
URIManager
{
/**
* Asynchronous request to open a URI in system browser.
* [uri] a universal resource identifier to open, exact set of supported APIs is platform dependent
*/
open
fun
openUri
(
uri
:
String
)
=
URIHandler_openUri
(
uri
)
}
internal
expect
fun
URIHandler_openUri
(
uri
:
String
)
/**
* Manager for controlling system clipboard. Is open so that platform could provide an override if default doesn't fit.
*/
open
class
ClipboardManager
{
open
fun
setText
(
text
:
String
)
=
ClipboardManager_setText
(
text
)
open
fun
getText
():
String
?
=
ClipboardManager_getText
()
}
internal
expect
fun
ClipboardManager_setText
(
text
:
String
)
internal
expect
fun
ClipboardManager_getText
():
String
?
skiko/src/iosMain/kotlin/org/jetbrains/skiko/Actuals.ios.kt
0 → 100644
View file @
e9fdfe70
package
org.jetbrains.skiko
import
platform.Foundation.NSURL.Companion.URLWithString
import
platform.UIKit.UIApplication
import
platform.UIKit.UIPasteboard
internal
actual
fun
URIHandler_openUri
(
uri
:
String
)
{
UIApplication
.
sharedApplication
.
openURL
(
URLWithString
(
uri
)
!!
)
}
internal
actual
fun
ClipboardManager_setText
(
text
:
String
)
{
UIPasteboard
.
generalPasteboard
.
string
=
text
}
internal
actual
fun
ClipboardManager_getText
():
String
?
{
return
UIPasteboard
.
generalPasteboard
.
string
}
\ No newline at end of file
skiko/src/jsMain/kotlin/org/jetbrains/skiko/Actuals.js.kt
View file @
e9fdfe70
package
org.jetbrains.skiko
import
kotlinx.coroutines.await
internal
actual
inline
fun
<
R
>
maybeSynchronized
(
lock
:
Any
,
block
:
()
->
R
):
R
=
block
()
actual
fun
currentNanoTime
():
Long
=
(
kotlinx
.
browser
.
window
.
performance
.
now
()
*
1
_000_000
).
toLong
()
internal
actual
fun
URIHandler_openUri
(
uri
:
String
)
{
kotlinx
.
browser
.
window
.
open
(
uri
,
target
=
"_blank"
)
}
internal
actual
fun
ClipboardManager_setText
(
text
:
String
)
{
kotlinx
.
browser
.
window
.
navigator
.
clipboard
.
writeText
(
text
)
}
internal
actual
fun
ClipboardManager_getText
():
String
?
{
TODO
(
"implement ClipboardManager_getText"
)
// kotlinx.browser.window.navigator.clipboard.readText()
}
\ No newline at end of file
skiko/src/linuxMain/kotlin/org/jetbrains/skiko/Actuals.linux.kt
0 → 100644
View file @
e9fdfe70
package
org.jetbrains.skiko
actual
fun
URIHandler_openUri
(
uri
:
String
)
{
TODO
(
"Implement URIHandler_openUri() on Linux"
)
}
internal
actual
fun
ClipboardManager_setText
(
text
:
String
)
{
TODO
(
"Implement ClipboardManager_setText() on Linux"
)
}
internal
actual
fun
ClipboardManager_getText
():
String
?
{
TODO
(
"Implement ClipboardManager_getText() on Linux"
)
}
\ No newline at end of file
skiko/src/macosMain/kotlin/org/jetbrains/skiko/Actuals.macos.kt
0 → 100644
View file @
e9fdfe70
package
org.jetbrains.skiko
import
platform.AppKit.NSPasteboard
import
platform.AppKit.NSPasteboardTypeString
import
platform.AppKit.NSWorkspace
import
platform.Foundation.NSURL
internal
actual
fun
URIHandler_openUri
(
uri
:
String
)
{
NSWorkspace
.
sharedWorkspace
.
openURL
(
NSURL
.
URLWithString
(
uri
)
!!
)
}
internal
actual
fun
ClipboardManager_setText
(
text
:
String
)
{
NSPasteboard
.
generalPasteboard
.
setString
(
string
=
text
,
forType
=
NSPasteboardTypeString
)
}
internal
actual
fun
ClipboardManager_getText
():
String
?
{
return
NSPasteboard
.
generalPasteboard
.
stringForType
(
dataType
=
NSPasteboardTypeString
)
}
\ 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