From 69d651dd5933520713ac0ecb4875f0e6702ba002 Mon Sep 17 00:00:00 2001 From: mogguh Date: Tue, 26 May 2009 23:01:19 +0000 Subject: Statics defined in theme don't necessarily need a width or height set, if omitted the the values from the texture itself will be used SelectSlides may now have arrows and only one item set, default is off - view UScreenOptionsGame.pas as example on how to set this git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@1783 b956fd51-792f-4845-bead-9b4dfca2ff2c --- game/themes/Deluxe/Blue.ini | 3 ++ game/themes/Deluxe/[main]selectbg.png | Bin 260 -> 2969 bytes game/themes/Deluxe/interface/select_arrow_left.png | Bin 0 -> 485 bytes .../themes/Deluxe/interface/select_arrow_right.png | Bin 0 -> 485 bytes src/base/UGraphic.pas | 8 +++- src/base/UTexture.pas | 4 +- src/base/UThemes.pas | 7 +-- src/menu/UMenu.pas | 32 +++++++++++-- src/menu/UMenuSelectSlide.pas | 50 ++++++++++++++++++--- src/screens/UScreenOptionsGame.pas | 19 ++++++++ 10 files changed, 106 insertions(+), 17 deletions(-) create mode 100644 game/themes/Deluxe/interface/select_arrow_left.png create mode 100644 game/themes/Deluxe/interface/select_arrow_right.png diff --git a/game/themes/Deluxe/Blue.ini b/game/themes/Deluxe/Blue.ini index 30c68e3e..6cd2cb04 100644 --- a/game/themes/Deluxe/Blue.ini +++ b/game/themes/Deluxe/Blue.ini @@ -29,6 +29,9 @@ ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png SelectBG = [main]selectbg.png +Select_ArrowLeft = interface/select_arrow_left.png +Select_ArrowRight = interface/select_arrow_right.png + #Backgrounds LoadingBG = [bg-load]blue.jpg MainBG = [bg-main]blue.jpg diff --git a/game/themes/Deluxe/[main]selectbg.png b/game/themes/Deluxe/[main]selectbg.png index 093be9a5..f1b69eca 100644 Binary files a/game/themes/Deluxe/[main]selectbg.png and b/game/themes/Deluxe/[main]selectbg.png differ diff --git a/game/themes/Deluxe/interface/select_arrow_left.png b/game/themes/Deluxe/interface/select_arrow_left.png new file mode 100644 index 00000000..e4a32d2d Binary files /dev/null and b/game/themes/Deluxe/interface/select_arrow_left.png differ diff --git a/game/themes/Deluxe/interface/select_arrow_right.png b/game/themes/Deluxe/interface/select_arrow_right.png new file mode 100644 index 00000000..b2a29793 Binary files /dev/null and b/game/themes/Deluxe/interface/select_arrow_right.png differ diff --git a/src/base/UGraphic.pas b/src/base/UGraphic.pas index e7b3d695..82cb3c50 100644 --- a/src/base/UGraphic.pas +++ b/src/base/UGraphic.pas @@ -198,7 +198,11 @@ var Tex_Score_NoteBarRound_Lightest : array [1..6] of TTexture; Tex_Score_Ratings : array [0..7] of TTexture; - + + //Arrows for SelectSlide + Tex_SelectS_ArrowL: TTexture; + Tex_SelectS_ArrowR: TTexture; + const Skin_BGColorR = 1; Skin_BGColorG = 1; @@ -328,6 +332,8 @@ begin Tex_Ball := Texture.LoadTexture(Skin.GetTextureFileName('Ball'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); Tex_Lyric_Help_Bar := Texture.LoadTexture(Skin.GetTextureFileName('LyricHelpBar'), TEXTURE_TYPE_TRANSPARENT, $FF00FF); + Tex_SelectS_ArrowL := Texture.LoadTexture(Skin.GetTextureFileName('Select_ArrowLeft'), TEXTURE_TYPE_TRANSPARENT, 0); + Tex_SelectS_ArrowR := Texture.LoadTexture(Skin.GetTextureFileName('Select_ArrowRight'), TEXTURE_TYPE_TRANSPARENT, 0); //TimeBar mod Tex_TimeProgress := Texture.LoadTexture(Skin.GetTextureFileName('TimeBar')); diff --git a/src/base/UTexture.pas b/src/base/UTexture.pas index 962bd2b0..97f244fe 100644 --- a/src/base/UTexture.pas +++ b/src/base/UTexture.pas @@ -336,8 +336,8 @@ begin X := 0; Y := 0; Z := 0; - W := 0; - H := 0; + W := oldWidth; + H := oldHeight; ScaleW := 1; ScaleH := 1; Rot := 0; diff --git a/src/base/UThemes.pas b/src/base/UThemes.pas index 4c5434f8..832e17d9 100644 --- a/src/base/UThemes.pas +++ b/src/base/UThemes.pas @@ -175,11 +175,12 @@ type W: integer; H: integer; Z: real; + SBGW: integer; TextSize: integer; - //SBGW Mod - SBGW: integer; + showArrows:boolean; + oneItemOnly:boolean; Text: string; ColR, ColG, ColB, Int: real; @@ -1785,7 +1786,7 @@ begin ThemeSelectS.SkipX := ThemeIni.ReadInteger(Name, 'SkipX', 0); - ThemeSelectS.SBGW := ThemeIni.ReadInteger(Name, 'SBGW', 450); + ThemeSelectS.SBGW := ThemeIni.ReadInteger(Name, 'SBGW', 400); LoadColor(ThemeSelectS.ColR, ThemeSelectS.ColG, ThemeSelectS.ColB, ThemeIni.ReadString(Name, 'Color', '')); ThemeSelectS.Int := ThemeIni.ReadFloat(Name, 'Int', 1); diff --git a/src/menu/UMenu.pas b/src/menu/UMenu.pas index f86746ed..ceb4ac77 100644 --- a/src/menu/UMenu.pas +++ b/src/menu/UMenu.pas @@ -652,12 +652,22 @@ begin begin Static[StatNum] := TStatic.Create(Texture.GetTexture(Name, Typ, Color)); // new skin end; - + // configures static Static[StatNum].Texture.X := X; Static[StatNum].Texture.Y := Y; - Static[StatNum].Texture.W := W; - Static[StatNum].Texture.H := H; + + //Set height and width via sprite size if omitted + if(H = 0) then + Static[StatNum].Texture.H := Static[StatNum].Texture.H + else + Static[StatNum].Texture.H := H; + + if(W = 0) then + Static[StatNum].Texture.W := Static[StatNum].Texture.W + else + Static[StatNum].Texture.W := W; + Static[StatNum].Texture.Z := Z; if (Typ <> TEXTURE_TYPE_COLORIZED) then begin @@ -1212,6 +1222,9 @@ begin SelectsS[High(SelectsS)].Texture.Z := ThemeSelectS.Z; SelectsS[High(SelectsS)].TextureSBG.Z := ThemeSelectS.Z; + SelectsS[High(SelectsS)].showArrows := ThemeSelectS.showArrows; + SelectsS[High(SelectsS)].oneItemOnly := ThemeSelectS.oneItemOnly; + //Generate Lines SelectsS[High(SelectsS)].GenLines; @@ -1255,9 +1268,20 @@ begin else SelectsS[S].TextureSBG := Texture.GetTexture(SBGName, SBGTyp); + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL := Tex_SelectS_ArrowL; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.X := X + W + SkipX; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.Y := Y; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.W := Tex_SelectS_ArrowL.W; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowL.H := Tex_SelectS_ArrowL.H; + + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR := Tex_SelectS_ArrowR; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.X := X + W + SkipX + SBGW - Tex_SelectS_ArrowR.W; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.Y := Y; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.W := Tex_SelectS_ArrowR.W; + SelectsS[High(SelectsS)].Tex_SelectS_ArrowR.H := Tex_SelectS_ArrowR.H; + SelectsS[S].TextureSBG.X := X + W + SkipX; SelectsS[S].TextureSBG.Y := Y; - //SelectsS[S].TextureSBG.W := 450; SelectsS[S].SBGW := SBGW; SelectsS[S].TextureSBG.H := H; SelectsS[S].SBGColR := SBGColR; diff --git a/src/menu/UMenuSelectSlide.pas b/src/menu/UMenuSelectSlide.pas index a7133492..81870ab8 100644 --- a/src/menu/UMenuSelectSlide.pas +++ b/src/menu/UMenuSelectSlide.pas @@ -54,8 +54,8 @@ type TextureSBG: TTexture; // Background Selections Texture // TextureS: array of TTexture; // Selections Texture (not used) -// TextureArrowL: TTexture; // Texture for left arrow (not used yet) -// TextureArrowR: TTexture; // Texture for right arrow (not used yet) + Tex_SelectS_ArrowL: TTexture; // Texture for left arrow + Tex_SelectS_ArrowR: TTexture; // Texture for right arrow SelectOptInt: integer; PData: ^integer; @@ -63,6 +63,12 @@ type //For automatically Setting LineCount Lines: byte; + //Arrows on/off + showArrows: Boolean; //default is false + + //whether to show one item or all that fit into the select + oneItemOnly:Boolean; //default is false + //Visibility Visible: boolean; @@ -147,7 +153,7 @@ begin TextOpt[0] := TText.Create; //Set Standard Width for Selections Background - SBGW := 450; +// SBGW := 400; Visible := true; {SetLength(TextOpt, 3); @@ -250,6 +256,8 @@ begin begin //First Option Selected Value := 0; + Tex_SelectS_ArrowL.alpha := 0; + for SO := low (TextOpt) to high(TextOpt) do begin TextOpt[SO].Text := TextOptT[SO]; @@ -261,6 +269,8 @@ begin begin //Last Option Selected Value := high(TextOptT); + Tex_SelectS_ArrowR.alpha := 0; + for SO := high(TextOpt) downto low (TextOpt) do begin TextOpt[SO].Text := TextOptT[high(TextOptT)-(Lines-SO-1)]; @@ -269,6 +279,9 @@ begin end else begin + Tex_SelectS_ArrowL.alpha := 1; + Tex_SelectS_ArrowR.alpha := 1; + HalfL := Ceil((Lines-1)/2); HalfR := Lines-1-HalfL; @@ -322,6 +335,11 @@ begin DrawTexture(Texture); DrawTexture(TextureSBG); + if(showArrows) then begin + DrawTexture(Tex_SelectS_ArrowL); + DrawTexture(Tex_SelectS_ArrowR); + end; + Text.Draw; for SO := low(TextOpt) to high(TextOpt) do @@ -329,6 +347,8 @@ begin end; end; + + procedure TSelectSlide.GenLines; var maxlength: real; @@ -344,12 +364,22 @@ begin maxlength := glTextWidth(TextOptT[I]); end; - Lines := floor((TextureSBG.W-40) / (maxlength+7)); - if (Lines > Length(TextOptT)) then - Lines := Length(TextOptT); - if (Lines <= 0) then + if(oneItemOnly = false) then + begin + //show all items + Lines := floor((TextureSBG.W-40) / (maxlength+7)); + if (Lines > Length(TextOptT)) then + Lines := Length(TextOptT); + + if (Lines <= 0) then + Lines := 1; + end + else + begin + //show one item only Lines := 1; + end; //Free old Space used by Texts for I := low(TextOpt) to high(TextOpt) do @@ -382,6 +412,12 @@ begin //Better Look with 2 Options if (Lines=2) AND (Length(TextOptT)= 2) then TextOpt[I].X := TextureSBG.X + 20 + (TextureSBG.W -40 - glTextWidth(TextOptT[1])) * I; + + if (Lines=1) then + begin + TextOpt[I].Align := 1; //center text + TextOpt[I].X := TextureSBG.X + (TextureSBG.W / 2); + end; end; end; diff --git a/src/screens/UScreenOptionsGame.pas b/src/screens/UScreenOptionsGame.pas index 3c78363f..3f1cca81 100644 --- a/src/screens/UScreenOptionsGame.pas +++ b/src/screens/UScreenOptionsGame.pas @@ -126,13 +126,32 @@ begin old_Sorting := Ini.Sorting; old_Tabs := Ini.Tabs; + Theme.OptionsGame.SelectPlayers.showArrows := true; + Theme.OptionsGame.SelectPlayers.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectPlayers, Ini.Players, IPlayers); + + Theme.OptionsGame.SelectDifficulty.showArrows := true; + Theme.OptionsGame.SelectDifficulty.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectDifficulty, Ini.Difficulty, IDifficulty); + + Theme.OptionsGame.SelectLanguage.showArrows := true; + Theme.OptionsGame.SelectLanguage.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectLanguage, Ini.Language, ILanguage); + + Theme.OptionsGame.SelectTabs.showArrows := true; + Theme.OptionsGame.SelectTabs.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectTabs, Ini.Tabs, ITabs); + + Theme.OptionsGame.SelectSorting.showArrows := true; + Theme.OptionsGame.SelectSorting.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectSorting, Ini.Sorting, ISorting); + + Theme.OptionsGame.SelectDebug.showArrows := true; + Theme.OptionsGame.SelectDebug.oneItemOnly := true; AddSelectSlide(Theme.OptionsGame.SelectDebug, Ini.Debug, IDebug); + + AddButton(Theme.OptionsGame.ButtonExit); if (Length(Button[0].Text)=0) then AddButtonText(14, 20, Theme.Options.Description[7]); -- cgit v1.2.3