slideshow

This commit is contained in:
nothings.org 2007-08-24 13:08:03 +00:00
parent ec3905f418
commit e9559c7fce
4 changed files with 112 additions and 23 deletions

70
imv.c
View File

@ -54,9 +54,8 @@ typedef int Bool;
int do_show;
int delay_time = 4000;
Bool do_show;
float delay_time = 4;
// all programs get the version number from the same place: version.bat
#define set static char *
@ -602,6 +601,7 @@ char helptext_left[] =
"SHIFT-B: toggle border but keep stripe\n"
" CTRL-B: toggle white stripe in border\n"
" L: toggle filename label\n"
" S: slideshow in current directory\n"
;
char helptext_right[] =
@ -1501,7 +1501,7 @@ void advance(int dir)
cache[i].bail = 1;
if (do_show)
SetTimer(win, 0, delay_time, NULL);
SetTimer(win, 0, (int)(delay_time*1000), NULL);
}
// ctrl-O, or initial command if no filename: run
@ -1798,6 +1798,8 @@ void reg_save(void)
reg_set("lfs", &label_font_height, 4);
reg_set("label", &show_label, 4);
reg_set("stbi", &only_stbi, 4);
reg_set("border", &show_frame, 4);
reg_set("stime", &delay_time, 4);
RegCloseKey(zreg);
}
}
@ -1814,6 +1816,9 @@ void reg_load(void)
if (reg_get("cache", &temp, 4))
max_cache_bytes = temp << 20;
reg_get("stbi", &only_stbi, 4);
reg_get("border", &show_frame, 4);
extra_border = show_frame;
reg_get("stime", &delay_time, 4);
RegCloseKey(zreg);
}
}
@ -1837,6 +1842,23 @@ static int get_dialog_number(int id)
return atoi(buffer);
}
// set an edit control's text from an integer
static void set_dialog_numberf(int id, float value)
{
char buffer[16];
sprintf(buffer, "%.2f", value);
SetWindowText(GetDlgItem(dialog, id), buffer);
}
// get an edit control's text as an integer
static float get_dialog_numberf(int id)
{
char buffer[32];
int n = GetWindowText(GetDlgItem(dialog,id), buffer, sizeof(buffer)-1);
buffer[n] = 0;
return (float) atof(buffer);
}
// clamp an edit control's text into an integer range (and
// remove non-integer chacters)
static void dialog_clamp(int id, int low, int high)
@ -1848,6 +1870,15 @@ static void dialog_clamp(int id, int low, int high)
set_dialog_number(id,x);
}
static void dialog_clampf(int id, float low, float high)
{
float x = get_dialog_numberf(id);
if (x < low) x = low;
else if (x > high) x = high;
else return;
set_dialog_numberf(id,x);
}
extern unsigned char *rom_images[]; // preference images
// preferences dialog windows procedure
@ -1880,10 +1911,12 @@ BOOL CALLBACK PrefDlgProc(HWND hdlg, UINT imsg, WPARAM wparam, LPARAM lparam)
SendMessage(GetDlgItem(hdlg, DIALOG_upsample), BM_SETCHECK, upsample_cubic, 0);
SendMessage(GetDlgItem(hdlg, DIALOG_showlabel), BM_SETCHECK, show_label, 0);
SendMessage(GetDlgItem(hdlg, DIALOG_stbi_only), BM_SETCHECK, only_stbi, 0);
SendMessage(GetDlgItem(hdlg, DIALOG_showborder), BM_SETCHECK, show_frame, 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);
set_dialog_number(DIALOG_labelheight, label_font_height);
set_dialog_numberf(DIALOG_slideshowtime, delay_time);
return TRUE;
}
case WM_PAINT: {
@ -1920,10 +1953,14 @@ BOOL CALLBACK PrefDlgProc(HWND hdlg, UINT imsg, WPARAM wparam, LPARAM lparam)
case DIALOG_labelheight:
if (n == EN_KILLFOCUS) dialog_clamp(k,1,200);
break;
case DIALOG_slideshowtime:
if (n == EN_KILLFOCUS) dialog_clampf(k,0,3600 * 24 * 31); // 1 month
break;
case IDOK: {
// user clicked ok... copy out current values to check for changes
unsigned char cur[6];
unsigned char curc[6];
int new_border;
int old_cubic = upsample_cubic;
memcpy(cur, alpha_background, 6);
@ -1932,12 +1969,14 @@ BOOL CALLBACK PrefDlgProc(HWND hdlg, UINT imsg, WPARAM wparam, LPARAM lparam)
alpha_background[0][i] = get_dialog_number(DIALOG_r1+i);
max_cache_bytes = get_dialog_number(DIALOG_cachesize) << 20;
label_font_height = get_dialog_number(DIALOG_labelheight);
delay_time = get_dialog_numberf(DIALOG_slideshowtime);
upsample_cubic = BST_CHECKED == SendMessage(GetDlgItem(hdlg,DIALOG_upsample ), BM_GETCHECK,0,0);
show_label = BST_CHECKED == SendMessage(GetDlgItem(hdlg,DIALOG_showlabel), BM_GETCHECK,0,0);
only_stbi = BST_CHECKED == SendMessage(GetDlgItem(hdlg,DIALOG_stbi_only), BM_GETCHECK,0,0);
new_border = BST_CHECKED == SendMessage(GetDlgItem(hdlg,DIALOG_showborder),BM_GETCHECK,0,0);
// if alpha_background changed, clear the cache of any images that used it
if (memcmp(alpha_background, cur, 6)) {
if (memcmp(alpha_background, curc, 6)) {
stb_mutex_begin(cache_mutex);
for (i=0; i < MAX_CACHED_IMAGES; ++i) {
if (cache[i].status == LOAD_available) {
@ -1960,6 +1999,13 @@ BOOL CALLBACK PrefDlgProc(HWND hdlg, UINT imsg, WPARAM wparam, LPARAM lparam)
advance(0);
}
// if border changed, update
if (new_border != show_frame) {
toggle_frame();
extra_border = show_frame;
if (cur) frame(cur);
}
// save the data out to the registry
reg_save();
@ -2061,6 +2107,7 @@ int WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
// if the most recently-browsed and displayable image is an error, show it
if (best->status == LOAD_error_reading || best->status == LOAD_error_decoding)
set_error(best);
break;
}
@ -2130,7 +2177,6 @@ int WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_TIMER: {
advance(1);
return 0;
break;
}
#define MY_SHIFT (1 << 16)
@ -2163,10 +2209,10 @@ int WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
InvalidateRect(win, NULL, FALSE);
break;
case 'S':
case 's': case 'S':
do_show = !do_show;
if (do_show)
SetTimer(win,0,delay_time,NULL);
SetTimer(win,0,(int)(1000*delay_time),NULL);
else
KillTimer(win,0);
break;
@ -2518,6 +2564,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
pending_resize.image = NULL;
}
cur_filename = strdup(filename);
if (!show_frame) {
x += FRAME;
y += FRAME;
w -= FRAME*2;
h -= FRAME*2;
}
// create the window
hWnd = CreateWindow(szAppName, displayName,

View File

@ -1,5 +1,6 @@
Version 0.96: Beta 8 ( )
* feature: TGA support in stb_image
* feature: save border choice to registry (expose in prefs)
Version 0.95: Beta 7 ( 2007-08-15 )
* bugfix: minor stb_image.c fixes

30
pref.rc
View File

@ -52,15 +52,15 @@ END
// Dialog
//
IDD_pref DIALOG DISCARDABLE 0, 0, 161, 196
IDD_pref DIALOG DISCARDABLE 0, 0, 161, 226
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "imv(stb) preferences"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,23,172,50,14
PUSHBUTTON "Cancel",IDCANCEL,83,172,50,14
CONTROL "High-quality resizing",DIALOG_upsample,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,23,116,76,10
DEFPUSHBUTTON "OK",IDOK,23,199,50,14
PUSHBUTTON "Cancel",IDCANCEL,83,199,50,14
CONTROL "High-quality &resizing",DIALOG_upsample,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,23,166,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
@ -71,16 +71,20 @@ BEGIN
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,10,130,21,13,ES_AUTOHSCROLL
LTEXT "Size of image cache in megabytes",IDC_STATIC,35,133,107,
EDITTEXT DIALOG_cachesize,10,150,21,13,ES_AUTOHSCROLL
LTEXT "Size of image cache (megabytes)",IDC_STATIC,34,153,107,
8
LTEXT "",DIALOG_image,45,7,70,28
EDITTEXT DIALOG_labelheight,11,99,20,12,ES_AUTOHSCROLL
LTEXT "Label font height",IDC_STATIC,35,101,104,10
CONTROL "Show filename label",DIALOG_showlabel,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,23,87,120,10
EDITTEXT DIALOG_labelheight,10,118,21,12,ES_AUTOHSCROLL
LTEXT "Label font height",IDC_STATIC,34,120,56,10
CONTROL "Show filename &label",DIALOG_showlabel,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,23,104,120,10
CONTROL "Only use stb_image loaders",DIALOG_stbi_only,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,23,149,111,10
BS_AUTOCHECKBOX | WS_TABSTOP,23,179,111,10
CONTROL "Show &border",DIALOG_showborder,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,23,91,82,10
EDITTEXT DIALOG_slideshowtime,10,134,21,12,ES_AUTOHSCROLL
LTEXT "Slideshow time (seconds)",IDC_STATIC,34,136,96,10
END
@ -97,7 +101,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 154
TOPMARGIN, 7
BOTTOMMARGIN, 189
BOTTOMMARGIN, 219
END
END
#endif // APSTUDIO_INVOKED

32
resource.h Normal file
View File

@ -0,0 +1,32 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by pref.rc
//
#define IDD_DIALOG1 101
#define IDD_pref 101
#define IDI_ICON1 102
#define DIALOG_upsample 1000
#define DIALOG_r1 1001
#define DIALOG_g1 1002
#define DIALOG_b1 1003
#define DIALOG_r2 1004
#define DIALOG_g2 1005
#define DIALOG_b2 1006
#define DIALOG_cachesize 1007
#define DIALOG_image 1008
#define DIALOG_labelheight 1009
#define DIALOG_showlabel 1010
#define DIALOG_stbi_only 1011
#define DIALOG_showborder 1012
#define DIALOG_slideshowtime 1013
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1013
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif