From 5a9e5277c9588627be7522e480ab7be263958823 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 16 Aug 2002 19:57:26 +0000 Subject: [PATCH] add the draw api interface with a QPic class --- ruamoko/include/Makefile.am | 2 +- ruamoko/include/draw.h | 39 ++++++++++++++ ruamoko/lib/Makefile.am | 2 +- ruamoko/lib/draw.r | 103 ++++++++++++++++++++++++++++++++++++ 4 files changed, 144 insertions(+), 2 deletions(-) create mode 100644 ruamoko/include/draw.h create mode 100644 ruamoko/lib/draw.r diff --git a/ruamoko/include/Makefile.am b/ruamoko/include/Makefile.am index e63ca3c82..162d6ceb0 100644 --- a/ruamoko/include/Makefile.am +++ b/ruamoko/include/Makefile.am @@ -5,4 +5,4 @@ include_HEADERS = \ object.h physics.h qw_message.h qw_physics.h qw_sys.h sound.h \ string.h system.h \ \ - inputline.h point.h + draw.h inputline.h point.h diff --git a/ruamoko/include/draw.h b/ruamoko/include/draw.h new file mode 100644 index 000000000..d020732f7 --- /dev/null +++ b/ruamoko/include/draw.h @@ -0,0 +1,39 @@ +#ifndef __ruamoko_draw_h +#define __ruamoko_draw_h + +#include "object.h" + +struct _qpic_t = { + integer width; + integer height; +}; +typedef _qpic_t [] qpic_t; + +@extern qpic_t (string name, integer alpha) Draw_CachePic; + +@extern void (integer x, integer y, qpic_t pic) Draw_Pic; +@extern void (integer x, integer y, qpic_t pic, integer srcx, integer srcy, integer width, integer height) Draw_SubPic; +@extern void (integer x, integer y, qpic_t pic) Draw_CenterPic; + +@extern void (integer x, integer y, integer chr) Draw_Character; +@extern void (integer x, integer y, string text) Draw_String; +@extern void (integer x, integer y, string text, integer n) Draw_nString; +@extern void (integer x, integer y, string text) Draw_AltString; +@extern void (integer x, integer y, integer w, integer h, integer c) Draw_Fill; +@extern void (integer x, integer y, integer width, integer lines) text_box; + +@interface QPic : Object +{ + string name; + _qpic_t size; + BOOL centered; +} +-initName:(string)n; +-initName:(string)n Centered:(BOOL)c; +-draw:(integer)x :(integer)y; +-draw:(integer)x :(integer)y :(integer)srcx :(integer)srcy :(integer)width :(integer)height; +-(integer)width; +-(integer)height; +@end + +#endif//__ruamoko_draw_h diff --git a/ruamoko/lib/Makefile.am b/ruamoko/lib/Makefile.am index e20f167a2..aa0e28f2c 100644 --- a/ruamoko/lib/Makefile.am +++ b/ruamoko/lib/Makefile.am @@ -24,7 +24,7 @@ libr_a_SOURCES=\ libr_a_AR=$(PAK) -cf libgui_a_SOURCES=\ - inputline.r point.r + draw.r inputline.r point.r libgui_a_AR=$(PAK) -cf CLEANFILES = *.qfo diff --git a/ruamoko/lib/draw.r b/ruamoko/lib/draw.r new file mode 100644 index 000000000..b4066b520 --- /dev/null +++ b/ruamoko/lib/draw.r @@ -0,0 +1,103 @@ +#include "draw.h" + +qpic_t (string name, integer alpha) Draw_CachePic = #0; + +void (integer x, integer y, qpic_t pic) Draw_Pic = #0; +void (integer x, integer y, qpic_t pic, integer srcx, integer srcy, integer width, integer height) Draw_SubPic = #0; +void (integer x, integer y, qpic_t pic) Draw_CenterPic = #0; + +void (integer x, integer y, integer chr) Draw_Character = #0; +void (integer x, integer y, string text) Draw_String = #0; +void (integer x, integer y, string text, integer n) Draw_nString = #0; +void (integer x, integer y, string text) Draw_AltString = #0; +void (integer x, integer y, integer w, integer h, integer c) Draw_Fill = #0; + +void (integer x, integer y, integer width, integer lines) text_box = +{ + local integer cx, cy, n; + local qpic_t p; + + cx = x; + cy = y; + p = Draw_CachePic ("gfx/box_tl.lmp", 1); + Draw_Pic (cx, cy, p); + p = Draw_CachePic ("gfx/box_ml.lmp", 1); + for (n = 0; n < lines; n++) { + cy += 8; + Draw_Pic (cx, cy, p); + } + p = Draw_CachePic ("gfx/box_bl.lmp", 1); + Draw_Pic (cx, cy + 8, p); + + cx += 8; + while (width > 0) { + cy = y; + p = Draw_CachePic ("gfx/box_tm.lmp", 1); + Draw_Pic (cx, cy, p); + p = Draw_CachePic ("gfx/box_mm.lmp", 1); + for (n = 0; n < lines; n++) { + cy += 8; + if (n == 1) + p = Draw_CachePic ("gfx/box_mm2.lmp", 1); + Draw_Pic (cx, cy, p); + } + p = Draw_CachePic ("gfx/box_bm.lmp", 1); + Draw_Pic (cx, cy + 8, p); + width -= 2; + cx += 16; + } + + cy = y; + p = Draw_CachePic ("gfx/box_tr.lmp", 1); + Draw_Pic (cx, cy, p); + p = Draw_CachePic ("gfx/box_mr.lmp", 1); + for (n = 0; n < lines; n++) { + cy += 8; + Draw_Pic (cx, cy, p); + } + p = Draw_CachePic ("gfx/box_br.lmp", 1); + Draw_Pic (cx, cy + 8, p); +}; + +@implementation QPic + +-initName:(string)n +{ + return [self initName:n Centered:NO]; +} + +-initName:(string)n Centered:(BOOL)c +{ + [super init]; + name = n; + local qpic_t pic = Draw_CachePic (name, 1); + size.width = pic.width; + size.height = pic.height; + return self; +} + +-draw:(integer)x :(integer)y +{ + local qpic_t pic = Draw_CachePic (name, 1); + Draw_Pic (x, y, pic); + return self; +} + +-draw:(integer)x :(integer)y :(integer)srcx :(integer)srcy :(integer)width :(integer)height +{ + local qpic_t pic = Draw_CachePic (name, 1); + Draw_SubPic (x, y, pic, srcx, srcy, width, height); + return self; +} + +-(integer)width +{ + return size.width; +} + +-(integer)height +{ + return size.height; +} + +@end