forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #include <kinc/backend/Android.h>
 | ||
|  | 
 | ||
|  | #include <kinc/display.h>
 | ||
|  | #include <kinc/log.h>
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  | 	bool available; | ||
|  | 	int x; | ||
|  | 	int y; | ||
|  | 	int width; | ||
|  | 	int height; | ||
|  | 	bool primary; | ||
|  | 	int number; | ||
|  | } kinc_display_t; | ||
|  | 
 | ||
|  | static kinc_display_t display; | ||
|  | 
 | ||
|  | int kinc_count_displays(void) { | ||
|  | 	return 1; | ||
|  | } | ||
|  | 
 | ||
|  | int kinc_primary_display(void) { | ||
|  | 	return 0; | ||
|  | } | ||
|  | 
 | ||
|  | static int width() { | ||
|  | 	JNIEnv *env; | ||
|  | 	JavaVM *vm = kinc_android_get_activity()->vm; | ||
|  | 	(*vm)->AttachCurrentThread(vm, &env, NULL); | ||
|  | 	jclass koreActivityClass = kinc_android_find_class(env, "tech.kinc.KincActivity"); | ||
|  | 	jmethodID koreActivityGetScreenDpi = (*env)->GetStaticMethodID(env, koreActivityClass, "getDisplayWidth", "()I"); | ||
|  | 	int width = (*env)->CallStaticIntMethod(env, koreActivityClass, koreActivityGetScreenDpi); | ||
|  | 	(*vm)->DetachCurrentThread(vm); | ||
|  | 	return width; | ||
|  | } | ||
|  | 
 | ||
|  | static int height() { | ||
|  | 	JNIEnv *env; | ||
|  | 	JavaVM *vm = kinc_android_get_activity()->vm; | ||
|  | 	(*vm)->AttachCurrentThread(vm, &env, NULL); | ||
|  | 	jclass koreActivityClass = kinc_android_find_class(env, "tech.kinc.KincActivity"); | ||
|  | 	jmethodID koreActivityGetScreenDpi = (*env)->GetStaticMethodID(env, koreActivityClass, "getDisplayHeight", "()I"); | ||
|  | 	int height = (*env)->CallStaticIntMethod(env, koreActivityClass, koreActivityGetScreenDpi); | ||
|  | 	(*vm)->DetachCurrentThread(vm); | ||
|  | 	return height; | ||
|  | } | ||
|  | 
 | ||
|  | static int pixelsPerInch() { | ||
|  | 	JNIEnv *env; | ||
|  | 	JavaVM *vm = kinc_android_get_activity()->vm; | ||
|  | 	(*vm)->AttachCurrentThread(vm, &env, NULL); | ||
|  | 	jclass koreActivityClass = kinc_android_find_class(env, "tech.kinc.KincActivity"); | ||
|  | 	jmethodID koreActivityGetScreenDpi = (*env)->GetStaticMethodID(env, koreActivityClass, "getScreenDpi", "()I"); | ||
|  | 	int dpi = (*env)->CallStaticIntMethod(env, koreActivityClass, koreActivityGetScreenDpi); | ||
|  | 	(*vm)->DetachCurrentThread(vm); | ||
|  | 	return dpi; | ||
|  | } | ||
|  | 
 | ||
|  | static int refreshRate() { | ||
|  | 	JNIEnv *env; | ||
|  | 	JavaVM *vm = kinc_android_get_activity()->vm; | ||
|  | 	(*vm)->AttachCurrentThread(vm, &env, NULL); | ||
|  | 	jclass koreActivityClass = kinc_android_find_class(env, "tech.kinc.KincActivity"); | ||
|  | 	jmethodID koreActivityGetScreenDpi = (*env)->GetStaticMethodID(env, koreActivityClass, "getRefreshRate", "()I"); | ||
|  | 	int dpi = (*env)->CallStaticIntMethod(env, koreActivityClass, koreActivityGetScreenDpi); | ||
|  | 	(*vm)->DetachCurrentThread(vm); | ||
|  | 	return dpi; | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_display_init() {} | ||
|  | 
 | ||
|  | kinc_display_mode_t kinc_display_available_mode(int display_index, int mode_index) { | ||
|  | 	kinc_display_mode_t mode; | ||
|  | 	mode.x = 0; | ||
|  | 	mode.y = 0; | ||
|  | 	mode.width = width(); | ||
|  | 	mode.height = height(); | ||
|  | 	mode.frequency = refreshRate(); | ||
|  | 	mode.bits_per_pixel = 32; | ||
|  | 	mode.pixels_per_inch = pixelsPerInch(); | ||
|  | 	return mode; | ||
|  | } | ||
|  | 
 | ||
|  | int kinc_display_count_available_modes(int display_index) { | ||
|  | 	return 1; | ||
|  | } | ||
|  | 
 | ||
|  | kinc_display_mode_t kinc_display_current_mode(int display) { | ||
|  | 	kinc_display_mode_t mode; | ||
|  | 	mode.x = 0; | ||
|  | 	mode.y = 0; | ||
|  | 	mode.width = width(); | ||
|  | 	mode.height = height(); | ||
|  | 	mode.frequency = refreshRate(); | ||
|  | 	mode.bits_per_pixel = 32; | ||
|  | 	mode.pixels_per_inch = pixelsPerInch(); | ||
|  | 	return mode; | ||
|  | } | ||
|  | 
 | ||
|  | const char *kinc_display_name(int display) { | ||
|  | 	return "Display"; | ||
|  | } | ||
|  | 
 | ||
|  | bool kinc_display_available(int display) { | ||
|  | 	return display == 0; | ||
|  | } |