--- deliantra/Deliantra-Client/Client.xs 2007/07/19 14:54:50 1.204 +++ deliantra/Deliantra-Client/Client.xs 2007/07/21 16:07:53 1.208 @@ -435,6 +435,46 @@ #define SDLK_MODIFIER_MIN 300 #define SDLK_MODIFIER_MAX 314 +/******************************************************************************/ + +static int +within_widget (SV *widget, NV x, NV y) +{ + HV *self; + SV **svp; + NV wx, ww, wy, wh; + + if (!SvROK (widget)) + return 0; + + self = (HV *)SvRV (widget); + + if (SvTYPE (self) != SVt_PVHV) + return 0; + + svp = hv_fetch (self, "y", 1, 0); wy = svp ? SvNV (*svp) : 0.; + if (y < wy) + return 0; + + svp = hv_fetch (self, "h", 1, 0); wh = svp ? SvNV (*svp) : 0.; + if (y >= wy + wh) + return 0; + + svp = hv_fetch (self, "x", 1, 0); wx = svp ? SvNV (*svp) : 0.; + if (x < wx) + return 0; + + svp = hv_fetch (self, "w", 1, 0); ww = svp ? SvNV (*svp) : 0.; + if (x >= wx + ww) + return 0; + + svp = hv_fetch (self, "can_events", sizeof ("can_events") - 1, 0); + if (!svp || !SvTRUE (*svp)) + return 0; + + return 1; +} + MODULE = CFPlus PACKAGE = CFPlus PROTOTYPES: ENABLE @@ -935,6 +975,8 @@ MODULE = CFPlus PACKAGE = CFPlus::Font +PROTOTYPES: DISABLE + CFPlus::Font new_from_file (SV *class, char *path, int id = 0) CODE: @@ -954,13 +996,17 @@ void make_default (CFPlus::Font self) + PROTOTYPE: $ CODE: default_font = self; MODULE = CFPlus PACKAGE = CFPlus::Layout +PROTOTYPES: DISABLE + void reset_glyph_cache () + PROTOTYPE: CODE: tc_clear (); @@ -1257,6 +1303,8 @@ MODULE = CFPlus PACKAGE = CFPlus::Texture +PROTOTYPES: ENABLE + int minpot (int n) void @@ -1343,6 +1391,8 @@ MODULE = CFPlus PACKAGE = CFPlus::Map +PROTOTYPES: DISABLE + CFPlus::Map new (SV *class) CODE: @@ -2183,6 +2233,8 @@ MODULE = CFPlus PACKAGE = CFPlus::MixChunk +PROTOTYPES: DISABLE + CFPlus::MixChunk new_from_file (SV *class, char *path) CODE: @@ -2213,6 +2265,7 @@ int volume (int volume = -1) + PROTOTYPE: ;$ CODE: RETVAL = Mix_VolumeMusic (volume); OUTPUT: @@ -2253,6 +2306,8 @@ MODULE = CFPlus PACKAGE = CFPlus::OpenGL +PROTOTYPES: ENABLE + BOOT: { HV *stash = gv_stashpv ("CFPlus::OpenGL", 1); @@ -2277,6 +2332,7 @@ const_iv (GL_RESCALE_NORMAL), const_iv (GL_FRONT), const_iv (GL_BACK), + const_iv (GL_AUX0), const_iv (GL_AND), const_iv (GL_ONE), const_iv (GL_ZERO), @@ -2332,6 +2388,7 @@ const_iv (GL_CONVOLUTION_2D), const_iv (GL_CONVOLUTION_BORDER_MODE), const_iv (GL_CONSTANT_BORDER), + const_iv (GL_POINTS), const_iv (GL_LINES), const_iv (GL_LINE_STRIP), const_iv (GL_LINE_LOOP), @@ -2340,8 +2397,15 @@ const_iv (GL_TRIANGLES), const_iv (GL_TRIANGLE_STRIP), const_iv (GL_TRIANGLE_FAN), + const_iv (GL_POLYGON), const_iv (GL_PERSPECTIVE_CORRECTION_HINT), + const_iv (GL_POINT_SMOOTH_HINT), + const_iv (GL_LINE_SMOOTH_HINT), + const_iv (GL_POLYGON_SMOOTH_HINT), + const_iv (GL_GENERATE_MIPMAP_HINT), const_iv (GL_FASTEST), + const_iv (GL_DONT_CARE), + const_iv (GL_NICEST), const_iv (GL_V2F), const_iv (GL_V3F), const_iv (GL_T2F_V3F), @@ -2438,6 +2502,8 @@ # near_ and far_ are due to microsofts buggy "c" compiler void glOrtho (double left, double right, double bottom, double top, double near_, double far_) +PROTOTYPES: DISABLE + void glViewport (int x, int y, int width, int height) void glScissor (int x, int y, int width, int height) @@ -2454,12 +2520,7 @@ CODE: glRotatef (angle, x, y, z); -void glBegin (int mode) - -void glEnd () - void glColor (float r, float g, float b, float a = 1.0) - PROTOTYPE: @ ALIAS: glColor_premultiply = 1 CODE: @@ -2472,12 +2533,6 @@ // microsoft visual "c" rounds instead of truncating... glColor4f (r, g, b, a); -void glInterleavedArrays (int format, int stride, char *data) - -void glDrawElements (int mode, int count, int type, char *indices) - -# 1.2 void glDrawRangeElements (int mode, int start, int end - void glRasterPos (float x, float y, float z = 0.) CODE: glRasterPos3f (0, 0, z); @@ -2491,6 +2546,22 @@ CODE: glTexCoord2f (s, t); +PROTOTYPES: ENABLE + +void glBegin (int mode) + +void glEnd () + +void glPointSize (GLfloat size) + +void glLineWidth (GLfloat width) + +void glInterleavedArrays (int format, int stride, char *data) + +void glDrawElements (int mode, int count, int type, char *indices) + +# 1.2 void glDrawRangeElements (int mode, int start, int end + void glTexEnv (int target, int pname, float param) CODE: glTexEnvf (target, pname, param); @@ -2552,3 +2623,15 @@ void glCallList (int list) +MODULE = CFPlus PACKAGE = CFPlus::UI::Base + +PROTOTYPES: DISABLE + +void +find_widget (SV *widget, NV x, NV y) + PPCODE: +{ + if (within_widget (widget, x, y)) + XPUSHs (widget); +} +