Overview
Comment: | Implement more of the class/image select menu |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
39715134ca1367a36025a9201dd1445f |
User & Date: | user on 2018-10-31 23:35:01 |
Other Links: | manifest | tags |
Context
2019-02-10
| ||
18:10 | Allow left and right arrow keys in class select menu to select which image check-in: 2da745c85b user: user tags: trunk | |
2018-10-31
| ||
23:35 | Implement more of the class/image select menu check-in: 39715134ca user: user tags: trunk | |
2018-10-28
| ||
18:51 | Start implementing class/image selection menu check-in: 68e715091a user: user tags: trunk | |
Changes
Modified edit.c from [928ca89952] to [ac0c1161ab].
︙ | ︙ | |||
15 16 17 18 19 20 21 | typedef struct { Uint16 class; Uint8 img,dir; Value misc1,misc2,misc3; } MRU; | > | | 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | typedef struct { Uint16 class; Uint8 img,dir; Value misc1,misc2,misc3; } MRU; #define MRUCOUNT 32 static MRU mru[MRUCOUNT]; static int curmru; static void redraw_editor(void) { char buf[32]; SDL_Rect r; int x,y; r.x=r.y=0; |
︙ | ︙ | |||
69 70 71 72 73 74 75 | draw_text(8,32,buf,0xF0,0xFD); draw_text(24,32,"x",0xF0,0xF5); x=x>=left_margin?(x-left_margin)/picture_size+1:0; y=y/picture_size+1; if(x>0 && y>0 && x<=pfwidth && y<=pfheight) snprintf(buf,8,"(%2d,%2d)",x,y); else strcpy(buf," "); draw_text(0,40,buf,0xF0,0xF3); | | | | | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | draw_text(8,32,buf,0xF0,0xFD); draw_text(24,32,"x",0xF0,0xF5); x=x>=left_margin?(x-left_margin)/picture_size+1:0; y=y/picture_size+1; if(x>0 && y>0 && x<=pfwidth && y<=pfheight) snprintf(buf,8,"(%2d,%2d)",x,y); else strcpy(buf," "); draw_text(0,40,buf,0xF0,0xF3); for(x=0;x<MRUCOUNT;x++) { y=picture_size*x+56; if(y+picture_size>screen->h) break; if(x==curmru) draw_text(0,y,">",0xF0,0xFE); if(mru[x].misc1.u|mru[x].misc1.t|mru[x].misc2.u|mru[x].misc2.t|mru[x].misc3.u|mru[x].misc3.t) draw_text(picture_size+16,y,"*",0xF0,0xFB); } SDL_UnlockSurface(screen); r.w=r.h=picture_size; r.x=8; for(x=0;x<MRUCOUNT;x++) { y=picture_size*x+56; if(y+picture_size>screen->h) break; if(mru[x].class) { r.y=y; SDL_FillRect(screen,&r,0x00); draw_picture(8,y,classes[mru[x].class]->images[mru[x].img]&0x7FFF); } } SDL_Flip(screen); } static void show_mouse_xy(SDL_Event*ev) { char buf[32]; |
︙ | ︙ | |||
122 123 124 125 126 127 128 129 130 131 132 133 134 135 | sqlite3_str_appendall(m,basefilename); sqlite3_str_appendall(m,r+c+1); } s=sqlite3_str_finish(m); if(s) SDL_WM_SetCaption(s,s); else SDL_WM_SetCaption("Free Hero Mesh","Free Hero Mesh"); sqlite3_free(s); } static void class_image_select(void) { SDL_Event ev; SDL_Rect r; int clscroll=0; int imgscroll=0; int clcount=0; | > > > > > > > > > > | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | sqlite3_str_appendall(m,basefilename); sqlite3_str_appendall(m,r+c+1); } s=sqlite3_str_finish(m); if(s) SDL_WM_SetCaption(s,s); else SDL_WM_SetCaption("Free Hero Mesh","Free Hero Mesh"); sqlite3_free(s); } static void add_mru(int cl,int img) { int i; for(i=0;i<MRUCOUNT-1;i++) if(mru[i].class==cl && mru[i].img==img) break; memmove(mru+1,mru,i*sizeof(MRU)); mru[0].class=cl; mru[0].img=img; mru[0].dir=0; mru[0].misc1=mru[0].misc2=mru[0].misc3=NVALUE(0); } static void class_image_select(void) { SDL_Event ev; SDL_Rect r; int clscroll=0; int imgscroll=0; int clcount=0; |
︙ | ︙ | |||
212 213 214 215 216 217 218 | if(i<0 || i>=clcount) break; namei=0; cl=cllist[i]; setclass: imgscroll=imgcount=0; for(i=0;i<classes[cl]->nimages;i++) if(classes[cl]->images[i]&0x8000) imglist[imgcount++]=i; img=*imglist; | < < > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 | if(i<0 || i>=clcount) break; namei=0; cl=cllist[i]; setclass: imgscroll=imgcount=0; for(i=0;i<classes[cl]->nimages;i++) if(classes[cl]->images[i]&0x8000) imglist[imgcount++]=i; img=*imglist; } else { i=imgscroll+ev.button.y/picture_size; if(i<0 || i>=imgcount) break; img=imglist[i]; } if(ev.button.button==3 || ev.button.button==2) add_mru(cl,img); if(ev.button.button==2) return; goto redraw; case SDL_KEYDOWN: switch(ev.key.keysym.sym) { case SDLK_HOME: clscroll=0; goto redraw; case SDLK_END: clscroll=clcount-screen->h/8; goto redraw; case SDLK_PAGEDOWN: clscroll+=screen->h/8; goto redraw; case SDLK_PAGEUP: clscroll-=screen->h/8; goto redraw; case SDLK_ESCAPE: return; case SDLK_CLEAR: case SDLK_DELETE: namei=0; goto redraw; case SDLK_BACKSPACE: if(namei) --namei; goto redraw; case SDLK_TAB: if(!cl) break; strncpy(name,classes[cl]->name,254); for(j=0;j<clcount;j++) if(cl==cllist[j]) break; // Increase namei according to all directly following letters that are matching while(namei<253 && classes[cl]->name[namei]) { for(i=j+1;i<clcount;i++) { if(sqlite3_strnicmp(name,classes[cllist[i]]->name,namei)) { // The first part of the name doesn't match; all others did, so accept the next letter. break; } else { if(sqlite3_strnicmp(classes[cl]->name+namei,classes[cllist[i]]->name+namei,1)) { // The first part of the name matches but the next letter doesn't. goto redraw; } else { // The first part and next letter are both matching; see if the next one also matches. continue; } } } ++namei; } goto redraw; default: j=ev.key.keysym.unicode; if(j=='$' || j==21) { namei=0; goto redraw; } if(j>32 && j<127 && namei<254) { name[namei++]=j; for(i=0;i<clcount;i++) { if(!sqlite3_strnicmp(name,classes[cllist[i]]->name,namei)) { ev.button.button=1; cl=cllist[i]; goto setclass; |
︙ | ︙ |