diff --git a/demo/apple/ZahnradBackend.h b/demo/apple/ZahnradBackend.h index 7a0a043..036e9ad 100644 --- a/demo/apple/ZahnradBackend.h +++ b/demo/apple/ZahnradBackend.h @@ -21,6 +21,8 @@ #import +#import "zahnrad.h" + #define SIMULATE_TOUCH 0 #if (TARGET_OS_IPHONE && (!TARGET_OS_TV)) || SIMULATE_TOUCH @@ -57,12 +59,6 @@ @end -struct zr_context; -struct zr_buffer; -struct zr_allocator; -struct zr_user_font; - - @interface ZahnradBackend (Adapter) @@ -75,3 +71,11 @@ struct zr_user_font; @end + +void zr_backend_show_keyboard(zr_hash hash, struct zr_rect bounds, struct zr_buffer* text); +void zr_backend_hide_keyboard(void); + +int zr_touch_edit_string(struct zr_context *ctx, zr_flags flags, char *text, zr_size *len, zr_size max, zr_filter filter, zr_hash unique_id); + + + diff --git a/demo/apple/ZahnradBackend.m b/demo/apple/ZahnradBackend.m index f86efe0..e51cac4 100644 --- a/demo/apple/ZahnradBackend.m +++ b/demo/apple/ZahnradBackend.m @@ -19,6 +19,8 @@ 3. This notice may not be removed or altered from any source distribution. */ +#import "ZahnradBackend.h" + #define MAX_VERTEX_MEMORY (512 * 1024) #define MAX_ELEMENT_MEMORY (128 * 1024) @@ -28,24 +30,18 @@ // #else does provide a generic version to start // your own project. + #if 1 +#if TARGET_OS_IPHONE + +#define zr_edit_string(_ct, _fl, _bu, _le, _ma, _fi) zr_touch_edit_string(_ct, _fl, _bu, _le, _ma, _fi, (zr_hash)__COUNTER__) + +#endif -#include -#include -#include -#include -#include -#include -#include "zahnrad.h" #include "../demo.c" -#undef MAX -#undef MIN - -#import "ZahnradBackend.h" - @implementation ZahnradBackend (Adapter) @@ -79,7 +75,6 @@ static struct demo gui; #import "ZahnradBackend.h" -#import "zahnrad.h" @implementation ZahnradBackend (Adapter) @@ -700,6 +695,9 @@ static void mem_free(zr_handle unused, void* ptr) @end +#undef zr_edit_string + + #if TARGET_OS_IPHONE @@ -726,10 +724,34 @@ void zr_backend_hide_keyboard(void) } +int zr_touch_edit_string(struct zr_context *ctx, zr_flags flags, char *text, zr_size *len, zr_size max, zr_filter filter, zr_hash unique_id) +{ + zr_flags state; + struct zr_rect bounds; + + zr_layout_peek(&bounds, ctx); + state = zr_edit_string(ctx, flags, text, len, max, filter); + if (state & ZR_EDIT_ACTIVATED) + { + struct zr_buffer buffer; + zr_buffer_init_fixed(&buffer, text, max); + buffer.allocated = *len; + + zr_backend_show_keyboard((zr_hash)unique_id, bounds, &buffer); + } + else if (state & ZR_EDIT_DEACTIVATED) + { + zr_backend_hide_keyboard(); + } + + return state; +} + + #else -void zr_backend_show_keyboard(zr_hash zrHash, struct zr_rect zrBounds) +void zr_backend_show_keyboard(zr_hash zrHash, struct zr_rect zrBounds, struct zr_buffer* zrText) { } @@ -739,6 +761,12 @@ void zr_backend_hide_keyboard(void) } +int zr_touch_edit_string(struct zr_context *ctx, zr_flags flags, char *text, zr_size *len, zr_size max, zr_filter filter, zr_hash unique_id) +{ + return zr_edit_string(ctx, flags, text, len, max, filter); +} + + #endif diff --git a/demo/demo.c b/demo/demo.c index 28ada62..909092b 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -1,8 +1,14 @@ #include "limits.h" -#define MIN(a,b) ((a) < (b) ? (a) : (b)) -#define MAX(a,b) ((a) < (b) ? (b) : (a)) +#ifndef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif +#ifndef MAX +#define MAX(a,b) ((a) < (b) ? (b) : (a)) +#endif +#ifndef CLAMP #define CLAMP(i,v,x) (MAX(MIN(v,x), i)) +#endif #define LEN(a) (sizeof(a)/sizeof(a)[0]) #define UNUSED(a) ((void)(a))