Unverified Commit 27fcc1b3 authored by Nikolay Igotti's avatar Nikolay Igotti Committed by GitHub

Support getting of system theme. (#118)

parent a8fa8209
...@@ -7,10 +7,7 @@ import org.jetbrains.skija.paragraph.FontCollection ...@@ -7,10 +7,7 @@ import org.jetbrains.skija.paragraph.FontCollection
import org.jetbrains.skija.paragraph.ParagraphBuilder import org.jetbrains.skija.paragraph.ParagraphBuilder
import org.jetbrains.skija.paragraph.ParagraphStyle import org.jetbrains.skija.paragraph.ParagraphStyle
import org.jetbrains.skija.paragraph.TextStyle import org.jetbrains.skija.paragraph.TextStyle
import org.jetbrains.skiko.SkiaLayer import org.jetbrains.skiko.*
import org.jetbrains.skiko.SkiaRenderer
import org.jetbrains.skiko.SkiaWindow
import org.jetbrains.skiko.toBufferedImage
import java.awt.Dimension import java.awt.Dimension
import java.awt.Toolkit import java.awt.Toolkit
import java.awt.event.* import java.awt.event.*
...@@ -198,7 +195,7 @@ fun displayScene(renderer: Renderer, width: Int, height: Int, nanoTime: Long, xp ...@@ -198,7 +195,7 @@ fun displayScene(renderer: Renderer, width: Int, height: Int, nanoTime: Long, xp
val style = ParagraphStyle() val style = ParagraphStyle()
val paragraph = ParagraphBuilder(style, fontCollection) val paragraph = ParagraphBuilder(style, fontCollection)
.pushStyle(TextStyle().setColor(0xFF000000.toInt())) .pushStyle(TextStyle().setColor(0xFF000000.toInt()))
.addText("Graphics API: ${renderer.layer.renderApi} ✿゚") .addText("Graphics API: ${renderer.layer.renderApi} ✿゚ ${currentSystemTheme}")
.popStyle() .popStyle()
.build() .build()
paragraph.layout(Float.POSITIVE_INFINITY) paragraph.layout(Float.POSITIVE_INFINITY)
......
...@@ -461,6 +461,7 @@ tasks.withType(LinkSharedLibrary::class.java).configureEach { ...@@ -461,6 +461,7 @@ tasks.withType(LinkSharedLibrary::class.java).configureEach {
OS.Windows -> { OS.Windows -> {
linkerArgs.addAll( linkerArgs.addAll(
listOf( listOf(
"Advapi32.lib",
"gdi32.lib", "gdi32.lib",
"Dwmapi.lib", "Dwmapi.lib",
"opengl32.lib", "opengl32.lib",
......
...@@ -60,4 +60,11 @@ extern "C" ...@@ -60,4 +60,11 @@ extern "C"
JAWT_X11DrawingSurfaceInfo *dsi_x11 = fromJavaPointer<JAWT_X11DrawingSurfaceInfo *>(platformInfoPtr); JAWT_X11DrawingSurfaceInfo *dsi_x11 = fromJavaPointer<JAWT_X11DrawingSurfaceInfo *>(platformInfoPtr);
return (float) getDpiScaleByDisplay(dsi_x11->display); return (float) getDpiScaleByDisplay(dsi_x11->display);
} }
JNIEXPORT jint JNICALL Java_org_jetbrains_skiko_SystemThemeKt_getCurrentSystemTheme(JNIEnv *env, jobject topLevel)
{
// Unknown.
return 2;
}
} // extern "C" } // extern "C"
\ No newline at end of file
...@@ -27,4 +27,34 @@ extern "C" ...@@ -27,4 +27,34 @@ extern "C"
JAWT_Win32DrawingSurfaceInfo* dsi_win = fromJavaPointer<JAWT_Win32DrawingSurfaceInfo *>(platformInfoPtr); JAWT_Win32DrawingSurfaceInfo* dsi_win = fromJavaPointer<JAWT_Win32DrawingSurfaceInfo *>(platformInfoPtr);
return (jlong) dsi_win->hwnd; return (jlong) dsi_win->hwnd;
} }
JNIEXPORT jint JNICALL Java_org_jetbrains_skiko_SystemThemeKt_getCurrentSystemTheme(JNIEnv *env, jobject topLevel)
{
auto subkey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
auto name = L"AppsUseLightTheme";
DWORD result;
DWORD result_length = sizeof(result);
auto status = RegGetValueW(
HKEY_CURRENT_USER,
subkey,
name,
RRF_RT_DWORD,
NULL,
&result,
&result_length
);
switch (status) {
case ERROR_SUCCESS:
if (result) {
// Light.
return 0;
} else {
// Dark.
return 1;
}
default:
// Unknown.
return 2;
}
}
} // extern "C" } // extern "C"
\ No newline at end of file
package org.jetbrains.skiko
enum class SystemTheme {
DARK,
LIGHT,
UNKNOWN
}
val currentSystemTheme: SystemTheme
get() = when (getCurrentSystemTheme()) {
0 -> SystemTheme.LIGHT
1 -> SystemTheme.DARK
else -> SystemTheme.UNKNOWN
}
// Common
external private fun getCurrentSystemTheme(): Int
...@@ -191,6 +191,18 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_PlatformOperationsKt_osxDisableT ...@@ -191,6 +191,18 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_PlatformOperationsKt_osxDisableT
}); });
} }
JNIEXPORT jint JNICALL Java_org_jetbrains_skiko_SystemThemeKt_getCurrentSystemTheme(JNIEnv *env, jobject topLevel)
{
NSString *osxMode = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
if ([@"Dark" isEqualToString:osxMode]) {
// Dark.
return 1;
} else {
// Light.
return 0;
}
}
void getMetalDeviceAndQueue(void** device, void** queue) void getMetalDeviceAndQueue(void** device, void** queue)
{ {
id<MTLDevice> fDevice = MTLCreateSystemDefaultDevice(); id<MTLDevice> fDevice = MTLCreateSystemDefaultDevice();
...@@ -199,4 +211,6 @@ void getMetalDeviceAndQueue(void** device, void** queue) ...@@ -199,4 +211,6 @@ void getMetalDeviceAndQueue(void** device, void** queue)
*queue = (__bridge void*)fQueue; *queue = (__bridge void*)fQueue;
} }
} // extern C } // 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