/* * Attach, or possibly reattach, to window. * If reattaching, maintain value of screen pointer. */ int gengetwindow(Display *d, char *winname, Image **winp, Screen **scrp, int ref) { int n, fd; char buf[64+1]; Image *image; Rectangle r; fd = open(winname, OREAD); if(fd<0 || (n=read(fd, buf, sizeof buf-1))<=0){ if((image=d->image) == nil){ fprint(2, "gengetwindow: %r\n"); *winp = nil; d->screenimage = nil; return -1; } strcpy(buf, "noborder"); }else{ close(fd); buf[n] = '\0'; if(*winp != nil){ _freeimage1(*winp); freeimage((*scrp)->image); freescreen(*scrp); *scrp = nil; } image = namedimage(d, buf); if(image == 0){ fprint(2, "namedimage %s failed: %r\n", buf); *winp = nil; d->screenimage = nil; return -1; } assert(image->chan != 0); } d->screenimage = image; *scrp = allocscreen(image, d->white, 0); if(*scrp == nil){ freeimage(d->screenimage); *winp = nil; d->screenimage = nil; return -1; } r = image->r; if(strncmp(buf, "noborder", 8) != 0) r = insetrect(image->r, Borderwidth); *winp = _allocwindow(*winp, *scrp, r, ref, DWhite); if(*winp == nil){ freescreen(*scrp); *scrp = nil; freeimage(image); d->screenimage = nil; return -1; } d->screenimage = *winp; assert((*winp)->chan != 0); return 1; }
void termMenu() { freescreen(&Source); Source = NULL; freescreen(&Scaler); Scaler = NULL; freescreen(&Screen); Screen = NULL; control_exit(); }
void resize(void) { Rectangle old, r; int dxo, dyo, dxn, dyn; Win *w; old = screen->r; dxo = Dx(old); dyo = Dy(old); if(getwindow(display, Refnone) < 0) sysfatal("resize failed: %r"); dxn = Dx(screen->r); dyn = Dy(screen->r); freescreen(scr); scr = allocscreen(screen, display->white, 0); if(scr == nil) sysfatal("allocscreen: %r"); for(w = wlist.next; w != &wlist; w = w->next){ r = rectsubpt(w->entire, old.min); r.min.x = muldiv(r.min.x, dxn, dxo); r.max.x = muldiv(r.max.x, dxn, dxo); r.min.y = muldiv(r.min.y, dyn, dyo); r.max.y = muldiv(r.max.y, dyn, dyo); w->entire = rectaddpt(r, screen->r.min); w->inner = insetrect(w->entire, BORDSIZ); freeimage(w->im); w->im = allocwindow(scr, w->entire, Refbackup, 0); if(w->im == nil) sysfatal("allocwindow: %r"); draw(w->im, w->inner, w->tab->cols[BACK], nil, ZP); border(w->im, w->entire, BORDSIZ, w->tab->cols[w == actw ? BORD : DISB], ZP); w->tab->draw(w); } }
// Delete a screen. Return status. int deleteScreen(Value *rp,int n) { EScreen *scrp; // Get the number of the screen to delete. if(n == INT_MIN && !getnum(text243,&n)) // "Delete screen" return rc.status; // Make sure it exists. if(!sfind((ushort) n,NULL,&scrp)) return rcset(FAILURE,0,text240,n); // "No such screen '%d'" // It can't be current. if(scrp == cursp) return rcset(FAILURE,0,text241); // "Screen is being displayed" // Everything's cool ... nuke it. if(unlistscreen(scrp) != SUCCESS) return rc.status; freescreen(scrp); return rcset(SUCCESS,0,text178,n); // "Deleted screen %d" }
void drawMenu() { s_screen *Image = NULL; char listing[45] = {""}; int list = 0; int shift = 0; int colors = 0; int clipX=0, clipY=0; copyScreens(Source); if(dListTotal < 1) printText((isWide ? 30 : 8), (isWide ? 33 : 24), RED, 0, 0, "No Mods In Paks Folder!"); for(list=0; list<dListTotal; list++) { if(list<18) { shift = 0; colors = GRAY; strncpy(listing, "", (isWide ? 44 : 28)); if(strlen(filelist[list+dListScrollPosition].filename)-4 < (isWide ? 44 : 28)) strncpy(listing, filelist[list+dListScrollPosition].filename, strlen(filelist[list+dListScrollPosition].filename)-4); if(strlen(filelist[list+dListScrollPosition].filename)-4 > (isWide ? 44 : 28)) strncpy(listing, filelist[list+dListScrollPosition].filename, (isWide ? 44 : 28)); if(list == dListCurrentPosition) { shift = 2; colors = RED; Image = NULL; if(Image) { clipX = factor * (isWide ? 286 : 155); clipY = factor * (isWide ? (factor == 4 ? (s16)32.5 : 32) : (factor == 4 ? (s16)21.5 : 21)); } //else printText((isWide ? 288 : 157), (isWide ? 141 : 130), RED, 0, 0, "No Preview Available!"); } printText((isWide ? 30 : 7) + shift, (isWide ? 33 : 22)+(11*list) , colors, 0, 0, "%s", listing); } } printText((isWide ? 26 : 5), (isWide ? 11 : 4), WHITE, 0, 0, "OpenBoR %s", VERSION); printText((isWide ? 392 : 261),(isWide ? 11 : 4), WHITE, 0, 0, __DATE__); printText((isWide ? 23 : 4),(isWide ? 251 : 226), WHITE, 0, 0, "%s: Start Game", control_getkeyname(savedata.keys[0][SDID_ATTACK])); printText((isWide ? 150 : 84),(isWide ? 251 : 226), WHITE, 0, 0, "%s: BGM Player", control_getkeyname(savedata.keys[0][SDID_ATTACK2])); printText((isWide ? 270 : 164),(isWide ? 251 : 226), WHITE, 0, 0, "%s: View Logs", control_getkeyname(savedata.keys[0][SDID_JUMP])); printText((isWide ? 390 : 244),(isWide ? 251 : 226), WHITE, 0, 0, "%s: Quit Game", control_getkeyname(savedata.keys[0][SDID_SPECIAL])); printText((isWide ? 330 : 197),(isWide ? 170 : 155), BLACK, 0, 0, "www.LavaLit.com"); printText((isWide ? 322 : 190),(isWide ? 180 : 165), BLACK, 0, 0, "www.SenileTeam.com"); #ifdef SPK_SUPPORTED printText((isWide ? 324 : 192),(isWide ? 191 : 176), DARK_RED, 0, 0, "SecurePAK Edition"); #endif drawScreens(Image, clipX, clipY); if(Image) { freescreen(&Image); Image = NULL; } }
void drawLogs() { int i=which_logfile, j, k, l, done=0; s_screen *Viewer = NULL; bothkeys = bothnewkeys = 0; Viewer = allocscreen(Source->width, Source->height, Source->pixelformat); clearscreen(Viewer); bothkeys = bothnewkeys = 0; while(!done) { copyScreens(Viewer); //inputrefresh(); refreshInput(); printText((isWide ? 410 : 250), 3, RED, 0, 0, "Quit : 1/B"); if(buttonsPressed & (WIIMOTE_1|CC_B|GC_B)) done = 1; if(logfile[i].ready) { printText(5, 3, RED, 0, 0, "OpenBorLog.txt"); if(buttonsHeld & DIR_UP) --logfile[i].line; if(buttonsHeld & DIR_DOWN) ++logfile[i].line; if(buttonsHeld & DIR_LEFT) logfile[i].line = 0; if(buttonsHeld & DIR_RIGHT) logfile[i].line = logfile[i].rows - (LOG_SCREEN_END - LOG_SCREEN_TOP); if(logfile[i].line > logfile[i].rows - (LOG_SCREEN_END - LOG_SCREEN_TOP) - 1) logfile[i].line = logfile[i].rows - (LOG_SCREEN_END - LOG_SCREEN_TOP) - 1; if(logfile[i].line < 0) logfile[i].line = 0; for(l=LOG_SCREEN_TOP, j=logfile[i].line; j<logfile[i].rows-1; l++, j++) { if(l<LOG_SCREEN_END) { char textpad[480] = {""}; for(k=0; k<480; k++) { if(!logfile[i].buf->ptr[logfile[i].pos[j]+k]) break; textpad[k] = logfile[i].buf->ptr[logfile[i].pos[j]+k]; } if(logfile[i].rows>0xFFFF) printText(5, l*10, WHITE, 0, 0, "0x%08x: %s", j, textpad); else printText(5, l*10, WHITE, 0, 0, "0x%04x: %s", j, textpad); } else break; } } else if(i == SCRIPT_LOG) printText(5, 3, RED, 0, 0, "Log NOT Found: ScriptLog.txt"); else printText(5, 3, RED, 0, 0, "Log NOT Found: OpenBorLog.txt"); drawScreens(NULL, 0, 0); } freescreen(&Viewer); Viewer = NULL; drawMenu(); }
SDL_Surface *pngToSurface(const void *data) { unsigned char *sp; char *dp; int width, height, linew; int h; SDL_Surface *ds = NULL; s_screen *src = pngToScreen(data); if(src == NULL) { return NULL; } assert(src->pixelformat == PIXEL_32); width = src->width; height = src->height; h = height; sp = (unsigned char *)src->data; ds = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, 0xff, 0xff00, 0xff0000, 0xff000000); dp = ds->pixels; linew = width * 4; do { memcpy(dp, sp, linew); sp += linew; dp += ds->pitch; } while(--h); freescreen(&src); return ds; }
s_screen *getPreview(char *filename) { int width = factor == 4 ? 640 : (factor == 2 ? 320 : 160); int height = factor == 4 ? 480 : (factor == 2 ? 240 : 120); s_screen *title = NULL; s_screen *scale = NULL; // Grab current path and filename getBasePath(packfile, filename, 1); // Create & Load & Scale Image return NULL; //if(!loadscreen("data/bgs/title.gif", packfile, realPal, PIXEL_8, &title)) return NULL; if((scale = allocscreen(width, height, title->pixelformat)) == NULL) return NULL; scalescreen(scale, title); // Free Images and Terminate FileCaching freescreen(&title); // ScreenShots within Menu will be saved as "Menu" strncpy(packfile,"Menu.ext",128); return scale; }