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;
							 | 
						||
| 
								 | 
							
								}
							 |