Moved some utils to ios_utils, webview accepts x,y coords, improved get_scale and get_dpi (#415)
This commit is contained in:
parent
2e8e9a1709
commit
558f987d9d
6 changed files with 174 additions and 47 deletions
|
@ -19,7 +19,7 @@ cdef extern from "ios_wrapper.h":
|
||||||
int ios_send_email(char *subject, char *text, char *mimetype, char
|
int ios_send_email(char *subject, char *text, char *mimetype, char
|
||||||
*filename, char *filename_alias, ios_send_email_cb cb, void *userdata)
|
*filename, char *filename_alias, ios_send_email_cb cb, void *userdata)
|
||||||
void ios_open_url(char *url)
|
void ios_open_url(char *url)
|
||||||
void load_url_webview(char *url, int width, int height)
|
void load_url_webview(char *url, int x, int y, int width, int height)
|
||||||
float ios_uiscreen_get_scale()
|
float ios_uiscreen_get_scale()
|
||||||
int ios_uiscreen_get_dpi()
|
int ios_uiscreen_get_dpi()
|
||||||
padding ios_get_safe_area()
|
padding ios_get_safe_area()
|
||||||
|
@ -33,11 +33,11 @@ cdef void _send_email_done(char *status, void *data):
|
||||||
#Support for iOS webview
|
#Support for iOS webview
|
||||||
#
|
#
|
||||||
class IOSWebView(object):
|
class IOSWebView(object):
|
||||||
def open(self, url, width, height):
|
def open(self, url, x, y, width, height):
|
||||||
open_url_wbv(url, width, height)
|
open_url_wbv(url, x, y, width, height)
|
||||||
|
|
||||||
|
|
||||||
def open_url_wbv(url, width, height):
|
def open_url_wbv(url, x, y, width, height):
|
||||||
'''
|
'''
|
||||||
OPEN URL in webview
|
OPEN URL in webview
|
||||||
|
|
||||||
|
@ -55,9 +55,9 @@ def open_url_wbv(url, width, height):
|
||||||
|
|
||||||
import ios
|
import ios
|
||||||
url = "http://www.google.com"
|
url = "http://www.google.com"
|
||||||
ios.IOSWebView().open(url, width, height)
|
ios.IOSWebView().open(url, x, y, width, height)
|
||||||
'''
|
'''
|
||||||
load_url_webview(url, width, height)
|
load_url_webview(url, x, y, width, height)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Support for webbrowser module
|
# Support for webbrowser module
|
||||||
|
@ -217,6 +217,7 @@ def get_safe_area():
|
||||||
'''
|
'''
|
||||||
return ios_get_safe_area()
|
return ios_get_safe_area()
|
||||||
|
|
||||||
|
|
||||||
from pyobjus import autoclass, selector, protocol
|
from pyobjus import autoclass, selector, protocol
|
||||||
from pyobjus.protocols import protocols
|
from pyobjus.protocols import protocols
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,10 @@ void ios_open_url(char *url)
|
||||||
/*
|
/*
|
||||||
* Webview support
|
* Webview support
|
||||||
*/
|
*/
|
||||||
void load_url_webview(char *url, int width, int height)
|
void load_url_webview(char *url, int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
NSString *nsurl = [NSString stringWithCString:(char *)url encoding:NSUTF8StringEncoding];
|
NSString *nsurl = [NSString stringWithCString:(char *)url encoding:NSUTF8StringEncoding];
|
||||||
WKWebView *webView = [[WKWebView alloc] initWithFrame: CGRectMake(0, 0, width, height)];
|
WKWebView *webView = [[WKWebView alloc] initWithFrame: CGRectMake(x, y, width, height)];
|
||||||
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
|
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
|
||||||
UIView *view = [window.rootViewController view];
|
UIView *view = [window.rootViewController view];
|
||||||
[view addSubview:webView];
|
[view addSubview:webView];
|
||||||
|
|
|
@ -106,41 +106,4 @@ int ios_send_email(char *subject, char *text, char *mimetype, char *filename,
|
||||||
[controller release];
|
[controller release];
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float ios_uiscreen_get_scale() {
|
|
||||||
float scale = 1.0;
|
|
||||||
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
|
|
||||||
scale = [[UIScreen mainScreen] scale];
|
|
||||||
};
|
|
||||||
return scale;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ios_uiscreen_get_dpi() {
|
|
||||||
float scale = ios_uiscreen_get_scale();
|
|
||||||
float dpi = 160 * scale;
|
|
||||||
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
|
||||||
dpi = 132 * scale;
|
|
||||||
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
|
|
||||||
dpi = 163 * scale;
|
|
||||||
}
|
|
||||||
return dpi;
|
|
||||||
}
|
|
||||||
|
|
||||||
padding ios_get_safe_area() {
|
|
||||||
padding safearea;
|
|
||||||
if (@available(iOS 11.0, *)){
|
|
||||||
UIWindow *window = UIApplication.sharedApplication.windows[0];
|
|
||||||
safearea.top = window.safeAreaInsets.top;
|
|
||||||
safearea.bottom = window.safeAreaInsets.bottom;
|
|
||||||
safearea.left = window.safeAreaInsets.left;
|
|
||||||
safearea.right = window.safeAreaInsets.right;
|
|
||||||
} else {
|
|
||||||
safearea.top = 0;
|
|
||||||
safearea.bottom = 0;
|
|
||||||
safearea.left = 0;
|
|
||||||
safearea.right = 0;
|
|
||||||
}
|
|
||||||
return safearea;
|
|
||||||
}
|
}
|
163
recipes/ios/src/ios_utils.m
Normal file
163
recipes/ios/src/ios_utils.m
Normal file
|
@ -0,0 +1,163 @@
|
||||||
|
/*
|
||||||
|
* iOS utils
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <sys/utsname.h>
|
||||||
|
#include "ios_wrapper.h"
|
||||||
|
|
||||||
|
|
||||||
|
float ios_uiscreen_get_scale() {
|
||||||
|
float scale = 1.0;
|
||||||
|
if ([[UIScreen mainScreen] respondsToSelector:@selector(nativeScale)]) {
|
||||||
|
scale = [[UIScreen mainScreen] nativeScale];
|
||||||
|
};
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ios_uiscreen_get_dpi() {
|
||||||
|
/*
|
||||||
|
* dpi function from src/video/uikit/SDL_uikitmodes.m (SDL2)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A well up to date list of device info can be found here:
|
||||||
|
* https://github.com/lmirosevic/GBDeviceInfo/blob/master/GBDeviceInfo/GBDeviceInfo_iOS.m
|
||||||
|
*/
|
||||||
|
NSDictionary* devices = @{
|
||||||
|
@"iPhone1,1": @163,
|
||||||
|
@"iPhone1,2": @163,
|
||||||
|
@"iPhone2,1": @163,
|
||||||
|
@"iPhone3,1": @326,
|
||||||
|
@"iPhone3,2": @326,
|
||||||
|
@"iPhone3,3": @326,
|
||||||
|
@"iPhone4,1": @326,
|
||||||
|
@"iPhone5,1": @326,
|
||||||
|
@"iPhone5,2": @326,
|
||||||
|
@"iPhone5,3": @326,
|
||||||
|
@"iPhone5,4": @326,
|
||||||
|
@"iPhone6,1": @326,
|
||||||
|
@"iPhone6,2": @326,
|
||||||
|
@"iPhone7,1": @401,
|
||||||
|
@"iPhone7,2": @326,
|
||||||
|
@"iPhone8,1": @326,
|
||||||
|
@"iPhone8,2": @401,
|
||||||
|
@"iPhone8,4": @326,
|
||||||
|
@"iPhone9,1": @326,
|
||||||
|
@"iPhone9,2": @401,
|
||||||
|
@"iPhone9,3": @326,
|
||||||
|
@"iPhone9,4": @401,
|
||||||
|
@"iPhone10,1": @326,
|
||||||
|
@"iPhone10,2": @401,
|
||||||
|
@"iPhone10,3": @458,
|
||||||
|
@"iPhone10,4": @326,
|
||||||
|
@"iPhone10,5": @401,
|
||||||
|
@"iPhone10,6": @458,
|
||||||
|
@"iPhone11,2": @458,
|
||||||
|
@"iPhone11,4": @458,
|
||||||
|
@"iPhone11,6": @458,
|
||||||
|
@"iPhone11,8": @326,
|
||||||
|
@"iPhone12,1": @326,
|
||||||
|
@"iPhone12,3": @458,
|
||||||
|
@"iPhone12,5": @458,
|
||||||
|
@"iPad1,1": @132,
|
||||||
|
@"iPad2,1": @132,
|
||||||
|
@"iPad2,2": @132,
|
||||||
|
@"iPad2,3": @132,
|
||||||
|
@"iPad2,4": @132,
|
||||||
|
@"iPad2,5": @163,
|
||||||
|
@"iPad2,6": @163,
|
||||||
|
@"iPad2,7": @163,
|
||||||
|
@"iPad3,1": @264,
|
||||||
|
@"iPad3,2": @264,
|
||||||
|
@"iPad3,3": @264,
|
||||||
|
@"iPad3,4": @264,
|
||||||
|
@"iPad3,5": @264,
|
||||||
|
@"iPad3,6": @264,
|
||||||
|
@"iPad4,1": @264,
|
||||||
|
@"iPad4,2": @264,
|
||||||
|
@"iPad4,3": @264,
|
||||||
|
@"iPad4,4": @326,
|
||||||
|
@"iPad4,5": @326,
|
||||||
|
@"iPad4,6": @326,
|
||||||
|
@"iPad4,7": @326,
|
||||||
|
@"iPad4,8": @326,
|
||||||
|
@"iPad4,9": @326,
|
||||||
|
@"iPad5,1": @326,
|
||||||
|
@"iPad5,2": @326,
|
||||||
|
@"iPad5,3": @264,
|
||||||
|
@"iPad5,4": @264,
|
||||||
|
@"iPad6,3": @264,
|
||||||
|
@"iPad6,4": @264,
|
||||||
|
@"iPad6,7": @264,
|
||||||
|
@"iPad6,8": @264,
|
||||||
|
@"iPad6,11": @264,
|
||||||
|
@"iPad6,12": @264,
|
||||||
|
@"iPad7,1": @264,
|
||||||
|
@"iPad7,2": @264,
|
||||||
|
@"iPad7,3": @264,
|
||||||
|
@"iPad7,4": @264,
|
||||||
|
@"iPad7,5": @264,
|
||||||
|
@"iPad7,6": @264,
|
||||||
|
@"iPad7,11": @264,
|
||||||
|
@"iPad7,12": @264,
|
||||||
|
@"iPad8,1": @264,
|
||||||
|
@"iPad8,2": @264,
|
||||||
|
@"iPad8,3": @264,
|
||||||
|
@"iPad8,4": @264,
|
||||||
|
@"iPad8,5": @264,
|
||||||
|
@"iPad8,6": @264,
|
||||||
|
@"iPad8,7": @264,
|
||||||
|
@"iPad8,8": @264,
|
||||||
|
@"iPad11,1": @326,
|
||||||
|
@"iPad11,2": @326,
|
||||||
|
@"iPad11,3": @326,
|
||||||
|
@"iPad11,4": @326,
|
||||||
|
@"iPod1,1": @163,
|
||||||
|
@"iPod2,1": @163,
|
||||||
|
@"iPod3,1": @163,
|
||||||
|
@"iPod4,1": @326,
|
||||||
|
@"iPod5,1": @326,
|
||||||
|
@"iPod7,1": @326,
|
||||||
|
@"iPod9,1": @326,
|
||||||
|
};
|
||||||
|
struct utsname systemInfo;
|
||||||
|
uname(&systemInfo);
|
||||||
|
NSString* deviceName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
|
||||||
|
id foundDPI = devices[deviceName];
|
||||||
|
if (foundDPI) {
|
||||||
|
return (float)[foundDPI integerValue];
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Estimate the DPI based on the screen scale multiplied by the base DPI for the device
|
||||||
|
* type (e.g. based on iPhone 1 and iPad 1)
|
||||||
|
*/
|
||||||
|
float scale = ios_uiscreen_get_scale();
|
||||||
|
float dpi = 160 * scale;
|
||||||
|
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
||||||
|
dpi = 132 * scale;
|
||||||
|
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
|
||||||
|
dpi = 163 * scale;
|
||||||
|
}
|
||||||
|
return dpi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
padding ios_get_safe_area() {
|
||||||
|
padding safearea;
|
||||||
|
if (@available(iOS 11.0, *)){
|
||||||
|
UIWindow *window = UIApplication.sharedApplication.windows[0];
|
||||||
|
safearea.top = window.safeAreaInsets.top;
|
||||||
|
safearea.bottom = window.safeAreaInsets.bottom;
|
||||||
|
safearea.left = window.safeAreaInsets.left;
|
||||||
|
safearea.right = window.safeAreaInsets.right;
|
||||||
|
} else {
|
||||||
|
safearea.top = 0;
|
||||||
|
safearea.bottom = 0;
|
||||||
|
safearea.left = 0;
|
||||||
|
safearea.right = 0;
|
||||||
|
}
|
||||||
|
return safearea;
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ float ios_uiscreen_get_scale(void);
|
||||||
int ios_uiscreen_get_dpi(void);
|
int ios_uiscreen_get_dpi(void);
|
||||||
padding ios_get_safe_area(void);
|
padding ios_get_safe_area(void);
|
||||||
void ios_open_url(char *url);
|
void ios_open_url(char *url);
|
||||||
void load_url_webview(char *url, int width, int height);
|
void load_url_webview(char *url, int x, int y, int width, int height);
|
||||||
|
|
||||||
typedef void (*ios_send_email_cb)(char *, void *);
|
typedef void (*ios_send_email_cb)(char *, void *);
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ setup(name='ios',
|
||||||
version='1.0',
|
version='1.0',
|
||||||
ext_modules=[
|
ext_modules=[
|
||||||
Extension(
|
Extension(
|
||||||
'ios', ['ios.c', 'ios_mail.m', 'ios_browser.m'],
|
'ios', ['ios.c', 'ios_utils.m', 'ios_mail.m', 'ios_browser.m'],
|
||||||
libraries=[ ],
|
libraries=[ ],
|
||||||
library_dirs=[],
|
library_dirs=[],
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue