Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desktop Support ? #521

Open
wakaztahir opened this issue Dec 25, 2023 · 4 comments
Open

Desktop Support ? #521

wakaztahir opened this issue Dec 25, 2023 · 4 comments
Labels
feature New feature

Comments

@wakaztahir
Copy link

wakaztahir commented Dec 25, 2023

I would like Sora Editor to work on desktop, I propose using Kotlin Multiplatform for this....

@Rosemoe
Copy link
Owner

Rosemoe commented Feb 21, 2024

Currently, major functionality implementation in sora-editor is platform-dependent:

  • rendering process uses Android specific skia API, and some Android internal graphics and text API
  • user input are delivered by Android platform API
  • user interaction logic is for touchscreen (though basic mouse support is recently added)

So we are unable to migrate sora-editor to a Kotlin Multiplatform application quickly.

However, we are planning to extract the common part of code editor and make a code editor library with Jetpack Compose to finally achieve the multiplatform goal.

@wakaztahir
Copy link
Author

wakaztahir commented Feb 21, 2024

1 - Jetpack compose uses skia for rendering actually, so you can use skia using Jetpack Compose
2 - expect functions and expect classes allow for taking input from multiple platforms, using different code
3 - Jetpack compose UI works with both (touch screen and mouse)

I want you to know that when using Kotlin Multiplatform, The platform dependent API's for example function calls can be made like

in common code

expect fun platformAdd(x : Int, y : Int) : Int

in android code

actual fun platformAdd(x : Int, y : Int) {
    // you can use android api's here with IDE support
    return x + y;
   // but note that context is not part of common code, so having a context parameter is not possible
   // by using jetpack compose, you can create composable functions, which allow you to gain context using LocalContext.current
}

in jvm code

actual fun platformAdd(x : Int, y : Int) {
    // on jvm or desktop it will minus the thing
    return x - y;
}

You can also write expect classes so it should be really easy !

@wakaztahir
Copy link
Author

wakaztahir commented Feb 21, 2024

Since you are already working with Jetpack Compose, I'll recommend that you add multiplatform support from the beginning so you don't use platform dependent API's deep in the code which will cause you to create "big refactors" later when porting to multiplatform

@Rosemoe
Copy link
Owner

Rosemoe commented Feb 21, 2024

Since you are already working with Jetpack Compose

Actually, the new project haven't started yet... I'm planning to start the new project after code folding is done in sora-editor.

And thanks for your advice. The expect and actual declaration helps a lot in platform-specific logic.

@Rosemoe Rosemoe added the feature New feature label Mar 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature
Projects
None yet
Development

No branches or pull requests

2 participants