From cda38a853c32220ed33e48ff03cadb72336dc77d Mon Sep 17 00:00:00 2001 From: Martins Mozeiko Date: Wed, 24 Aug 2016 19:16:34 -0700 Subject: [PATCH] Fixed issues with GDI+ demo - font handling and typo for VK_END handling. --- demo/gdip/nuklear_gdip.h | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/demo/gdip/nuklear_gdip.h b/demo/gdip/nuklear_gdip.h index 7f3d6c8..0b620ed 100644 --- a/demo/gdip/nuklear_gdip.h +++ b/demo/gdip/nuklear_gdip.h @@ -225,7 +225,6 @@ GdipCreateFont( INT style, Unit unit, GpFont **font - struct nk_user_font handle; ); GpStatus WINGDIPAPI @@ -343,6 +342,11 @@ GdipMeasureString( GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics *graphics, TextRenderingHint mode); +struct GdipFont +{ + struct nk_user_font nk; + GpFont* handle; +}; static struct { ULONG_PTR token; @@ -531,7 +535,7 @@ nk_gdip_draw_text(short x, short y, unsigned short w, unsigned short h, GdipSetSolidFillColor(gdip.brush, convert_color(cbg)); GdipFillRectangleI(gdip.memory, gdip.brush, x, y, w, h); GdipSetSolidFillColor(gdip.brush, convert_color(cfg)); - GdipDrawString(gdip.memory, wstr, wsize, (GpFont *)font, &layout, gdip.format, gdip.brush); + GdipDrawString(gdip.memory, wstr, wsize, font->handle, &layout, gdip.format, gdip.brush); } static void @@ -549,7 +553,7 @@ nk_gdip_blit(GpGraphics *graphics) GdipFont* nk_gdipfont_create(const char *name, int size) { - GpFont* font; + GdipFont *font = (GdipFont*)calloc(1, sizeof(GdipFont)); GpFontFamily *family; int wsize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0); @@ -558,16 +562,16 @@ nk_gdipfont_create(const char *name, int size) wname[wsize] = 0; GdipCreateFontFamilyFromName(wname, NULL, &family); - GdipCreateFont(family, (REAL)size, FontStyleRegular, UnitPixel, &font); + GdipCreateFont(family, (REAL)size, FontStyleRegular, UnitPixel, &font->handle); GdipDeleteFontFamily(family); - return (GdipFont *)font; + return font; } static float nk_gdipfont_get_text_width(nk_handle handle, float height, const char *text, int len) { - GpFont *font = (GpFont *)handle.ptr; + GdipFont *font = (GdipFont *)handle.ptr; RectF layout = { 0.0f, 0.0f, 65536.0f, 65536.0f }; RectF bbox; int wsize; @@ -580,7 +584,7 @@ nk_gdipfont_get_text_width(nk_handle handle, float height, const char *text, int wstr = (WCHAR*)_alloca(wsize * sizeof(wchar_t)); MultiByteToWideChar(CP_UTF8, 0, text, len, wstr, wsize); - GdipMeasureString(gdip.memory, wstr, wsize, font, &layout, gdip.format, &bbox, NULL, NULL); + GdipMeasureString(gdip.memory, wstr, wsize, font->handle, &layout, gdip.format, &bbox, NULL, NULL); return bbox.Width; } @@ -588,7 +592,8 @@ void nk_gdipfont_del(GdipFont *font) { if(!font) return; - GdipDeleteFont((GpFont *)font); + GdipDeleteFont(font->handle); + free(font); } static void @@ -706,9 +711,9 @@ nk_gdip_init(HWND hwnd, unsigned int width, unsigned int height) NK_API void nk_gdip_set_font(GdipFont *gdipfont) { - struct nk_user_font *font = &gdipfont->handle; + struct nk_user_font *font = &gdipfont->nk; font->userdata = nk_handle_ptr(gdipfont); - GdipGetFontSize((GpFont *)gdipfont, &font->height); + GdipGetFontSize(gdipfont->handle, &font->height); font->width = nk_gdipfont_get_text_width; nk_style_set_font(&gdip.ctx, font); } @@ -796,7 +801,7 @@ nk_gdip_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam) return 1; case VK_END: - nk_input_key(&gdi.ctx, NK_KEY_TEXT_END, down); + nk_input_key(&gdip.ctx, NK_KEY_TEXT_END, down); nk_input_key(&gdip.ctx, NK_KEY_SCROLL_END, down); return 1;