diff --git a/src/include/font.h b/src/include/font.h index 329d78545..f11273afc 100644 --- a/src/include/font.h +++ b/src/include/font.h @@ -101,6 +101,11 @@ enum _game_font_ { LargeFont, /// Large font used in menus SmallTitleFont, /// Small font used in episoden titles LargeTitleFont, /// Large font used in episoden titles + User1Font, /// User font 1 + User2Font, /// User font 2 + User3Font, /// User font 3 + User4Font, /// User font 4 + User5Font, /// User font 5 // ... more to come or not MaxFonts, /// Number of fonts supported }; diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp index a14a8e3f3..513779f00 100644 --- a/src/ui/script_ui.cpp +++ b/src/ui/script_ui.cpp @@ -890,7 +890,6 @@ local SCM CclDefineUI(SCM list) value=gh_car(temp); temp=gh_cdr(temp); y=gh_scm2int(value); -#ifdef SPLIT_SCREEN_SUPPORT ui->MapArea.X=x; ui->MapArea.Y=y; if ( ui->MapArea.X < 0 || ui->MapArea.Y < 0 ) { @@ -911,28 +910,6 @@ local SCM CclDefineUI(SCM list) fprintf(stderr,"map bottom-right point expected\n"); return SCM_UNSPECIFIED; } -#else /* SPLIT_SCREEN_SUPPORT */ - ui->MapX=x; - ui->MapY=y; - if ( ui->MapX < 0 || ui->MapY < 0 ) { - fprintf(stderr,"map top-left point expected\n"); - return SCM_UNSPECIFIED; - } - value=gh_car(temp); - temp=gh_cdr(temp); - x=gh_scm2int(value); - value=gh_car(temp); - temp=gh_cdr(temp); - y=gh_scm2int(value); - //StephanR: note that the bottom-right point is one pixel off - ui->MapEndX=x - 1; - ui->MapEndY=y - 1; - if ( x < 1 || y < 1 || - ui->MapEndX < ui->MapX || ui->MapEndY < ui->MapY ) { - fprintf(stderr,"map bottom-right point expected\n"); - return SCM_UNSPECIFIED; - } -#endif /* SPLIT_SCREEN_SUPPORT */ // MenuButton temp=gh_car(list); @@ -1211,6 +1188,757 @@ local SCM CclDefineUI(SCM list) return SCM_UNSPECIFIED; } +/** +** Define the look+feel of the user interface. +** +** @param list Tagged list of the user interface configuration. +*/ +local SCM CclDefineNewUI(SCM list) +{ + SCM value; + //SCM temp; + char* str; + int x; + int y; + int i; + UI* ui; + void* v; + + // Get identifier + value=gh_car(list); + list=gh_cdr(list); + str=gh_scm2newstr(value,NULL); // race name + value=gh_car(list); + list=gh_cdr(list); + x=gh_scm2int(value); // width + value=gh_car(list); + list=gh_cdr(list); + y=gh_scm2int(value); // height + + // Find slot: new or redefinition + ui=NULL; + i=0; + if( UI_Table ) { + for( ; UI_Table[i]; ++i ) { + if( UI_Table[i]->Width==x && UI_Table[i]->Height==y + && !strcmp(UI_Table[i]->Name,str) ) { + DebugLevel0Fn("Warning redefining %s %dx%d\n" _C_ str _C_ + x _C_ y); + ui=UI_Table[i]; + break; + } + } + } + if( !ui ) { // New user interface config + ui=calloc(1,sizeof(UI)); + v=malloc(sizeof(UI*)*(i+2)); + memcpy(v,UI_Table,i*sizeof(UI*)); + free(UI_Table); + UI_Table=v; + UI_Table[i]=ui; + UI_Table[i+1]=NULL; + } + + free(ui->Name); + ui->Name=str; + ui->Width=x; + ui->Height=y; + + // + // Some value defaults + // + + // This save the setup values FIXME: They are set by CCL. + + ui->Contrast=TheUI.Contrast; + ui->Brightness=TheUI.Brightness; + ui->Saturation=TheUI.Saturation; + + ui->MouseScroll=TheUI.MouseScroll; + ui->KeyScroll=TheUI.KeyScroll; + ui->ReverseMouseMove=TheUI.ReverseMouseMove; + + ui->WarpX=-1; + ui->WarpY=-1; + + ui->MouseAdjust=TheUI.MouseAdjust; + ui->MouseScale=TheUI.MouseScale; + + ui->OriginalResources=TheUI.OriginalResources; + + // + // Now the real values. + // + while ( !gh_null_p(list) ) { + value=gh_car(list); + list=gh_cdr(list); + if( gh_eq_p(value,gh_symbol2scm("normal-font-color")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("reverse-font-color")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("filler-1")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("resources")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("info-panel")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("button-panel")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("map-area")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("menu-button")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("minimap")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("status-line")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("buttons")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("buttons-2")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("cursors")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("panels")) ) { + value=gh_car(list); + list=gh_cdr(list); + } else { + errl("Unsupported tag",value); + } + } + +#if 0 + // Filler 1 + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->Filler1.File); + ui->Filler1.File=str; + ui->Filler1X=x; + ui->Filler1Y=y; + + // Resource + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->Resource.File); + ui->Resource.File=str; + ui->ResourceX=x; + ui->ResourceY=y; + + // + // Parse icons + // + for( i=1; i<MaxCosts; ++i ) { + // icon + temp=gh_car(list); + list=gh_cdr(list); + + if( gh_null_p(temp) ) { + free(ui->Resources[i].Icon.File); + ui->Resources[i].Icon.File=NULL; + ui->Resources[i].Icon.Graphic=NULL; + ui->Resources[i].IconRow=0; + ui->Resources[i].IconX=0; + ui->Resources[i].IconY=0; + ui->Resources[i].IconW=0; + ui->Resources[i].IconH=0; + ui->Resources[i].TextX=0; + ui->Resources[i].TextY=0; + continue; + } + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Resources[i].Icon.File); + ui->Resources[i].Icon.File=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Resources[i].IconRow=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Resources[i].IconX=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Resources[i].IconY=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Resources[i].IconW=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Resources[i].IconH=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Resources[i].TextX=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Resources[i].TextY=y; + } + + // Food icon + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->FoodIcon.File); + ui->FoodIcon.File=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + i=gh_scm2int(value); + ui->FoodIconRow=i; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->FoodIconX=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->FoodIconY=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->FoodIconW=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->FoodIconH=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->FoodTextX=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->FoodTextY=y; + + // Score icon + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ScoreIcon.File); + ui->ScoreIcon.File=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + i=gh_scm2int(value); + ui->ScoreIconRow=i; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->ScoreIconX=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->ScoreIconY=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->ScoreIconW=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->ScoreIconH=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->ScoreTextX=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->ScoreTextY=y; + + // InfoPanel + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->InfoPanel.File); + ui->InfoPanel.File=str; + ui->InfoPanelX=x; + ui->InfoPanelY=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->InfoPanelW=x; + ui->InfoPanelH=y; + + // Completed bar + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + value=gh_car(temp); + temp=gh_cdr(temp); + i=gh_scm2int(value); + ui->CompleteBarColor=i; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->CompleteBarX=x; + ui->CompleteBarY=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->CompleteTextX=x; + ui->CompleteTextY=y; + + // ButtonPanel + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->ButtonPanel.File); + ui->ButtonPanel.File=str; + ui->ButtonPanelX=x; + ui->ButtonPanelY=y; + + // The map + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->MapArea.X=x; + ui->MapArea.Y=y; + if ( ui->MapArea.X < 0 || ui->MapArea.Y < 0 ) { + fprintf(stderr,"map top-left point expected\n"); + return SCM_UNSPECIFIED; + } + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + //StephanR: note that the bottom-right point is one pixel off + ui->MapArea.EndX = x-1; + ui->MapArea.EndY = y-1; + if ( x < 1 || y < 1 || ui->MapArea.EndX < ui->MapArea.X || + ui->MapArea.EndY < ui->MapArea.Y ) { + fprintf(stderr,"map bottom-right point expected\n"); + return SCM_UNSPECIFIED; + } + + // MenuButton + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->MenuButton.File); + ui->MenuButton.File=str; + ui->MenuButtonX=x; + ui->MenuButtonY=y; + + // Minimap + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->Minimap.File); + ui->Minimap.File=str; + ui->MinimapX=x; + ui->MinimapY=y; + + // StatusLine + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + + free(ui->StatusLine.File); + ui->StatusLine.File=str; + ui->StatusLineX=x; + ui->StatusLineY=y; + + // Buttons + for( i=0; i<MaxButtons; ++i ) { + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Buttons[i].X=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Buttons[i].Y=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Buttons[i].Width=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Buttons[i].Height=y; + } + for( i=0; i<6; ++i ) { + temp=gh_car(list); + list=gh_cdr(list); + + if( !gh_list_p(temp) ) { + fprintf(stderr,"list expected\n"); + return SCM_UNSPECIFIED; + } + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Buttons2[i].X=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Buttons2[i].Y=y; + + value=gh_car(temp); + temp=gh_cdr(temp); + x=gh_scm2int(value); + ui->Buttons2[i].Width=x; + + value=gh_car(temp); + temp=gh_cdr(temp); + y=gh_scm2int(value); + ui->Buttons2[i].Height=y; + } + + // + // Get the cursors definitions. + // + temp=gh_car(list); + list=gh_cdr(list); + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Point.Name); + ui->Point.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Glass.Name); + ui->Glass.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Cross.Name); + ui->Cross.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->YellowHair.Name); + ui->YellowHair.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->GreenHair.Name); + ui->GreenHair.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->RedHair.Name); + ui->RedHair.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Scroll.Name); + ui->Scroll.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowE.Name); + ui->ArrowE.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowNE.Name); + ui->ArrowNE.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowN.Name); + ui->ArrowN.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowNW.Name); + ui->ArrowNW.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowW.Name); + ui->ArrowW.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowSW.Name); + ui->ArrowSW.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowS.Name); + ui->ArrowS.Name=str; + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ArrowSE.Name); + ui->ArrowSE.Name=str; + + // + // Panels + // + temp=gh_car(list); + list=gh_cdr(list); + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->GameMenuePanel.File); + ui->GameMenuePanel.File=str; + + temp=gh_car(list); + list=gh_cdr(list); + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Menue1Panel.File); + ui->Menue1Panel.File=str; + + temp=gh_car(list); + list=gh_cdr(list); + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->Menue2Panel.File); + ui->Menue2Panel.File=str; + + temp=gh_car(list); + list=gh_cdr(list); + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->VictoryPanel.File); + ui->VictoryPanel.File=str; + + temp=gh_car(list); + list=gh_cdr(list); + + value=gh_car(temp); + temp=gh_cdr(temp); + str=gh_scm2newstr(value,NULL); + free(ui->ScenarioPanel.File); + ui->ScenarioPanel.File=str; +#endif + + return SCM_UNSPECIFIED; +} + /** ** Enable/disable scrolling with the mouse. ** @@ -1648,6 +2376,16 @@ local SCM CclDefineMenuItem(SCM list) item->font=SmallTitleFont; } else if( gh_eq_p(value,gh_symbol2scm("large-title")) ) { item->font=LargeTitleFont; + } else if( gh_eq_p(value,gh_symbol2scm("user1")) ) { + item->font=User1Font; + } else if( gh_eq_p(value,gh_symbol2scm("user2")) ) { + item->font=User2Font; + } else if( gh_eq_p(value,gh_symbol2scm("user3")) ) { + item->font=User3Font; + } else if( gh_eq_p(value,gh_symbol2scm("user4")) ) { + item->font=User4Font; + } else if( gh_eq_p(value,gh_symbol2scm("user5")) ) { + item->font=User5Font; } else { s1=gh_scm2newstr(value,NULL); fprintf(stderr,"Unsupported font %s\n",s1); @@ -2609,6 +3347,7 @@ global void UserInterfaceCclRegister(void) gh_new_procedureN("define-cursor",CclDefineCursor); gh_new_procedure1_0("set-game-cursor!",CclSetGameCursor); gh_new_procedureN("define-ui",CclDefineUI); + gh_new_procedureN("define-new-ui",CclDefineNewUI); gh_new_procedure1_0("set-grab-mouse!", CclSetGrabMouse); gh_new_procedure1_0("set-leave-stops!", CclSetLeaveStops); diff --git a/src/video/font.cpp b/src/video/font.cpp index 4be09654a..9a18d0cea 100644 --- a/src/video/font.cpp +++ b/src/video/font.cpp @@ -734,6 +734,16 @@ local SCM CclDefineFont(SCM type,SCM file,SCM width,SCM height) i=SmallTitleFont; } else if( gh_eq_p(type,gh_symbol2scm("large-title")) ) { i=LargeTitleFont; + } else if( gh_eq_p(type,gh_symbol2scm("user1")) ) { + i=User1Font; + } else if( gh_eq_p(type,gh_symbol2scm("user2")) ) { + i=User2Font; + } else if( gh_eq_p(type,gh_symbol2scm("user3")) ) { + i=User3Font; + } else if( gh_eq_p(type,gh_symbol2scm("user4")) ) { + i=User4Font; + } else if( gh_eq_p(type,gh_symbol2scm("user5")) ) { + i=User5Font; } else { fprintf(stderr,"unsupported font type\n"); return SCM_UNSPECIFIED;