Max 5 API Reference
00001 /** 00002 @file 00003 uisimp - a very simple ui object - step 5 00004 00005 @ingroup examples 00006 */ 00007 00008 #include "ext.h" 00009 #include "ext_obex.h" 00010 #include "jpatcher_api.h" 00011 #include "jgraphics.h" 00012 00013 00014 t_class *s_uisimp_class = 0; 00015 00016 enum { 00017 EXAMP_SQUARE = 0, 00018 EXAMP_CIRCLE, 00019 EXAMP_ANGLE 00020 }; 00021 00022 typedef struct _uisimp 00023 { 00024 t_jbox j_box; 00025 long j_mouse_is_down; 00026 int j_mouse_counter; 00027 long j_inset; 00028 char j_reset; 00029 long j_shape; 00030 } t_uisimp; 00031 00032 void uisimp_assist(t_uisimp *x, void *b, long m, long a, char *s); 00033 t_uisimp* uisimp_new(t_symbol *s, long argc, t_atom *argv); 00034 void uisimp_int(t_uisimp *x, long n); 00035 void uisimp_free(t_uisimp *x); 00036 00037 void uisimp_paint(t_uisimp *x, t_object *view); 00038 00039 void uisimp_mousedrag(t_uisimp *x, t_object *patcherview, t_pt pt, long modifiers); 00040 void uisimp_mousedown(t_uisimp *x, t_object *patcherview, t_pt pt, long modifiers); 00041 void uisimp_mouseup(t_uisimp *x, t_object *patcherview, t_pt pt, long modifiers); 00042 void uisimp_getdrawparams(t_uisimp *x, t_object *patcherview, t_jboxdrawparams *params); 00043 00044 void uisimp_bang(t_uisimp *x); 00045 00046 int main(void) 00047 { 00048 t_class *c; 00049 00050 c = class_new("uisimp3", 00051 (method)uisimp_new, 00052 (method)uisimp_free, 00053 sizeof(t_uisimp), 00054 (method)NULL, 00055 A_GIMME, 00056 0L); 00057 00058 c->c_flags |= CLASS_FLAG_NEWDICTIONARY; 00059 00060 jbox_initclass(c, JBOX_COLOR | JBOX_FIXWIDTH | JBOX_FONTATTR); 00061 00062 class_addmethod(c, (method) uisimp_paint, "paint", A_CANT, 0); 00063 class_addmethod(c, (method) uisimp_int, "int", A_LONG, 0); 00064 00065 class_addmethod(c, (method) uisimp_mousedown, "mousedown", A_CANT, 0); 00066 class_addmethod(c, (method) uisimp_mousedrag, "mousedrag", A_CANT, 0); 00067 class_addmethod(c, (method) uisimp_mouseup, "mouseup", A_CANT, 0); 00068 class_addmethod(c, (method) uisimp_getdrawparams, "getdrawparams", A_CANT, 0); 00069 00070 class_addmethod(c, (method) uisimp_assist, "assist", A_CANT, 0); 00071 class_addmethod(c, (method) jbox_notify, "notify", A_CANT, 0); 00072 00073 CLASS_ATTR_DEFAULT(c, "patching_rect", 0, "0 0 50 50"); 00074 CLASS_ATTR_DEFAULT(c, "color", 0, "0.8 0.5 0.2 1"); 00075 00076 CLASS_ATTR_LONG(c,"inset",0, t_uisimp, j_inset); 00077 CLASS_ATTR_LABEL(c,"inset",0,"Filled Area Inset"); 00078 CLASS_ATTR_CATEGORY(c,"inset",0,"Tweaks"); 00079 CLASS_ATTR_DEFAULT_SAVE_PAINT(c,"inset",0,"3"); 00080 00081 CLASS_ATTR_CHAR(c,"reset",0, t_uisimp, j_reset); 00082 CLASS_ATTR_STYLE_LABEL(c,"reset",0,"onoff","Reset Counter on Click"); 00083 CLASS_ATTR_CATEGORY(c,"reset",0,"Tweaks"); 00084 CLASS_ATTR_DEFAULT_SAVE(c,"reset",0,"1"); 00085 00086 CLASS_ATTR_LONG(c,"shape",0, t_uisimp, j_shape); 00087 CLASS_ATTR_LABEL(c,"shape", 0, "Fill Shape"); 00088 CLASS_ATTR_CATEGORY(c,"shape",0,"Shape"); 00089 CLASS_ATTR_ENUMINDEX(c,"shape", 0, "Square Circle Angle"); 00090 CLASS_ATTR_DEFAULT_SAVE_PAINT(c,"shape",0,"0"); 00091 00092 s_uisimp_class = c; 00093 class_register(CLASS_BOX, s_uisimp_class); 00094 return 0; 00095 } 00096 00097 void uisimp_assist(t_uisimp *x, void *b, long m, long a, char *s) 00098 { 00099 if (m == ASSIST_INLET) 00100 sprintf(s,"bang Says \"bang\""); 00101 } 00102 00103 t_uisimp* uisimp_new(t_symbol *s, long argc, t_atom *argv) 00104 { 00105 t_uisimp* x = NULL; 00106 t_max_err err = MAX_ERR_GENERIC; 00107 t_dictionary *d; 00108 long flags; 00109 00110 if (!(d=object_dictionaryarg(argc,argv))) 00111 return NULL; 00112 00113 x = (t_uisimp*) object_alloc(s_uisimp_class); 00114 flags = 0 00115 | JBOX_DRAWFIRSTIN 00116 // | JBOX_NODRAWBOX 00117 | JBOX_DRAWINLAST 00118 | JBOX_TRANSPARENT 00119 // | JBOX_NOGROW 00120 // | JBOX_GROWY 00121 | JBOX_GROWBOTH 00122 // | JBOX_HILITE 00123 // | JBOX_BACKGROUND 00124 // | JBOX_TEXTFIELD 00125 | JBOX_DRAWBACKGROUND 00126 | JBOX_DEFAULTNAMES 00127 ; 00128 00129 err = jbox_new(&x->j_box, flags, argc, argv); 00130 00131 x->j_box.b_firstin = (t_object*) x; 00132 00133 attr_dictionary_process(x, d); 00134 jbox_ready(&x->j_box); 00135 00136 return x; 00137 } 00138 00139 void uisimp_int(t_uisimp *x, long n) 00140 { 00141 x->j_mouse_counter = n; 00142 jbox_redraw((t_jbox *)x); 00143 } 00144 00145 void uisimp_free(t_uisimp *x) 00146 { 00147 jbox_free(&x->j_box); 00148 } 00149 00150 void uisimp_paint(t_uisimp *x, t_object *view) 00151 { 00152 t_jgraphics *g; 00153 t_rect rect; 00154 t_jrgba rgba, textcolor; 00155 t_jfont *jf; 00156 t_jtextlayout *jtl; 00157 char text[16]; 00158 00159 g = (t_jgraphics*) patcherview_get_jgraphics(view); 00160 jbox_get_rect_for_view(&x->j_box.b_ob, view, &rect); 00161 00162 if (x->j_mouse_is_down) { 00163 jbox_get_color((t_object *)x, &rgba); 00164 jgraphics_set_source_jrgba(g, &rgba); 00165 } else 00166 jgraphics_set_source_rgba(g, 0, 0, 0, 1.0); 00167 //jgraphics_fill(g); 00168 // draw counter 00169 jf = jfont_create(jbox_get_fontname((t_object *)x)->s_name, jbox_get_font_slant((t_object *)x), jbox_get_font_weight((t_object *)x), jbox_get_fontsize((t_object *)x)); 00170 jtl = jtextlayout_create(); 00171 sprintf(text,"%d",x->j_mouse_counter); 00172 00173 jtextlayout_set(jtl, text, jf, 5, 5, rect.width - 10, rect.height- 10, JGRAPHICS_TEXT_JUSTIFICATION_CENTERED, JGRAPHICS_TEXTLAYOUT_NOWRAP); 00174 textcolor.red = textcolor.green = textcolor.blue = 1; 00175 textcolor.alpha = 1; 00176 jtextlayout_settextcolor(jtl, &textcolor); 00177 jtextlayout_draw(jtl, g); 00178 jtextlayout_destroy(jtl); 00179 jfont_destroy(jf); 00180 } 00181 00182 void uisimp_bang(t_uisimp *x) 00183 { 00184 object_post((t_object *)x, "bang!"); 00185 } 00186 00187 void uisimp_mousedrag(t_uisimp *x, t_object *patcherview, t_pt pt, long modifiers) 00188 { 00189 x->j_mouse_counter++; 00190 jbox_redraw((t_jbox *)x); 00191 } 00192 00193 void uisimp_mousedown(t_uisimp *x, t_object *patcherview, t_pt pt, long modifiers) 00194 { 00195 x->j_mouse_is_down = true; 00196 if (x->j_reset) 00197 x->j_mouse_counter = 0; 00198 jbox_redraw((t_jbox *)x); 00199 } 00200 00201 void uisimp_mouseup(t_uisimp *x, t_object *patcherview, t_pt pt, long modifiers) 00202 { 00203 x->j_mouse_is_down = false; 00204 jbox_redraw((t_jbox *)x); 00205 } 00206 00207 void uisimp_getdrawparams(t_uisimp *x, t_object *patcherview, t_jboxdrawparams *params) 00208 { 00209 params->d_bordercolor.alpha = 0; 00210 params->d_boxfillcolor.red = 0; 00211 params->d_boxfillcolor.green = 1; 00212 params->d_boxfillcolor.blue = 0; 00213 params->d_boxfillcolor.alpha = 0.5; 00214 } 00215
Copyright © 2008, Cycling '74