Unverified Commit fda59e1f authored by Pavel's avatar Pavel Committed by GitHub

Allow request emoji and symbols popup on macOS (#123)

parent 23077f6c
......@@ -36,8 +36,8 @@ fun createWindow(title: String, exitOnClose: Boolean) = runBlocking(Dispatchers.
// Create menu.
val menuBar = JMenuBar()
val menu = JMenu("File")
menuBar.add(menu)
val fileMenu = JMenu("File")
menuBar.add(fileMenu)
val miFullscreenState = JMenuItem("Is fullscreen mode")
val ctrlI = KeyStroke.getKeyStroke(KeyEvent.VK_I, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())
......@@ -73,9 +73,23 @@ fun createWindow(title: String, exitOnClose: Boolean) = runBlocking(Dispatchers.
}
})
menu.add(miToggleFullscreen)
menu.add(miFullscreenState)
menu.add(miTakeScreenshot)
fileMenu.add(miToggleFullscreen)
fileMenu.add(miFullscreenState)
fileMenu.add(miTakeScreenshot)
val editMenu = JMenu("Edit")
menuBar.add(editMenu)
val miEmojiAndSymbols = JMenuItem("Emoji & Symbols")
miEmojiAndSymbols.setAccelerator(KeyStroke.getKeyStroke("ctrl meta SPACE"))
miEmojiAndSymbols.addActionListener(object : ActionListener {
override fun actionPerformed(actionEvent: ActionEvent?) {
orderEmojiAndSymbolsPopup()
}
})
editMenu.add(miEmojiAndSymbols)
window.setJMenuBar(menuBar)
......
......@@ -15,6 +15,7 @@ internal interface PlatformOperations {
fun isFullscreen(component: Component): Boolean
fun setFullscreen(component: Component, value: Boolean)
fun disableTitleBar(platformInfo: Long)
fun orderEmojiAndSymbolsPopup()
fun getDpiScale(component: Component): Float
fun createRedrawer(layer: SkiaLayer, renderApi: GraphicsApi, properties: SkiaLayerProperties): Redrawer
}
......@@ -38,6 +39,10 @@ internal val platformOperations: PlatformOperations by lazy {
osxDisableTitleBar(platformInfo)
}
override fun orderEmojiAndSymbolsPopup() {
osxOrderEmojiAndSymbolsPopup()
}
override fun createRedrawer(
layer: SkiaLayer,
renderApi: GraphicsApi,
......@@ -65,6 +70,9 @@ internal val platformOperations: PlatformOperations by lazy {
override fun disableTitleBar(platformInfo: Long) {
}
override fun orderEmojiAndSymbolsPopup() {
}
override fun getDpiScale(component: Component): Float {
return component.graphicsConfiguration.defaultTransform.scaleX.toFloat()
}
......@@ -97,6 +105,9 @@ internal val platformOperations: PlatformOperations by lazy {
override fun disableTitleBar(platformInfo: Long) {
}
override fun orderEmojiAndSymbolsPopup() {
}
override fun getDpiScale(component: Component): Float {
return component.graphicsConfiguration.defaultTransform.scaleX.toFloat()
// TODO doesn't work well because java doesn't scale windows (content has offset with 200% scale)
......@@ -130,6 +141,7 @@ internal val platformOperations: PlatformOperations by lazy {
external private fun osxIsFullscreenNative(component: Component): Boolean
external private fun osxSetFullscreenNative(component: Component, value: Boolean)
external private fun osxDisableTitleBar(platformInfo: Long)
external private fun osxOrderEmojiAndSymbolsPopup()
// Linux
external private fun linuxGetDpiScaleNative(platformInfo: Long): Float
......@@ -23,3 +23,7 @@ open class SkiaWindow(
}
}
}
fun orderEmojiAndSymbolsPopup() {
platformOperations.orderEmojiAndSymbolsPopup()
}
\ No newline at end of file
#import "jni.h"
#import <Cocoa/Cocoa.h>
extern "C"
{
JNIEXPORT void Java_org_jetbrains_skiko_PlatformOperationsKt_osxOrderEmojiAndSymbolsPopup() {
dispatch_async(dispatch_get_main_queue(), ^{
NSApplication* app = [NSApplication sharedApplication];
[app orderFrontCharacterPalette:nil];
});
}
} // extern C
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment