diff --git a/imv.c b/imv.c index 64d59cc..fa6c86e 100644 --- a/imv.c +++ b/imv.c @@ -30,6 +30,7 @@ #include "stb.h" /* http://nothings.org/stb.h */ #include "stb_image.c" /* http://nothings.org/stb_image.c */ +#include "resource.h" // all programs get the version number from the same place: version.bat #define set static char * @@ -153,6 +154,7 @@ typedef struct int stride; // distance between rows in bytes int frame; // does this image have a frame (border)? uint8 *pixels; // pointer to (0,0)th pixel + int had_alpha; // did this have alpha and we statically overwrote it? } Image; enum @@ -299,6 +301,12 @@ void *diskload_task(void *p) } } +static unsigned char alpha_background[2][3] = +{ + { 200,40,200 }, + { 150,30,150 }, +}; + // given raw decoded data from stbi_load, make it into a proper Image (e.g. creating a // windows-compatible bitmap with 4-byte aligned rows and BGR color order) void make_image(Image *z, int image_x, int image_y, uint8 *image_data, int image_n) @@ -309,6 +317,7 @@ void make_image(Image *z, int image_x, int image_y, uint8 *image_data, int image z->y = image_y; z->stride = image_x*BPP; z->frame = 0; + z->had_alpha = (image_n==4); for (j=0; j < image_y; ++j) { for (i=0; i < image_x; ++i) { @@ -323,13 +332,13 @@ void make_image(Image *z, int image_x, int image_y, uint8 *image_data, int image unsigned char *p = image_data+k; int a = (255-p[3]); if ((i ^ j) & 8) { - p[0] += (((200 - (int) p[0])*a)>>8); - p[1] += ((( 40 - (int) p[1])*a)>>8); - p[2] += (((200 - (int) p[2])*a)>>8); + p[0] += (((alpha_background[0][2] - (int) p[0])*a)>>8); + p[1] += (((alpha_background[0][1] - (int) p[1])*a)>>8); + p[2] += (((alpha_background[0][0] - (int) p[2])*a)>>8); } else { - p[0] += (((150 - (int) p[0])*a)>>8); - p[1] += ((( 30 - (int) p[1])*a)>>8); - p[2] += (((150 - (int) p[2])*a)>>8); + p[0] += (((alpha_background[1][2] - (int) p[0])*a)>>8); + p[1] += (((alpha_background[1][1] - (int) p[1])*a)>>8); + p[2] += (((alpha_background[1][0] - (int) p[2])*a)>>8); } } #endif @@ -459,6 +468,7 @@ Image *bmp_alloc(int x, int y) i->stride += (-i->stride) & 3; i->pixels = malloc(i->stride * i->y); i->frame = 0; + i->had_alpha = 0; if (i->pixels == NULL) { free(i); return NULL; } return i; } @@ -533,18 +543,18 @@ char helptext_center[88] = char helptext_left[] = "\n\n\n\n" - "ESC: exit\n" - "ALT-ENTER: toggle size\n" - "CTRL-PLUS: zoom in\n" + " ESC: exit\n" + " ALT-ENTER: toggle size\n" + " CTRL-PLUS: zoom in\n" "CTRL-MINUS: zoom out\n" "RIGHT, SPACE: next image\n" "LEFT, BACKSPACE: previous image\n" - "CTRL-O: open image\n" - "F: toggle frame\n" - "C: toggle resize quality\n" + " CTRL-O: open image\n" + " P: change preferences\n" + " F: toggle frame\n" "SHIFT-F: toggle white stripe in frame\n" "CTRL-F: toggle both\n" - "L: toggle filename label\n" + " L: toggle filename label\n" "F1, H, ?: help" ; @@ -1302,26 +1312,31 @@ void advance(int dir) // set this file to new value fileinfo[cur_loc].lru = ++lru_stamp; + // make sure there's room for new images flush_cache(FALSE); - // we're mucking with the cache like mad, so grab the mutex; it doubles - // as a dc_shared mutex, so don't release until we're done with dc_shared - stb_mutex_begin(cache_mutex); - dc.num_files = 0; - queue_disk_command(&dc, cur_loc, 1); // first thing to load: this file - if (dir) { - queue_disk_command(&dc, wrap(cur_loc+dir), 0); // second thing to load: the next file (preload) - queue_disk_command(&dc, wrap(cur_loc-dir), 0); // last thing to load: the previous file (in case it got skipped when they went fast) - } - filename = fileinfo[cur_loc].filename; - if (dc.num_files) { - dc_shared = dc; - for (i=0; i < dc.num_files; ++i) - assert(dc.files[i]->filedata == NULL); - // wake up the disk thread if needed - stb_sem_release(disk_command_queue); + // we're mucking with the cache like mad, so grab the mutex; it doubles + // as a mutex on dc_shared, so don't release until we're done with dc_shared + stb_mutex_begin(cache_mutex); + { + dc.num_files = 0; + queue_disk_command(&dc, cur_loc, 1); // first thing to load: this file + if (dir) { + queue_disk_command(&dc, wrap(cur_loc+dir), 0); // second thing to load: the next file (preload) + queue_disk_command(&dc, wrap(cur_loc-dir), 0); // last thing to load: the previous file (in case it got skipped when they went fast) + } + filename = fileinfo[cur_loc].filename; + + if (dc.num_files) { + dc_shared = dc; + for (i=0; i < dc.num_files; ++i) + assert(dc.files[i]->filedata == NULL); + // wake up the disk thread if needed + stb_sem_release(disk_command_queue); + } } stb_mutex_end(cache_mutex); + // tell disk loader not to bother with older files for (i=0; i < MAX_CACHED_IMAGES; ++i) if (cache[i].lru < lru_stamp-1) @@ -1427,8 +1442,8 @@ enum #define ismode(x) (dragmode == x) #define anymode() !ismode(MODE_none) -static int ex,ey; // original mousedown location for snapping to that -static int ex2,ey2; // original mousedown location relative to bottom right +static int ex,ey; // mousedown location relative to top left +static int ex2,ey2; // mousedown location relative to bottom right static int wx,wy; static int rx,ry,rx2,ry2; @@ -1541,6 +1556,178 @@ void mouse(UINT ev, int x, int y) } } +static unsigned int physmem; +char *reg_root = "Software\\SilverSpaceship\\imv"; +int reg_get(char *str, void *data, int len) +{ + static char buffer[128]; + int result=0; + HKEY z=0; + if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, reg_root, 0, KEY_READ, &z)) + { + unsigned int type; + if (ERROR_SUCCESS == RegQueryValueEx(z, str, 0, &type, data, &len)) + if (type == REG_BINARY) + result = 1; + } + if (z) + RegCloseKey(z); + return result; +} + +int reg_set(char *str, void *data, int len) +{ + int result = 0; + HKEY z=0; + if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE, reg_root, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &z, NULL)) + { + if (ERROR_SUCCESS == RegSetValueEx(z, str, 0, REG_BINARY, data, len)) + result = 1; + } + if (z) + RegCloseKey(z); + return result; +} + +void reg_save(void) +{ + int temp = max_cache_bytes >> 20; + reg_set("ac", &alpha_background, 6); + reg_set("up", &upsample_cubic, 4); + reg_set("cache", &temp, 4); +} + +void reg_load(void) +{ + int temp; + reg_get("ac", &alpha_background, 6); + reg_get("up", &upsample_cubic, 4); + if (reg_get("cache", &temp, 4)) + max_cache_bytes = temp << 20; +} + +static HWND dialog; +static LRESULT send_dialog(int id, UINT msg, WPARAM p1, LPARAM p2) +{ + return SendMessage(GetDlgItem(dialog,id),msg,p1,p2); +} + +static void set_dialog_number(int id, int value) +{ + char buffer[16]; + sprintf(buffer, "%d", value); + SetWindowText(GetDlgItem(dialog, id), buffer); +} + +static int get_dialog_number(int id) +{ + char buffer[32]; + int n = GetWindowText(GetDlgItem(dialog,id), buffer, sizeof(buffer)-1); + buffer[n] = 0; + return atoi(buffer); +} + +static void dialog_clamp(int id, int low, int high) +{ + int x = get_dialog_number(id); + if (x < low) x = low; + else if (x > high) x = high; + else return; + set_dialog_number(id,x); +} + +extern unsigned char *rom_images[]; +BOOL CALLBACK PrefDlgProc(HWND hdlg, UINT imsg, WPARAM wparam, LPARAM lparam) +{ + static Image *pref_image; + int i; + dialog = hdlg; + switch(imsg) + { + case WM_INITDIALOG: { + int n = ((rand() >> 6) % 3); + { + int x,y,i,j,k; + uint8 *data = stbi_load_from_memory(rom_images[n],2000,&x,&y,NULL,1); + pref_image = bmp_alloc(x,y); + for (j=0; j < y; ++j) + for (i=0; i < x; ++i) + for (k=0; k < 3; ++k) + pref_image->pixels[pref_image->stride*j + BPP*i + k] = data[j*x+i]; + } + + send_dialog(DIALOG_upsample, BM_SETCHECK, upsample_cubic, 0); + for (i=0; i < 6; ++i) + set_dialog_number(DIALOG_r1+i, alpha_background[0][i]); + set_dialog_number(DIALOG_cachesize, max_cache_bytes >> 20); + return TRUE; + } + case WM_PAINT: { + RECT z; + int x,y; + HWND pic = GetDlgItem(hdlg, DIALOG_image); + GetWindowRect(pic,&z); + InvalidateRect(pic,NULL,TRUE); + UpdateWindow(pic); + x = (z.right - z.left - pref_image->x) >> 1; + y = (z.bottom - z.top - pref_image->y) >> 1; + platformDrawBitmap(GetDC(pic), x,y,pref_image->pixels,pref_image->x,pref_image->y,pref_image->stride,0); + break; + } + case WM_COMMAND: { + int k = LOWORD(wparam); + int n = HIWORD(wparam); + switch(k) { + // validate the dialog entries + case DIALOG_r1: case DIALOG_g1: case DIALOG_b1: + case DIALOG_r2: case DIALOG_g2: case DIALOG_b2: + if (n == EN_KILLFOCUS) dialog_clamp(k,0,255); + break; + case DIALOG_cachesize: + if (n == EN_KILLFOCUS) dialog_clamp(k,1,(physmem>>22)*3); // 3/4 of phys mem + break; + case IDOK: { + unsigned char cur[6]; + int up = upsample_cubic; + memcpy(cur, alpha_background, 6); + // load the settings back out of the dialog box + for (i=0; i < 6; ++i) + alpha_background[0][i] = get_dialog_number(DIALOG_r1+i); + max_cache_bytes = get_dialog_number(DIALOG_cachesize) << 20; + upsample_cubic = send_dialog(DIALOG_upsample, BM_GETCHECK,0,0) == BST_CHECKED; + if (memcmp(alpha_background, cur, 6)) { + stb_mutex_begin(cache_mutex); + for (i=0; i < MAX_CACHED_IMAGES; ++i) { + if (cache[i].status == LOAD_available) { + if (cache[i].image->had_alpha) { + stb_sdict_remove(file_cache, cache[i].filename, NULL); + free(cache[i].filename); + imfree(cache[i].image); + cache[i].status = LOAD_unused; + cache[i].image = NULL; + cache[i].filename = NULL; + } + } + } + stb_mutex_end(cache_mutex); + advance(0); + } + reg_save(); + /* FALL THROUGH */ + } + case IDCANCEL: + imfree(pref_image); + pref_image = NULL; + EndDialog(hdlg,0); + return TRUE; + } + break; + } + } + return FALSE; +} + + #ifndef VK_OEM_PLUS #define VK_OEM_PLUS 0xbb #define VK_OEM_MINUS 0xbd @@ -1549,6 +1736,7 @@ void mouse(UINT ev, int x, int y) #define VK_SLASH 0xbf #endif +HINSTANCE inst; int WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -1708,6 +1896,11 @@ int WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) if (cur) frame(cur); break; + case 'P': + case 'P' | MY_CTRL: + DialogBox(inst, MAKEINTRESOURCE(IDD_pref), hWnd, PrefDlgProc); + break; + case MY_CTRL | VK_OEM_PLUS: case MY_CTRL | MY_SHIFT | VK_OEM_PLUS: resize(1); @@ -1728,7 +1921,6 @@ int WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } break; } - case WM_DESTROY: PostQuitMessage (0); break; @@ -1760,12 +1952,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine MSG msg; WNDCLASSEX wndclass; HWND hWnd; - int physmem; int image_x, image_y; unsigned char *image_data; int image_n; + inst = hInstance; + resize_threads = stb_processor_count(); if (resize_threads > MAX_RESIZE) resize_threads = MAX_RESIZE; @@ -1775,10 +1968,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine #endif GlobalMemoryStatus(&mem); + if (mem.dwTotalPhys == 0) --mem.dwTotalPhys; physmem = mem.dwTotalPhys; max_cache_bytes = physmem / 6; if (max_cache_bytes > 256 << 20) max_cache_bytes = 256 << 20; + reg_load(); + strcat(helptext_center, VERSION); /* Register the frame class */ @@ -1811,7 +2007,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine label_font = CreateFontIndirect(&lf); } - + srand(time(NULL)); if (argc < 1) { OPENFILENAME o; diff --git a/imv.ico b/imv.ico new file mode 100644 index 0000000..a8df3fa Binary files /dev/null and b/imv.ico differ diff --git a/pics.c b/pics.c new file mode 100644 index 0000000..8e7bb9e --- /dev/null +++ b/pics.c @@ -0,0 +1,179 @@ +static unsigned char img_0[] = +{ + 255,216,255,224,0,16,74,70,73,70,0,1,2,0,0,100,0,100, + 0,0,255,236,0,17,68,117,99,107,121,0,1,0,4,0,0,0, + 21,0,0,255,238,0,14,65,100,111,98,101,0,100,192,0,0,0, + 1,255,219,0,132,0,18,14,14,14,15,14,20,15,15,20,29,19, + 17,19,29,34,25,20,20,25,34,34,24,24,26,24,24,34,38,29, + 33,32,32,33,29,38,38,45,47,50,47,45,38,60,60,65,65,60, + 60,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,1,19, + 19,19,22,24,22,27,23,23,27,26,21,25,21,26,32,26,28,28, + 26,32,47,32,32,35,32,32,47,61,44,38,38,38,38,44,61,54, + 58,50,50,50,58,54,65,65,61,61,65,65,65,65,65,65,65,65, + 65,65,65,65,65,65,65,65,65,255,192,0,17,8,0,48,0,48, + 3,1,34,0,2,17,1,3,17,1,255,196,0,105,0,0,3,1, + 1,0,0,0,0,0,0,0,0,0,0,0,0,3,5,6,4,0, + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 16,0,2,1,3,2,4,5,3,3,5,0,0,0,0,0,0,1, + 2,3,0,17,4,33,18,49,65,81,5,97,129,34,50,19,145,177, + 20,161,66,82,113,98,35,67,21,17,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,255,218,0,12,3,1,0,2,17, + 3,17,0,63,0,73,182,142,152,204,69,199,62,23,28,232,159,9, + 121,89,16,123,125,205,112,2,211,158,221,135,28,196,41,98,193,61, + 205,123,110,127,15,1,64,175,27,180,145,43,54,64,6,194,234,164, + 105,115,192,216,86,211,218,225,145,79,183,112,2,194,214,111,162,133, + 170,36,196,141,79,220,154,14,78,42,17,107,88,242,52,17,57,152, + 239,134,196,178,217,126,191,122,85,46,67,57,176,225,87,25,152,95, + 147,137,44,45,123,129,161,227,126,156,122,84,17,66,142,84,235,110, + 99,194,130,147,31,32,25,164,59,125,32,22,191,247,53,148,125,47, + 78,34,252,120,164,73,68,34,73,139,144,172,61,91,86,225,61,35, + 202,228,212,178,74,205,233,143,82,109,186,171,187,125,191,226,36,168, + 133,229,248,245,176,187,18,73,26,121,80,50,252,168,228,198,18,20, + 7,117,238,167,219,199,111,62,85,155,15,34,57,225,255,0,28,63, + 13,154,197,77,197,192,211,157,30,8,227,79,141,97,4,194,20,46, + 214,22,32,121,209,231,142,53,141,157,6,160,92,17,210,128,12,145, + 178,48,36,174,227,231,122,136,239,157,189,96,144,74,134,225,143,169, + 122,30,162,171,241,211,230,18,180,198,202,61,40,60,88,86,46,239, + 133,19,96,17,43,110,113,191,99,243,63,31,2,126,148,17,109,112, + 110,56,141,69,85,118,28,183,126,216,194,41,66,79,137,163,6,27, + 129,66,218,95,200,254,134,144,231,44,69,198,195,175,238,2,133,137, + 147,46,44,229,225,82,225,212,164,177,15,246,70,220,70,156,250,80, + 95,75,38,108,96,168,117,121,46,21,84,174,213,36,245,214,181,78, + 203,30,52,134,103,17,170,175,173,201,178,139,243,165,112,119,140,12, + 124,113,145,155,41,249,147,208,99,40,203,46,245,26,130,173,251,191, + 74,151,239,93,247,39,187,72,16,143,139,25,13,210,17,173,207,242, + 115,204,253,168,59,184,119,236,169,167,101,195,118,143,21,88,52,107, + 97,118,43,166,227,253,122,86,102,204,238,57,236,34,146,70,112,77, + 246,141,20,112,228,57,105,64,142,22,114,21,6,231,110,2,156,44, + 81,224,193,125,12,135,137,31,200,242,160,255,217, +}; +static unsigned char img_1[] = +{ + 255,216,255,224,0,16,74,70,73,70,0,1,2,0,0,100,0,100, + 0,0,255,236,0,17,68,117,99,107,121,0,1,0,4,0,0,0, + 20,0,0,255,238,0,14,65,100,111,98,101,0,100,192,0,0,0, + 1,255,219,0,132,0,18,14,14,14,16,14,21,16,16,21,30,19, + 17,19,30,35,26,21,21,26,35,34,24,24,26,24,24,34,39,30, + 34,33,33,34,30,39,39,46,48,51,48,46,39,62,62,65,65,62, + 62,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,1,20, + 19,19,22,25,22,27,23,23,27,26,22,26,22,26,33,26,29,29, + 26,33,49,33,33,36,33,33,49,62,45,39,39,39,39,45,62,56, + 59,51,51,51,59,56,65,65,62,62,65,65,65,65,65,65,65,65, + 65,65,65,65,65,65,65,65,65,255,192,0,17,8,0,59,0,64, + 3,1,34,0,2,17,1,3,17,1,255,196,0,111,0,0,3,1, + 1,1,0,0,0,0,0,0,0,0,0,0,0,3,4,5,2,6, + 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16,0,2,1,2,4,4,3,7,1,9,0,0,0,0,0,0, + 1,2,3,0,17,33,49,18,4,65,81,34,5,97,145,19,113,129, + 50,66,82,130,20,52,161,177,193,225,98,114,146,51,67,17,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,218,0, + 12,3,1,0,2,17,3,17,0,63,0,173,219,246,242,164,3,242, + 18,52,184,26,34,69,0,70,191,73,191,26,115,211,143,232,95,33, + 74,237,247,104,54,105,36,131,73,11,114,163,133,111,105,189,143,114, + 196,12,8,200,80,48,34,143,232,95,33,90,244,163,250,23,252,69, + 16,41,24,138,34,163,182,54,160,18,237,226,181,202,47,144,172,180, + 49,47,202,167,237,20,75,89,136,226,51,20,29,211,132,143,32,117, + 27,99,64,158,233,3,186,70,137,101,63,17,1,84,97,204,218,146, + 158,109,163,147,12,83,164,37,48,37,151,11,139,124,214,170,13,52, + 141,26,143,78,223,24,39,144,2,215,161,109,54,91,17,37,218,49, + 33,44,6,166,234,234,115,203,42,8,79,190,146,61,161,22,12,168, + 166,228,15,138,135,217,215,185,201,60,91,171,218,45,88,173,180,244, + 242,28,235,217,87,213,153,32,219,70,88,31,212,88,27,91,216,220, + 253,181,74,73,63,26,56,196,48,50,152,85,173,118,212,88,176,177, + 225,133,7,69,173,52,7,189,148,226,9,166,21,213,116,139,224,115, + 242,174,103,105,44,207,182,95,80,130,69,192,55,241,166,142,234,66, + 154,91,167,27,220,99,65,69,166,219,153,22,69,110,166,96,10,182, + 3,150,30,84,156,179,72,196,172,140,128,134,185,210,109,165,61,180, + 180,140,178,232,179,178,184,193,191,168,80,101,128,171,172,45,125,12, + 46,139,170,218,72,206,254,24,208,15,123,221,70,201,17,11,25,222, + 206,74,175,87,196,69,142,28,5,111,182,119,56,119,81,188,91,67, + 105,172,24,107,178,148,97,153,20,180,141,183,217,247,19,43,189,142, + 130,44,49,35,27,139,138,62,219,99,12,147,54,254,59,15,89,15, + 0,160,5,240,241,160,216,223,25,36,116,7,85,184,210,219,205,220, + 139,96,70,28,234,54,211,122,82,121,1,55,177,207,158,54,163,111, + 55,143,186,117,11,134,129,99,142,116,24,29,218,65,184,34,231,64, + 22,176,187,31,112,21,82,45,255,0,171,24,49,46,182,192,18,72, + 192,249,138,231,32,38,45,203,62,119,233,110,126,234,181,12,18,177, + 26,7,73,196,252,159,190,129,232,191,32,245,201,40,140,112,85,34, + 254,116,159,113,220,152,10,144,75,23,190,44,111,149,21,246,206,214, + 215,26,54,156,181,51,26,79,185,69,49,68,178,168,64,72,33,124, + 112,20,8,203,184,87,138,81,46,50,234,30,159,142,119,199,133,169, + 254,213,190,146,41,63,28,182,184,164,184,211,112,202,44,9,194,164, + 75,19,36,164,21,197,154,226,252,112,254,116,231,103,129,158,111,88, + 158,136,215,164,127,125,2,27,153,109,186,145,135,253,24,182,25,103, + 194,137,20,173,112,195,58,74,91,234,76,242,240,213,159,26,52,89, + 113,160,56,12,210,168,39,78,163,109,86,38,215,170,209,52,134,64, + 125,82,47,211,169,198,62,234,153,23,234,98,190,172,240,215,150,71, + 43,113,246,213,188,61,17,125,57,124,215,254,20,5,8,64,33,220, + 176,60,248,121,80,119,50,34,70,14,157,69,152,0,47,199,134,117, + 168,45,165,185,95,199,79,187,141,3,123,254,137,61,148,18,100,101, + 99,174,246,96,236,161,135,194,116,129,251,41,206,203,34,133,148,41, + 58,108,166,199,229,108,111,82,142,98,218,190,223,96,202,245,71,179, + 91,211,151,237,207,223,65,255,217, +}; +static unsigned char img_2[] = +{ + 255,216,255,224,0,16,74,70,73,70,0,1,2,0,0,100,0,100, + 0,0,255,236,0,17,68,117,99,107,121,0,1,0,4,0,0,0, + 23,0,0,255,238,0,14,65,100,111,98,101,0,100,192,0,0,0, + 1,255,219,0,132,0,18,13,13,13,15,13,19,15,15,19,28,18, + 16,18,28,33,24,19,19,24,33,34,23,23,25,23,23,34,36,29, + 32,31,31,32,29,36,36,43,44,47,44,43,36,57,57,62,62,57, + 57,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,1,19, + 18,18,21,23,21,25,22,22,25,25,20,23,20,25,31,25,26,26, + 25,31,46,31,31,34,31,31,46,58,42,36,36,36,36,42,58,52, + 56,47,47,47,56,52,64,64,58,58,64,64,65,65,65,65,65,65, + 65,65,65,65,65,65,65,65,65,255,192,0,17,8,0,64,0,64, + 3,1,34,0,2,17,1,3,17,1,255,196,0,110,0,0,3,1, + 1,1,1,0,0,0,0,0,0,0,0,0,0,4,5,6,3,7, + 2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,16,0,2,1,3,3,3,1,5,7,5,0,0,0,0, + 0,0,1,2,3,0,17,4,33,18,5,49,65,81,34,97,113,145, + 19,6,129,161,50,82,98,35,20,177,66,178,36,21,17,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,218,0,12, + 3,1,0,2,17,3,17,0,63,0,73,50,62,128,155,129,208,120, + 170,174,3,147,131,47,21,112,39,0,74,137,176,41,252,50,70,5, + 191,167,90,159,124,126,224,18,43,126,29,86,46,74,6,123,128,26, + 218,254,173,5,64,55,55,199,193,129,154,96,129,203,161,80,196,30, + 169,187,251,126,20,172,155,85,103,213,56,50,60,169,146,6,229,218, + 16,145,219,110,186,212,172,137,102,181,81,137,52,227,128,193,200,200, + 105,165,142,86,130,56,128,14,235,237,237,110,244,183,31,22,108,153, + 150,8,20,188,143,162,168,171,158,35,141,159,143,226,36,130,109,162, + 87,44,236,1,189,129,22,235,246,80,67,102,55,251,14,47,184,2, + 117,181,175,88,138,51,146,199,49,206,118,250,151,243,142,134,131,20, + 29,28,192,228,5,40,128,13,73,54,251,168,89,227,194,12,46,0, + 148,11,129,211,165,109,62,126,35,29,178,71,117,161,156,241,132,168, + 218,87,173,137,212,143,141,65,43,63,39,157,60,223,58,89,152,184, + 208,91,210,0,247,10,213,32,254,124,18,72,130,249,48,141,206,138, + 63,28,125,55,40,29,199,122,195,58,17,14,92,177,169,186,6,37, + 15,233,58,138,249,133,149,38,30,84,121,49,155,52,102,246,242,59, + 138,161,231,210,88,121,41,150,217,38,63,218,40,209,179,157,44,218, + 29,7,94,213,94,117,30,124,214,88,175,12,144,36,176,0,35,144, + 111,27,69,135,170,181,168,17,243,156,100,114,194,100,81,101,65,208, + 120,246,84,102,94,40,130,77,170,225,197,175,126,149,209,57,41,18, + 60,41,75,234,8,176,30,218,132,202,113,38,132,122,175,215,200,160, + 176,147,137,137,67,56,4,145,222,247,161,31,14,39,147,93,52,233, + 236,21,66,122,121,161,167,70,44,21,80,93,186,159,20,17,220,230, + 16,141,82,101,34,227,210,192,120,236,105,53,235,161,101,241,184,243, + 194,201,42,131,112,117,238,46,45,80,89,88,210,99,78,240,72,44, + 200,109,127,35,177,30,250,162,139,233,78,84,41,255,0,159,51,122, + 88,222,2,123,55,117,251,106,182,185,116,110,200,202,200,108,202,110, + 8,236,69,116,46,39,59,249,216,81,204,79,238,15,76,150,252,226, + 131,207,56,241,167,27,41,114,22,227,210,79,230,30,61,181,3,44, + 234,196,129,168,236,105,239,213,28,160,153,142,16,4,124,150,59,205, + 238,165,135,74,155,80,13,238,108,123,15,52,29,53,179,177,7,89, + 71,222,107,211,100,192,21,95,117,195,104,8,5,186,251,133,74,199, + 202,76,88,110,212,169,189,238,214,248,94,152,142,87,39,104,244,147, + 229,64,211,226,106,3,179,185,24,226,136,132,86,119,36,104,85,173, + 107,235,219,197,78,115,255,0,196,202,68,200,131,114,186,104,219,212, + 165,193,237,168,237,69,100,230,230,176,33,99,4,176,190,154,88,82, + 217,179,102,82,86,88,236,218,104,192,55,249,41,160,93,143,143,36, + 210,172,113,174,231,109,0,21,95,197,32,226,176,207,207,184,146,70, + 210,31,78,235,244,189,36,131,62,81,40,49,5,82,69,141,149,0, + 248,109,31,26,96,38,115,18,252,193,36,165,58,19,26,184,54,177, + 213,181,189,80,7,59,197,176,156,205,1,47,243,206,226,157,89,75, + 107,219,173,45,139,139,201,252,110,21,20,92,157,230,221,41,243,242, + 18,35,52,201,8,98,5,175,181,14,223,112,26,138,87,54,126,91, + 204,102,216,10,145,111,150,241,134,79,129,22,160,255,217, +}; +unsigned char *rom_images[] = { img_0, img_1, img_2 }; diff --git a/pref.rc b/pref.rc new file mode 100644 index 0000000..b16740d --- /dev/null +++ b/pref.rc @@ -0,0 +1,113 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_pref DIALOG DISCARDABLE 0, 0, 161, 141 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "imv(stb) preferences" +FONT 8, "MS Sans Serif" +BEGIN + DEFPUSHBUTTON "OK",IDOK,23,119,50,14 + PUSHBUTTON "Cancel",IDCANCEL,83,119,50,14 + CONTROL "High-quality resizing",DIALOG_upsample,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,24,86,76,10 + EDITTEXT DIALOG_r1,57,50,19,12,ES_RIGHT | ES_AUTOHSCROLL + EDITTEXT DIALOG_g1,79,50,19,12,ES_RIGHT | ES_AUTOHSCROLL + EDITTEXT DIALOG_b1,101,50,19,12,ES_RIGHT | ES_AUTOHSCROLL + RTEXT "Color 1",IDC_STATIC,28,53,25,12 + RTEXT "Color 2",IDC_STATIC,28,65,25,13 + GROUPBOX "Background color for transparent images",IDC_STATIC,5, + 40,147,42 + EDITTEXT DIALOG_r2,57,63,19,12,ES_RIGHT | ES_AUTOHSCROLL + EDITTEXT DIALOG_g2,79,63,19,12,ES_RIGHT | ES_AUTOHSCROLL + EDITTEXT DIALOG_b2,101,63,19,12,ES_RIGHT | ES_AUTOHSCROLL + EDITTEXT DIALOG_cachesize,11,100,21,13,ES_AUTOHSCROLL + LTEXT "Size of image cache in megabytes",IDC_STATIC,36,102,107, + 8 + LTEXT "",DIALOG_image,45,7,70,28 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_pref, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 154 + TOPMARGIN, 7 + BOTTOMMARGIN, 134 + END +END +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/vc6/stb_imv.dsp b/vc6/stb_imv.dsp index 777d844..049ae86 100644 --- a/vc6/stb_imv.dsp +++ b/vc6/stb_imv.dsp @@ -124,6 +124,10 @@ SOURCE=..\imv.c # End Source File # Begin Source File +SOURCE=..\imv.ico +# End Source File +# Begin Source File + SOURCE=..\notes.txt !IF "$(CFG)" == "stb_imv - Win32 Release" @@ -144,6 +148,14 @@ SOURCE=..\notes.txt # End Source File # Begin Source File +SOURCE=..\pics.c +# End Source File +# Begin Source File + +SOURCE=..\pref.rc +# End Source File +# Begin Source File + SOURCE=..\stb.h # End Source File # Begin Source File