Skip to content

Commit cc0b5a6

Browse files
authored
Merge pull request #1826 from gforney/screen
add command line parameters for specifying startup screen position
2 parents 815534f + fd48d0d commit cc0b5a6

File tree

8 files changed

+104
-1
lines changed

8 files changed

+104
-1
lines changed

Source/smokeview/command_args.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,14 @@ CommandlineArgs ParseCommandlineNew(int argc, char **argv, char *message,
206206
i++;
207207
sscanf(argv[i],"%f",&args.max_mem_GB);
208208
if(args.max_mem_GB<0.0)args.max_mem_GB = 0.0;
209+
} else if(strcmp(argv[i], "-x0") == 0) {
210+
args.have_x0 = true;
211+
i++;
212+
sscanf(argv[i],"%i",&args.x0);
213+
} else if(strcmp(argv[i], "-y0") == 0) {
214+
args.have_y0 = true;
215+
i++;
216+
sscanf(argv[i],"%i",&args.y0);
209217
} else if (strcmp(argv[i], "-geominfo") == 0) {
210218
args.geominfo = true;
211219
} else if (strcmp(argv[i], "-fast") == 0) {

Source/smokeview/command_args.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ typedef struct CommandlineArgs {
120120
char *ini_to;
121121
char *ssf_from;
122122
char *ssf_to;
123+
/// @brief initial screen coordinates
124+
bool have_x0, have_y0;
125+
int x0, y0;
123126
} CommandlineArgs;
124127

125128
enum CommandLineError {

Source/smokeview/glui_display.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ GLUI_Rollout *ROLLOUT_light2 = NULL;
144144

145145
GLUI_Panel *PANEL_boundingbox = NULL;
146146
GLUI_Panel *PANEL_titles=NULL;
147+
GLUI_Panel *PANEL_screen = NULL;
147148
GLUI_Panel *PANEL_light=NULL;
148149
GLUI_Panel *PANEL_position0=NULL;
149150
GLUI_Panel *PANEL_position1 = NULL;
@@ -242,7 +243,9 @@ GLUI_Button *BUTTON_label_4=NULL;
242243
#define LABELS_REFRESH_RATE 37
243244
#endif
244245
#define LABELS_BOUNDING_BOX 38
245-
246+
#define LABELS_show_screen_origin 39
247+
#define LABELS_save_screen_origin 40
248+
#define LABELS_reset_screen_origin 41
246249

247250
#define LABELS_HMS 18
248251
#define SAVE_SETTINGS_DISPLAY 99
@@ -699,6 +702,11 @@ extern "C" void GLUIDisplaySetup(int main_window){
699702
CHECKBOX_labels_availmemory = glui_labels->add_checkbox_to_panel(PANEL_gen1, _("Memory load"), &visAvailmemory, LABELS_label, GLUILabelsCB);
700703
#endif
701704

705+
PANEL_screen = glui_labels->add_panel_to_panel(PANEL_gen1, "Screen");
706+
glui_labels->add_button_to_panel(PANEL_screen,_("Show origin"), LABELS_show_screen_origin, GLUILabelsCB);
707+
glui_labels->add_button_to_panel(PANEL_screen,_("Save origin"), LABELS_save_screen_origin, GLUILabelsCB);
708+
glui_labels->add_button_to_panel(PANEL_screen,_("Reset origin to (0,0)"), LABELS_reset_screen_origin, GLUILabelsCB);
709+
702710
glui_labels->add_column_to_panel(PANEL_gen1, false);
703711

704712
CHECKBOX_labels_meshlabel = glui_labels->add_checkbox_to_panel(PANEL_gen1, _("Mesh"), &visMeshlabel, LABELS_meshlabel, GLUILabelsCB);
@@ -1147,6 +1155,15 @@ extern "C" void GLUIUpdateGeomBoundingBox(void){
11471155
extern "C" void GLUILabelsCB(int var){
11481156
updatemenu=1;
11491157
switch(var){
1158+
case LABELS_show_screen_origin:
1159+
printf("screen origin: (%i, %i)\n", (int)glutGet((GLenum)GLUT_WINDOW_X), (int)glutGet((GLenum)GLUT_WINDOW_Y));
1160+
break;
1161+
case LABELS_save_screen_origin:
1162+
SaveScreenOrigin((int)glutGet((GLenum)GLUT_WINDOW_X), (int)glutGet((GLenum)GLUT_WINDOW_Y));
1163+
break;
1164+
case LABELS_reset_screen_origin:
1165+
SaveScreenOrigin(0, 0);
1166+
break;
11501167
case LABELS_BOUNDING_BOX:
11511168
updatemenu = 1;
11521169
break;

Source/smokeview/main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ void Usage(char *prog,int option){
115115
PRINTF("%s\n", _(" -update_slice - calculate slice file parameters"));
116116
PRINTF("%s\n", _(" -update - equivalent to -update_bounds and -update_slice"));
117117
PRINTF("%s\n", _(" -update_ini case.ini - update case.ini to the current format"));
118+
PRINTF("%s\n", _(" -x0 val - horizontal screen coordinate in pixels where window is place at startup"));
119+
PRINTF("%s\n", _(" -y0 val - vertical screen coordinate in pixels where window is place at startup"));
118120
PRINTF("%s\n", _(" -volrender - generate images of volume rendered smoke and fire"));
119121
UsageCommon(HELP_ALL);
120122
}
@@ -182,6 +184,14 @@ char *ProcessCommandLine(CommandlineArgs *args) {
182184
void SMV_EXIT(int error);
183185
SMV_EXIT(0);
184186
}
187+
if(args->have_x0){
188+
use_commandline_origin = 1;
189+
screenOriginX = args->x0;
190+
}
191+
if(args->have_y0){
192+
use_commandline_origin = 1;
193+
screenOriginY = args->y0;
194+
}
185195
if (args->csv) {
186196
update_csv_load = 1;
187197
}

Source/smokeview/menus.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1864,6 +1864,50 @@ void GetNextViewLabel(char *label){
18641864
}
18651865
}
18661866

1867+
/* ------------------ SaveScreenOrigin ------------------------ */
1868+
1869+
void SaveScreenOrigin(int x, int y){
1870+
FILE *stream;
1871+
1872+
stream = fopen(smv_screenini, "w");
1873+
if(stream==NULL)return;
1874+
fprintf(stream, "%i %i", x, y);
1875+
fclose(stream);
1876+
}
1877+
1878+
/* ------------------ GetScreenOrigin ------------------------ */
1879+
1880+
int GetScreenOrigin(int *x, int *y){
1881+
FILE *stream;
1882+
char buffer[255];
1883+
1884+
stream = fopen(smv_screenini, "r");
1885+
if(stream==NULL)return 0;
1886+
fgets(buffer, 255, stream);
1887+
sscanf(buffer, "%i %i", x, y);
1888+
fclose(stream);
1889+
return 1;
1890+
}
1891+
1892+
/* ------------------ ScreenMenu ------------------------ */
1893+
1894+
void ScreenMenu(int value){
1895+
switch (value){
1896+
case 1:
1897+
printf("screen origin: (%i, %i)\n", (int)glutGet((GLenum)GLUT_WINDOW_X), (int)glutGet((GLenum)GLUT_WINDOW_Y));
1898+
break;
1899+
case 2:
1900+
SaveScreenOrigin((int)glutGet((GLenum)GLUT_WINDOW_X), (int)glutGet((GLenum)GLUT_WINDOW_Y));
1901+
break;
1902+
case 3:
1903+
SaveScreenOrigin(0, 0);
1904+
break;
1905+
default:
1906+
assert(FFALSE);
1907+
break;
1908+
}
1909+
}
1910+
18671911
/* ------------------ ResetMenu ------------------------ */
18681912

18691913
void ResetMenu(int value){
@@ -8472,6 +8516,7 @@ static int smokecolorbars_submenu1 = 0, smokecolorbars_submenu2 = 0, smokecolorb
84728516
static int smokecolorbars_submenu4 = 0, smokecolorbars_submenu5 = 0, smokecolorbars_submenu6 = 0;
84738517
static int smokecolorbars_submenu7 = 0;
84748518
static int resetmenu=0, defaultviewmenu=0, frameratemenu=0, rendermenu=0, smokeviewinimenu=0, inisubmenu=0, resolutionmultipliermenu=0;
8519+
static int screenmenu = 0;
84758520
static int terrain_geom_showmenu = 0;
84768521
static int render_resolutionmenu=0, render_filetypemenu=0, render_filesuffixmenu=0, render_skipmenu=0;
84778522
static int render_startmenu = 0;
@@ -10709,6 +10754,13 @@ static int menu_count=0;
1070910754
glutAddMenuEntry(line, ca->view_id);
1071010755
}
1071110756

10757+
/* --------------------------------screen menu -------------------------- */
10758+
10759+
CREATEMENU(screenmenu, ScreenMenu);
10760+
glutAddMenuEntry("Show screen origin", 1);
10761+
glutAddMenuEntry("Save screen origin", 2);
10762+
glutAddMenuEntry("Reset screen origin", 3);
10763+
1071210764
/* --------------------------------reset menu -------------------------- */
1071310765

1071410766
CREATEMENU(resetmenu,ResetMenu);
@@ -10806,6 +10858,7 @@ static int menu_count=0;
1080610858

1080710859
GLUTADDSUBMENU(_("Viewpoints (default)"), defaultviewmenu);
1080810860
GLUTADDSUBMENU(_("Viewpoints (user)"), resetmenu);
10861+
GLUTADDSUBMENU(_("Screen"), screenmenu);
1080910862
glutAddMenuEntry("-", MENU_DUMMY);
1081010863
if(nsmoke3dloaded>0){
1081110864
showhide_data = 1;

Source/smokeview/smokeheaders.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,9 @@ EXTERNCPP void SetupPlot2DUnitData(void);
323323

324324
EXTERNCPP void TimeAveragePlot2DData(float *times, float *vals, float *vals_avg, int nvals, float time_interval);
325325

326+
EXTERNCPP void SaveScreenOrigin(int x, int y);
327+
EXTERNCPP int GetScreenOrigin(int *x, int *y);
328+
326329
EXTERNCPP void SetHVACInfo(void);
327330
EXTERNCPP void DrawHVACS(void);
328331
EXTERNCPP hvacnodedata *GetHVACNode(hvacdata *hvaci, int node_id);

Source/smokeview/smokeviewvars.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1353,6 +1353,9 @@ SVEXTERN float SVDECL(scene_aspect_ratio,1.0);
13531353
SVEXTERN int SVDECL(fix_window_aspect, 0);
13541354
SVEXTERN float SVDECL(window_aspect,640.0/480.0);
13551355
SVEXTERN int SVDECL(screenWidth,640), SVDECL(screenHeight,480);
1356+
SVEXTERN int SVDECL(screenOriginX, 0), SVDECL(screenOriginY, 0);
1357+
SVEXTERN int SVDECL(use_commandline_origin, 0);
1358+
SVEXTERN char SVDECL(*smv_screenini, NULL);
13561359
SVEXTERN int screenWidth_save, screenHeight_save;
13571360
SVEXTERN int SVDECL(screenWidthINI,640), SVDECL(screenHeightINI,480);
13581361
SVEXTERN int SVDECL(glui_screenWidth,640), SVDECL(glui_screenHeight,480);

Source/smokeview/startup.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,10 @@ void InitStartupDirs(void){
425425
MKDIR(smokeview_scratchdir);
426426
}
427427

428+
NewMemory((void **)&smv_screenini, strlen(smokeview_scratchdir) + strlen("smv_screen.ini") + 1);
429+
strcpy(smv_screenini, smokeview_scratchdir);
430+
strcat(smv_screenini, "smv_screen.ini");
431+
428432
NewMemory((void **)&colorbars_user_dir, strlen(homedir) + strlen(dirseparator) + strlen(".smokeview") + strlen(dirseparator) + strlen("colorbars") + 1);
429433
strcpy(colorbars_user_dir, homedir);
430434
strcat(colorbars_user_dir, dirseparator);
@@ -494,6 +498,8 @@ void SetupGlut(int argc, char **argv){
494498
if(verbose_output==1)PRINTF("%s",_("initializing Smokeview graphics window - "));
495499
#endif
496500
glutInitWindowSize(screenWidth, screenHeight);
501+
if(use_commandline_origin == 0)GetScreenOrigin(&screenOriginX, &screenOriginY);
502+
glutInitWindowPosition(screenOriginX, screenOriginY);
497503
#ifdef _DEBUG
498504
if(verbose_output==1)PRINTF("%s\n",_("initialized"));
499505
#endif

0 commit comments

Comments
 (0)