From f0ab1dfef81a503f09a4970b9c4a82a48300d9e7 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sun, 2 Aug 2015 04:13:54 +1000 Subject: [PATCH] One menu scene works, but I need some more UI widgets Namely, I need a text box widget, which can display text without having to re-create and destroy the texture every frame. --- client/menu_scenes/disconnected_screen.cpp | 28 ++++++++++++--------- client/menu_scenes/disconnected_screen.hpp | 10 +++----- client/menu_scenes/makefile | 2 +- rsc/config.cfg | 4 ++- rsc/graphics/fonts/pk_dark_16.bmp | Bin 66614 -> 0 bytes rsc/graphics/fonts/pk_dark_8.bmp | Bin 33846 -> 0 bytes rsc/graphics/fonts/pk_white_8.bmp | Bin 33846 -> 0 bytes rsc/graphics/interface/button.png | Bin 0 -> 321 bytes rsc/graphics/interface/button_menu.bmp | Bin 18054 -> 0 bytes 9 files changed, 24 insertions(+), 20 deletions(-) delete mode 100644 rsc/graphics/fonts/pk_dark_16.bmp delete mode 100644 rsc/graphics/fonts/pk_dark_8.bmp delete mode 100644 rsc/graphics/fonts/pk_white_8.bmp create mode 100644 rsc/graphics/interface/button.png delete mode 100644 rsc/graphics/interface/button_menu.bmp diff --git a/client/menu_scenes/disconnected_screen.cpp b/client/menu_scenes/disconnected_screen.cpp index 4bf368b..90d2a2b 100644 --- a/client/menu_scenes/disconnected_screen.cpp +++ b/client/menu_scenes/disconnected_screen.cpp @@ -23,6 +23,7 @@ #include "channels.hpp" #include "config_utility.hpp" +#include "text_util.hpp" #include "udp_network_utility.hpp" #include @@ -35,20 +36,17 @@ DisconnectedScreen::DisconnectedScreen() { ConfigUtility& config = ConfigUtility::GetSingleton(); //setup the utility objects - image.LoadSurface(config["dir.interface"] + "button_menu.bmp"); - image.SetClipH(image.GetClipH()/3); - font.LoadSurface(config["dir.fonts"] + "pk_white_8.bmp"); + //TODO: (1) resource tool, to prevent reloading like this + image.Load(GetRenderer(), config["dir.interface"] + "button.png"); + font = TTF_OpenFont(config["client.font"].c_str(), 12); - //pass the utility objects - backButton.SetImage(&image); - backButton.SetFont(&font); + //setup the button + backButton.SetBackgroundTexture(GetRenderer(), image.GetTexture()); + backButton.SetText(GetRenderer(), font, "Back", COLOR_WHITE); //set the button positions backButton.SetX(50); - backButton.SetY(50 + image.GetClipH() * 0); - - //set the button texts - backButton.SetText("Back"); + backButton.SetY(50); //full reset UDPNetworkUtility::GetSingleton().Unbind(Channels::SERVER); @@ -71,7 +69,7 @@ void DisconnectedScreen::FrameStart() { void DisconnectedScreen::Update() { if (std::chrono::steady_clock::now() - startTick > std::chrono::duration(10)) { - SetNextScene(SceneList::MAINMENU); + SetSceneSignal(SceneSignal::MAINMENU); } //Eat incoming packets @@ -86,7 +84,13 @@ void DisconnectedScreen::RenderFrame(SDL_Renderer* renderer) { ConfigUtility& config = ConfigUtility::GetSingleton(); backButton.DrawTo(renderer); - font.DrawStringTo(config["client.disconnectMessage"], screen, 50, 30); + //render output message + SDL_Texture* tex = renderPlainText(renderer, font, config["client.disconnectMessage"], COLOR_WHITE); + int w = 0, h = 0; + SDL_QueryTexture(tex, nullptr, nullptr, &w, &h); + SDL_Rect d = {50, 30, w, h}; + SDL_RenderCopy(renderer, tex, nullptr, &d); + SDL_DestroyTexture(tex); } //------------------------- diff --git a/client/menu_scenes/disconnected_screen.hpp b/client/menu_scenes/disconnected_screen.hpp index b4c2047..a82444b 100644 --- a/client/menu_scenes/disconnected_screen.hpp +++ b/client/menu_scenes/disconnected_screen.hpp @@ -21,14 +21,11 @@ */ #pragma once -//graphics -#include "image.hpp" -#include "button.hpp" - -//client #include "base_scene.hpp" +#include "button.hpp" +#include "image.hpp" +#include "SDL2/SDL_ttf.h" -//std namespace #include class DisconnectedScreen : public BaseScene { @@ -55,6 +52,7 @@ protected: //graphics Image image; + TTF_Font* font = nullptr; Button backButton; //auto return diff --git a/client/menu_scenes/makefile b/client/menu_scenes/makefile index e006dc4..f03de53 100644 --- a/client/menu_scenes/makefile +++ b/client/menu_scenes/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../../common/graphics ../../common/map ../../common/network ../../common/network/packet_types ../../common/ui ../../common/utilities +INCLUDES+=. .. ../client_utilities ../../common/graphics ../../common/map ../../common/network ../../common/network/packet_types ../../common/ui ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/rsc/config.cfg b/rsc/config.cfg index a081695..cf72bdc 100644 --- a/rsc/config.cfg +++ b/rsc/config.cfg @@ -12,12 +12,14 @@ server.dbname = database.db #client.screen.h = 600 client.screen.f = false +#TODO: change this based on platform? +client.font = /usr/share/fonts/truetype/dejavu/DejaVuSans.ttf + client.username = username client.handle = handle client.avatar = elliot2.bmp #directories -dir.fonts = rsc/graphics/fonts/ dir.logos = rsc/graphics/logos/ dir.sprites = rsc/graphics/sprites/ dir.tilesets = rsc/graphics/tilesets/ diff --git a/rsc/graphics/fonts/pk_dark_16.bmp b/rsc/graphics/fonts/pk_dark_16.bmp deleted file mode 100644 index 97b23e0aba2af180d7b4dca6d86b64f6cae49cdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66614 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 XLbv`QHCs?K?aYozG9-42_WnD-s|6} zyF;_Z?j#B*0Eq&Ne2+aF``5qy^7mxNFMmwwFBoNNf8g(*I5NXO|C|yr9@(99wiuo< zOr?}m{$0{<|N2Kt+YTH6CbknOz?IUTfDOQ4KY$FJKmo3ljs$GL4nR3FZ~_Imf_H=5 zfdk0E2^8Q;3Bz=5zz!Th22P*=7m7^42JFBAWZ(n}aHWLbbZx*696$z6pa56e6Us~* zz@G!izzG!K@}+GXcHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2 z>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cHy2>cD4p;M=$F`2D)$>Dzbwu48pz zbzpU1b>RQK1LKFu=Y6_-3*sk}(98hM4Ikdtr}z{DAGn~If$X32@g{zk;+OpJ<<}4K z;EzxB&*QHJ_)^jI&*}TecXlzX4y+EW4y+EW4y+EW4*X6!;9n&5EiSarTRZ;u2KHyE z_!cR3DxiPc>Bp1XOKQBW^lni8 zKX|#hCx6xWonfrR7iQ0eg77;Pbzk=9A_o6CWP8 z)*H7w2Bt$~2p`Z*2A?*AMcW62e+h6#JL6{a`^|HC0y}?izUEo;S+@H5XOBD9!N*5P zW|UqZqfdwnHfOYRSZr!|4(oYMFQVmhe%W7=m7k4)v;3Q#7HUCn9@P2cUcGeoTf1lJ z?cg)#nBf92R4(^)Wadd9t-ztLN$bIjk{*_vG~ZRqZxftO}i|c8^)tb65V_@pfVD!PXI))BUUM z*%|FOs`5$Jyipelv*oee@QFLzGx;o6=Xy741}(nxV%;p8ryj~98z$W^_@&Fwf-S$f z^`mAmtDj_qv>{Hh9%Xb7o(W9a5-DsZguLOzW#I6*Zcq(29VfVZKP$hd<^J=4cIK!- z#6GX<(s;vu$1w1-@1EBJ>^j&w{dy?8@v4U4N0qi)wE0etP&3F3S;j-5U|+)s6CuiEydANLESbV~V< zo*JgxJ>m0@?9Gok`571SH~c<7`yE=C=qr}Rjd3U`FxUU$t|G7gA!~dcR3;zj*IB7VaC!D@@d;o zYD~MY$0W@Dn3aE9Y49^J3U%of!T))FZj2!=YLne1e8MmK_IiG+gB(#Is|$`W_LCaR zIi%FCk%I|#*JVYuRxs_b(X6S5{C59!HL1=hceww$be1pKlOXSYs3-WMe%p6QMyWi5q#5gAJPz_Bfp18gfV2ELOPA11YFgLoHrog+4{ViZ$QR#Z zY%-j@jc?#LLO+sg4(xhN zdh>stw#`PqX82i0+Ad$UK3wVdP$TMnfiqd`?`p=*#rQV&WWny%O;0WD!Bg@#@w|Ya9!BKAQfc$Ea~~vQ!EmJm8uWb{&+R6`w#vV>HT#&f4dLfpXoi3y6&vvEAD{!?;MQ# eEBN&Xc|3$3{h{VPZGA&btUB(4Hw1pB>wf{-UlCIP diff --git a/rsc/graphics/interface/button.png b/rsc/graphics/interface/button.png new file mode 100644 index 0000000000000000000000000000000000000000..867cd63df639db0c8892a31e6c2310820e652b01 GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^DL`z)!3HEJ*vp>-Qfx`y?k)`fL2$v|<&%LToCO|{ z#S9GG!XV7ZFl&wkP>{XE)7O>#KD!LBrLuBH{5PP`IZqeIkcwMxZyn@36d>XfIG^LC zGslh%jV8&RN#bS?oCH*wcCX=Gk?|%`Y*9fTXR&14^!c~$#$D#IKODo-(lFtF;zrr~ zK^FuBoH!Qo-n>6oQHsfl!*QG9-=))=+8P9$1aeQ5*myWPJ8&p^tT_AOi=j7&+3`-` zJw)X$#e2>sEG+^}CC+==GdMUDSw6PS@rM`)JBa-IDwUwg`MC8R@uT{a0pirmv9MdJ8K(7@CX^f=7%r*cM#GX zU-d4@dVAco{#sUFRCQIWs!^L&Z*4a`?{9|odG3V(0Rj;M@5fvS5FijCaKBB3009CK z0+;hd2oN9;A#gg3g#ZBp1PBlyK;Vx85r;rS5+FdJ1R`Ft8Ik}20woaf5z~+a2oNZN zh@Zp^Nq_)>60j5#AV45Rz*0