Browse Source

Add proportionality support for GameUI panels (#35)

* Add proportionality support for GameUI panels

* Add Android platform define

* Fix button wrong state on fast clicking

Co-authored-by: JusicP <slender87844@gmail.com>
ToGLES3
nillerusr 3 years ago committed by GitHub
parent
commit
9d77bb17c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      common/GameUI/cvarslider.cpp
  2. 5
      engine/vgui_baseui_interface.cpp
  3. 4
      gameui/BasePanel.cpp
  4. 11
      gameui/CreateMultiplayerGameDialog.cpp
  5. 7
      gameui/GameConsole.cpp
  6. 20
      gameui/NewGameDialog.cpp
  7. 12
      gameui/OptionsDialog.cpp
  8. 76
      gameui/OptionsSubAudio.cpp
  9. 82
      gameui/OptionsSubVideo.cpp
  10. 20
      gameui/TGAImagePanel.cpp
  11. 1
      gameui/TGAImagePanel.h
  12. 5
      public/tier0/platform.h
  13. 2
      vgui2/vgui_controls/BuildGroup.cpp
  14. 18
      vgui2/vgui_controls/Button.cpp
  15. 28
      vgui2/vgui_controls/Frame.cpp
  16. 15
      vgui2/vgui_controls/ImagePanel.cpp
  17. 49
      vgui2/vgui_controls/MessageBox.cpp
  18. 26
      vgui2/vgui_controls/PropertyDialog.cpp
  19. 22
      vgui2/vgui_controls/QueryBox.cpp
  20. 25
      vgui2/vgui_controls/consoledialog.cpp

28
common/GameUI/cvarslider.cpp

@ -53,20 +53,20 @@ CCvarSlider::CCvarSlider( Panel *parent, const char *panelName, char const *capt
void CCvarSlider::SetupSlider( float minValue, float maxValue, const char *cvarname, bool bAllowOutOfRange ) void CCvarSlider::SetupSlider( float minValue, float maxValue, const char *cvarname, bool bAllowOutOfRange )
{ {
// make sure min/max don't go outside cvar range if there's one // make sure min/max don't go outside cvar range if there's one
ConVarRef var( cvarname, true ); //ConVarRef var( cvarname, true );
if ( var.IsValid() ) //if ( var.IsValid() )
{ //{
float flCVarMin; // float flCVarMin;
if ( var.GetMin( flCVarMin ) ) // if ( var.GetMin( flCVarMin ) )
{ // {
minValue = m_bUseConVarMinMax ? flCVarMin : MAX( minValue, flCVarMin ); // minValue = m_bUseConVarMinMax ? flCVarMin : MAX( minValue, flCVarMin );
} // }
float flCVarMax; // float flCVarMax;
if ( var.GetMax( flCVarMax ) ) // if ( var.GetMax( flCVarMax ) )
{ // {
maxValue = m_bUseConVarMinMax ? flCVarMax : MIN( maxValue, flCVarMax ); // maxValue = m_bUseConVarMinMax ? flCVarMax : MIN( maxValue, flCVarMax );
} // }
} //}
m_flMinValue = minValue; m_flMinValue = minValue;
m_flMaxValue = maxValue; m_flMaxValue = maxValue;

5
engine/vgui_baseui_interface.cpp

@ -696,6 +696,11 @@ void CEngineVGui::Init()
COM_TimestampedLog( "Building Panels (staticGameUIPanel)" ); COM_TimestampedLog( "Building Panels (staticGameUIPanel)" );
staticGameUIPanel = new CEnginePanel( staticPanel, "GameUI Panel" ); staticGameUIPanel = new CEnginePanel( staticPanel, "GameUI Panel" );
if (IsAndroid() || CommandLine()->CheckParm("-gameuiproportionality"))
{
staticGameUIPanel->SetProportional(true);
}
staticGameUIPanel->SetBounds( 0, 0, videomode->GetModeUIWidth(), videomode->GetModeUIHeight() ); staticGameUIPanel->SetBounds( 0, 0, videomode->GetModeUIWidth(), videomode->GetModeUIHeight() );
staticGameUIPanel->SetPaintBorderEnabled(false); staticGameUIPanel->SetPaintBorderEnabled(false);
staticGameUIPanel->SetPaintBackgroundEnabled(false); staticGameUIPanel->SetPaintBackgroundEnabled(false);

4
gameui/BasePanel.cpp

@ -1983,12 +1983,14 @@ void CBasePanel::RunMenuCommand(const char *command)
{ {
if ( IsPC() ) if ( IsPC() )
{ {
#ifndef NO_STEAM
if ( !steamapicontext->SteamUser() || !steamapicontext->SteamUser()->BLoggedOn() ) if ( !steamapicontext->SteamUser() || !steamapicontext->SteamUser()->BLoggedOn() )
{ {
vgui::MessageBox *pMessageBox = new vgui::MessageBox("#GameUI_Achievements_SteamRequired_Title", "#GameUI_Achievements_SteamRequired_Message"); vgui::MessageBox *pMessageBox = new vgui::MessageBox("#GameUI_Achievements_SteamRequired_Title", "#GameUI_Achievements_SteamRequired_Message", this);
pMessageBox->DoModal(); pMessageBox->DoModal();
return; return;
} }
#endif
OnOpenAchievementsDialog(); OnOpenAchievementsDialog();
} }
else else

11
gameui/CreateMultiplayerGameDialog.cpp

@ -34,7 +34,16 @@ CCreateMultiplayerGameDialog::CCreateMultiplayerGameDialog(vgui::Panel *parent)
{ {
m_bBotsEnabled = false; m_bBotsEnabled = false;
SetDeleteSelfOnClose(true); SetDeleteSelfOnClose(true);
SetSize(348, 460);
int w = 348;
int h = 460;
if (IsProportional())
{
w = scheme()->GetProportionalScaledValueEx(GetScheme(), w);
h = scheme()->GetProportionalScaledValueEx(GetScheme(), h);
}
SetSize(w, h);
SetTitle("#GameUI_CreateServer", true); SetTitle("#GameUI_CreateServer", true);
SetOKButtonText("#GameUI_Start"); SetOKButtonText("#GameUI_Start");

7
gameui/GameConsole.cpp

@ -148,6 +148,13 @@ void CGameConsole::SetParent( int parent )
return; return;
m_pConsole->SetParent( static_cast<vgui::VPANEL>( parent )); m_pConsole->SetParent( static_cast<vgui::VPANEL>( parent ));
// apply proportionality from parent
if (vgui::ipanel()->IsProportional(static_cast<vgui::VPANEL>(parent)))
{
m_pConsole->SetProportional(true);
m_pConsole->InvalidateLayout(true, true);
}
#endif #endif
} }

20
gameui/NewGameDialog.cpp

@ -161,16 +161,6 @@ public:
SetPaintBackgroundEnabled( false ); SetPaintBackgroundEnabled( false );
// the image has the same name as the config file
char szMaterial[ MAX_PATH ];
Q_snprintf( szMaterial, sizeof(szMaterial), "chapters/%s", chapterConfigFile );
char *ext = strstr( szMaterial, "." );
if ( ext )
{
*ext = 0;
}
m_pLevelPic->SetImage( szMaterial );
KeyValues *pKeys = NULL; KeyValues *pKeys = NULL;
if ( GameUI().IsConsoleUI() ) if ( GameUI().IsConsoleUI() )
{ {
@ -178,6 +168,16 @@ public:
} }
LoadControlSettings( "Resource/NewGameChapterPanel.res", NULL, pKeys ); LoadControlSettings( "Resource/NewGameChapterPanel.res", NULL, pKeys );
// the image has the same name as the config file
char szMaterial[MAX_PATH];
Q_snprintf(szMaterial, sizeof(szMaterial), "chapters/%s", chapterConfigFile);
char* ext = strstr(szMaterial, ".");
if (ext)
{
*ext = 0;
}
m_pLevelPic->SetImage(szMaterial);
int px, py; int px, py;
m_pLevelPicBorder->GetPos( px, py ); m_pLevelPicBorder->GetPos( px, py );
SetSize( m_pLevelPicBorder->GetWide(), py + m_pLevelPicBorder->GetTall() ); SetSize( m_pLevelPicBorder->GetWide(), py + m_pLevelPicBorder->GetTall() );

12
gameui/OptionsDialog.cpp

@ -45,7 +45,17 @@ using namespace vgui;
COptionsDialog::COptionsDialog(vgui::Panel *parent) : PropertyDialog(parent, "OptionsDialog") COptionsDialog::COptionsDialog(vgui::Panel *parent) : PropertyDialog(parent, "OptionsDialog")
{ {
SetDeleteSelfOnClose(true); SetDeleteSelfOnClose(true);
SetBounds(0, 0, 512, 406);
int w = 512;
int h = 406;
if (IsProportional())
{
w = scheme()->GetProportionalScaledValueEx(GetScheme(), w);
h = scheme()->GetProportionalScaledValueEx(GetScheme(), h);
}
SetBounds(0, 0, w, h);
SetSizeable( false ); SetSizeable( false );
SetTitle("#GameUI_Options", true); SetTitle("#GameUI_Options", true);

76
gameui/OptionsSubAudio.cpp

@ -383,39 +383,47 @@ void COptionsSubAudio::RunTestSpeakers()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class COptionsSubAudioThirdPartyCreditsDlg : public vgui::Frame class COptionsSubAudioThirdPartyCreditsDlg : public vgui::Frame
{ {
DECLARE_CLASS_SIMPLE( COptionsSubAudioThirdPartyCreditsDlg, vgui::Frame ); DECLARE_CLASS_SIMPLE(COptionsSubAudioThirdPartyCreditsDlg, vgui::Frame);
public: public:
COptionsSubAudioThirdPartyCreditsDlg( vgui::VPANEL hParent ) : BaseClass( NULL, NULL ) COptionsSubAudioThirdPartyCreditsDlg(vgui::VPANEL hParent) : BaseClass(NULL, NULL)
{ {
// parent is ignored, since we want look like we're steal focus from the parent (we'll become modal below) // parent is ignored, since we want look like we're steal focus from the parent (we'll become modal below)
int w = 500;
SetTitle("#GameUI_ThirdPartyAudio_Title", true); int h = 200;
SetSize( 500, 200 ); if (ipanel()->IsProportional(hParent))
LoadControlSettings( "resource/OptionsSubAudioThirdPartyDlg.res" ); {
MoveToCenterOfScreen(); SetProportional(true);
SetSizeable( false ); w = scheme()->GetProportionalScaledValueEx(GetScheme(), w);
SetDeleteSelfOnClose( true ); h = scheme()->GetProportionalScaledValueEx(GetScheme(), h);
} }
virtual void Activate() SetTitle("#GameUI_ThirdPartyAudio_Title", true);
{ SetSize(w, h);
BaseClass::Activate(); LoadControlSettings("resource/OptionsSubAudioThirdPartyDlg.res");
MoveToCenterOfScreen();
SetSizeable(false);
SetDeleteSelfOnClose(true);
}
input()->SetAppModalSurface(GetVPanel()); virtual void Activate()
} {
BaseClass::Activate();
void OnKeyCodeTyped(KeyCode code) input()->SetAppModalSurface(GetVPanel());
{ }
// force ourselves to be closed if the escape key it pressed
if (code == KEY_ESCAPE) void OnKeyCodeTyped(KeyCode code)
{ {
Close(); // force ourselves to be closed if the escape key it pressed
} if (code == KEY_ESCAPE)
else {
{ Close();
BaseClass::OnKeyCodeTyped(code); }
} else
} {
BaseClass::OnKeyCodeTyped(code);
}
}
}; };
@ -424,9 +432,9 @@ public:
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void COptionsSubAudio::OpenThirdPartySoundCreditsDialog() void COptionsSubAudio::OpenThirdPartySoundCreditsDialog()
{ {
if (!m_OptionsSubAudioThirdPartyCreditsDlg.Get()) if (!m_OptionsSubAudioThirdPartyCreditsDlg.Get())
{ {
m_OptionsSubAudioThirdPartyCreditsDlg = new COptionsSubAudioThirdPartyCreditsDlg(GetVParent()); m_OptionsSubAudioThirdPartyCreditsDlg = new COptionsSubAudioThirdPartyCreditsDlg(GetVParent());
} }
m_OptionsSubAudioThirdPartyCreditsDlg->Activate(); m_OptionsSubAudioThirdPartyCreditsDlg->Activate();
} }

82
gameui/OptionsSubVideo.cpp

@ -1714,39 +1714,47 @@ void COptionsSubVideo::LaunchBenchmark()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class COptionsSubVideoThirdPartyCreditsDlg : public vgui::Frame class COptionsSubVideoThirdPartyCreditsDlg : public vgui::Frame
{ {
DECLARE_CLASS_SIMPLE( COptionsSubVideoThirdPartyCreditsDlg, vgui::Frame ); DECLARE_CLASS_SIMPLE(COptionsSubVideoThirdPartyCreditsDlg, vgui::Frame);
public: public:
COptionsSubVideoThirdPartyCreditsDlg( vgui::VPANEL hParent ) : BaseClass( NULL, NULL ) COptionsSubVideoThirdPartyCreditsDlg(vgui::VPANEL hParent) : BaseClass(NULL, NULL)
{ {
// parent is ignored, since we want look like we're steal focus from the parent (we'll become modal below) // parent is ignored, since we want look like we're steal focus from the parent (we'll become modal below)
int w = 500;
SetTitle("#GameUI_ThirdPartyVideo_Title", true); int h = 200;
SetSize( 500, 200 ); if (ipanel()->IsProportional(hParent))
LoadControlSettings( "resource/OptionsSubVideoThirdPartyDlg.res" ); {
MoveToCenterOfScreen(); SetProportional(true);
SetSizeable( false ); w = scheme()->GetProportionalScaledValueEx(GetScheme(), w);
SetDeleteSelfOnClose( true ); h = scheme()->GetProportionalScaledValueEx(GetScheme(), h);
} }
virtual void Activate() SetTitle("#GameUI_ThirdPartyVideo_Title", true);
{ SetSize(w, h);
BaseClass::Activate(); LoadControlSettings("resource/OptionsSubVideoThirdPartyDlg.res");
MoveToCenterOfScreen();
input()->SetAppModalSurface(GetVPanel()); SetSizeable(false);
} SetDeleteSelfOnClose(true);
}
void OnKeyCodeTyped(KeyCode code)
{ virtual void Activate()
// force ourselves to be closed if the escape key it pressed {
if (code == KEY_ESCAPE) BaseClass::Activate();
{
Close(); input()->SetAppModalSurface(GetVPanel());
} }
else
{ void OnKeyCodeTyped(KeyCode code)
BaseClass::OnKeyCodeTyped(code); {
} // force ourselves to be closed if the escape key it pressed
} if (code == KEY_ESCAPE)
{
Close();
}
else
{
BaseClass::OnKeyCodeTyped(code);
}
}
}; };
@ -1755,9 +1763,9 @@ public:
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void COptionsSubVideo::OpenThirdPartyVideoCreditsDialog() void COptionsSubVideo::OpenThirdPartyVideoCreditsDialog()
{ {
if (!m_OptionsSubVideoThirdPartyCreditsDlg.Get()) if (!m_OptionsSubVideoThirdPartyCreditsDlg.Get())
{ {
m_OptionsSubVideoThirdPartyCreditsDlg = new COptionsSubVideoThirdPartyCreditsDlg(GetVParent()); m_OptionsSubVideoThirdPartyCreditsDlg = new COptionsSubVideoThirdPartyCreditsDlg(GetVParent());
} }
m_OptionsSubVideoThirdPartyCreditsDlg->Activate(); m_OptionsSubVideoThirdPartyCreditsDlg->Activate();
} }

20
gameui/TGAImagePanel.cpp

@ -19,6 +19,10 @@ CTGAImagePanel::CTGAImagePanel( vgui::Panel *parent, const char *name ) : BaseCl
m_bHasValidTexture = false; m_bHasValidTexture = false;
m_bLoadedTexture = false; m_bLoadedTexture = false;
m_szTGAName[0] = 0; m_szTGAName[0] = 0;
m_iImageWidth = 0;
m_iImageHeight = 0;
m_iImageRealWidth = 0;
m_iImageRealHeight = 0;
SetPaintBackgroundEnabled( false ); SetPaintBackgroundEnabled( false );
} }
@ -63,8 +67,19 @@ void CTGAImagePanel::Paint()
// set the textureID // set the textureID
surface()->DrawSetTextureRGBA( m_iTextureID, tga.Base(), m_iImageWidth, m_iImageHeight, false, true ); surface()->DrawSetTextureRGBA( m_iTextureID, tga.Base(), m_iImageWidth, m_iImageHeight, false, true );
m_bHasValidTexture = true; m_bHasValidTexture = true;
surface()->DrawGetTextureSize(m_iTextureID, m_iImageRealWidth, m_iImageRealHeight);
if (IsProportional())
{
m_iImageRealWidth = scheme()->GetProportionalScaledValueEx(GetScheme(), m_iImageRealWidth);
m_iImageRealHeight = scheme()->GetProportionalScaledValueEx(GetScheme(), m_iImageRealHeight);
m_iImageWidth = scheme()->GetProportionalScaledValueEx(GetScheme(), m_iImageWidth);
m_iImageHeight = scheme()->GetProportionalScaledValueEx(GetScheme(), m_iImageHeight);
}
// set our size to be the size of the tga // set our size to be the size of the tga
SetSize( m_iImageWidth, m_iImageHeight ); SetSize(m_iImageWidth, m_iImageHeight);
} }
else else
#endif #endif
@ -77,10 +92,9 @@ void CTGAImagePanel::Paint()
int wide, tall; int wide, tall;
if ( m_bHasValidTexture ) if ( m_bHasValidTexture )
{ {
surface()->DrawGetTextureSize( m_iTextureID, wide, tall );
surface()->DrawSetTexture( m_iTextureID ); surface()->DrawSetTexture( m_iTextureID );
surface()->DrawSetColor( 255, 255, 255, 255 ); surface()->DrawSetColor( 255, 255, 255, 255 );
surface()->DrawTexturedRect( 0, 0, wide, tall ); surface()->DrawTexturedRect( 0, 0, m_iImageRealWidth, m_iImageRealHeight );
} }
else else
{ {

1
gameui/TGAImagePanel.h

@ -34,6 +34,7 @@ public:
private: private:
int m_iTextureID; int m_iTextureID;
int m_iImageWidth, m_iImageHeight; int m_iImageWidth, m_iImageHeight;
int m_iImageRealWidth, m_iImageRealHeight;
bool m_bHasValidTexture, m_bLoadedTexture; bool m_bHasValidTexture, m_bLoadedTexture;
char m_szTGAName[256]; char m_szTGAName[256];
}; };

5
public/tier0/platform.h

@ -245,6 +245,11 @@ typedef signed char int8;
#define IsPlatform64Bits() false #define IsPlatform64Bits() false
#endif #endif
#ifdef _ANDROID
#define IsAndroid() true
#else
#define IsAndroid() false
#endif
// From steam/steamtypes.h // From steam/steamtypes.h
// RTime32 // RTime32
// We use this 32 bit time representing real world time. // We use this 32 bit time representing real world time.

2
vgui2/vgui_controls/BuildGroup.cpp

@ -5,7 +5,7 @@
// $NoKeywords: $ // $NoKeywords: $
// //
//=============================================================================// //=============================================================================//
//========= Copyright © 1996-2003, Valve LLC, All rights reserved. ============ //========= Copyright <EFBFBD> 1996-2003, Valve LLC, All rights reserved. ============
// //
// The copyright to the contents herein is the property of Valve, L.L.C. // The copyright to the contents herein is the property of Valve, L.L.C.
// The contents may be used and/or copied only with the written permission of // The contents may be used and/or copied only with the written permission of

18
vgui2/vgui_controls/Button.cpp

@ -71,7 +71,6 @@ void Button::Init()
_keyFocusBorder = NULL; _keyFocusBorder = NULL;
m_bSelectionStateSaved = false; m_bSelectionStateSaved = false;
m_bStaySelectedOnClick = false; m_bStaySelectedOnClick = false;
m_bStaySelectedOnClick = false;
m_bStayArmedOnClick = false; m_bStayArmedOnClick = false;
m_sArmedSoundName = UTL_INVAL_SYMBOL; m_sArmedSoundName = UTL_INVAL_SYMBOL;
m_sDepressedSoundName = UTL_INVAL_SYMBOL; m_sDepressedSoundName = UTL_INVAL_SYMBOL;
@ -140,11 +139,12 @@ void Button::SetSelected( bool state )
InvalidateLayout(false); InvalidateLayout(false);
} }
if ( !m_bStayArmedOnClick && state && _buttonFlags.IsFlagSet( ARMED ) ) // Jusic: idk what is it for
{ //if (!m_bStayArmedOnClick && state && _buttonFlags.IsFlagSet(ARMED))
_buttonFlags.SetFlag( ARMED, false ); //{
InvalidateLayout(false); // _buttonFlags.SetFlag( ARMED, false );
} // InvalidateLayout(false);
//}
} }
void Button::SetBlink( bool state ) void Button::SetBlink( bool state )
@ -877,7 +877,11 @@ void Button::ApplySettings( KeyValues *inResourceData )
SetReleasedSound(sound); SetReleasedSound(sound);
} }
_activationType = (ActivationType_t)inResourceData->GetInt( "button_activation_type", ACTIVATE_ONRELEASED ); int iButtonActivationType = inResourceData->GetInt( "button_activation_type", -1 );
if (iButtonActivationType != -1)
{
_activationType = (ActivationType_t)iButtonActivationType;
}
} }

28
vgui2/vgui_controls/Frame.cpp

@ -1224,12 +1224,24 @@ void Frame::PerformLayout()
// move everything into place // move everything into place
int wide, tall; int wide, tall;
GetSize(wide, tall); GetSize(wide, tall);
float scale = 1;
if (IsProportional())
{
int screenW, screenH;
surface()->GetScreenSize(screenW, screenH);
int proW, proH;
surface()->GetProportionalBase(proW, proH);
scale = ((float)(screenH) / (float)(proH));
}
#if !defined( _X360 ) #if !defined( _X360 )
int DRAGGER_SIZE = GetDraggerSize(); int DRAGGER_SIZE = GetDraggerSize();
int CORNER_SIZE = GetCornerSize(); int CORNER_SIZE = GetCornerSize();
int CORNER_SIZE2 = CORNER_SIZE * 2; int CORNER_SIZE2 = CORNER_SIZE * 2;
int BOTTOMRIGHTSIZE = GetBottomRightSize(); int BOTTOMRIGHTSIZE = GetBottomRightSize() * scale;
_topGrip->SetBounds(CORNER_SIZE, 0, wide - CORNER_SIZE2, DRAGGER_SIZE); _topGrip->SetBounds(CORNER_SIZE, 0, wide - CORNER_SIZE2, DRAGGER_SIZE);
_leftGrip->SetBounds(0, CORNER_SIZE, DRAGGER_SIZE, tall - CORNER_SIZE2); _leftGrip->SetBounds(0, CORNER_SIZE, DRAGGER_SIZE, tall - CORNER_SIZE2);
@ -1260,18 +1272,6 @@ void Frame::PerformLayout()
_minimizeToSysTrayButton->MoveToFront(); _minimizeToSysTrayButton->MoveToFront();
_menuButton->SetBounds(5+2, 5+3, GetCaptionHeight()-5, GetCaptionHeight()-5); _menuButton->SetBounds(5+2, 5+3, GetCaptionHeight()-5, GetCaptionHeight()-5);
#endif #endif
float scale = 1;
if (IsProportional())
{
int screenW, screenH;
surface()->GetScreenSize( screenW, screenH );
int proW,proH;
surface()->GetProportionalBase( proW, proH );
scale = ( (float)( screenH ) / (float)( proH ) );
}
#if !defined( _X360 ) #if !defined( _X360 )
int offset_start = (int)( 20 * scale ); int offset_start = (int)( 20 * scale );

15
vgui2/vgui_controls/ImagePanel.cpp

@ -90,6 +90,21 @@ void ImagePanel::SetImage(const char *imageName)
m_pszImageName = new char[ len ]; m_pszImageName = new char[ len ];
Q_strncpy(m_pszImageName, imageName, len ); Q_strncpy(m_pszImageName, imageName, len );
InvalidateLayout(false, true); // force applyschemesettings to run InvalidateLayout(false, true); // force applyschemesettings to run
if (IsProportional() && m_pImage && !m_bScaleImage)
{
float scale = 1;
int screenW, screenH;
surface()->GetScreenSize(screenW, screenH);
int proW, proH;
surface()->GetProportionalBase(proW, proH);
scale = ((float)(screenH) / (float)(proH));
m_fScaleAmount = scale;
m_bScaleImage = true;
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

49
vgui2/vgui_controls/MessageBox.cpp

@ -145,9 +145,15 @@ void MessageBox::ApplySchemeSettings(IScheme *pScheme)
int wide, tall; int wide, tall;
m_pMessageLabel->GetContentSize(wide, tall); m_pMessageLabel->GetContentSize(wide, tall);
m_pMessageLabel->SetSize(wide, tall); m_pMessageLabel->SetSize(wide, tall);
int indent = 100;
if (IsProportional())
{
indent = scheme()->GetProportionalScaledValueEx(GetScheme(), 100);
}
wide += 100; wide += indent;
tall += 100; tall += indent;
SetSize(wide, tall); SetSize(wide, tall);
if ( m_bShowMessageBoxOverCursor ) if ( m_bShowMessageBoxOverCursor )
@ -243,7 +249,7 @@ void MessageBox::ShowWindow(Frame *pFrameOver)
// Purpose: Put the text and OK buttons in correct place // Purpose: Put the text and OK buttons in correct place
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void MessageBox::PerformLayout() void MessageBox::PerformLayout()
{ {
int x, y, wide, tall; int x, y, wide, tall;
GetClientArea(x, y, wide, tall); GetClientArea(x, y, wide, tall);
wide += x; wide += x;
@ -255,38 +261,51 @@ void MessageBox::PerformLayout()
int oldWide, oldTall; int oldWide, oldTall;
m_pOkButton->GetSize(oldWide, oldTall); m_pOkButton->GetSize(oldWide, oldTall);
// calc proportionality scale
float scale = 1;
if (IsProportional())
{
int screenW, screenH;
surface()->GetScreenSize(screenW, screenH);
int proW, proH;
surface()->GetProportionalBase(proW, proH);
scale = ((float)(screenH) / (float)(proH));
}
int btnWide, btnTall; int btnWide, btnTall;
m_pOkButton->GetContentSize(btnWide, btnTall); m_pOkButton->GetContentSize(btnWide, btnTall);
btnWide = max(oldWide, btnWide + 10); btnWide = max(oldWide, btnWide + 10 * scale);
btnTall = max(oldTall, btnTall + 10); btnTall = max(oldTall, btnTall + 10 * scale);
m_pOkButton->SetSize(btnWide, btnTall); m_pOkButton->SetSize(btnWide, btnTall);
int btnWide2 = 0, btnTall2 = 0; int btnWide2 = 0, btnTall2 = 0;
if ( m_pCancelButton->IsVisible() ) if ( m_pCancelButton->IsVisible() )
{ {
m_pCancelButton->GetSize(oldWide, oldTall); m_pCancelButton->GetSize(oldWide, oldTall);
m_pCancelButton->GetContentSize(btnWide2, btnTall2); m_pCancelButton->GetContentSize(btnWide2, btnTall2);
btnWide2 = max(oldWide, btnWide2 + 10); btnWide2 = max(oldWide, btnWide2 + 10 * scale);
btnTall2 = max(oldTall, btnTall2 + 10); btnTall2 = max(oldTall, btnTall2 + 10 * scale);
m_pCancelButton->SetSize(btnWide2, btnTall2); m_pCancelButton->SetSize(btnWide2, boxTall);
} }
boxWidth = max(boxWidth, m_pMessageLabel->GetWide() + 100); boxWidth = max(boxWidth, m_pMessageLabel->GetWide() + 100 * scale);
boxWidth = max(boxWidth, (btnWide + btnWide2) * 2 + 30); boxWidth = max(boxWidth, (btnWide + btnWide2) * 2 + 30 * scale);
SetSize(boxWidth, boxTall); SetSize(boxWidth, boxTall);
GetSize(boxWidth, boxTall); GetSize(boxWidth, boxTall);
m_pMessageLabel->SetPos((wide/2)-(m_pMessageLabel->GetWide()/2) + x, y + 5 ); m_pMessageLabel->SetPos((wide/2)-(m_pMessageLabel->GetWide()/2) + x, y + 5 * scale);
if ( !m_pCancelButton->IsVisible() ) if ( !m_pCancelButton->IsVisible() )
{ {
m_pOkButton->SetPos((wide/2)-(m_pOkButton->GetWide()/2) + x, tall - m_pOkButton->GetTall() - 15); m_pOkButton->SetPos((wide/2)-(m_pOkButton->GetWide()/2) + x, tall - m_pOkButton->GetTall() - 15 * scale);
} }
else else
{ {
m_pOkButton->SetPos((wide/4)-(m_pOkButton->GetWide()/2) + x, tall - m_pOkButton->GetTall() - 15); m_pOkButton->SetPos((wide/4)-(m_pOkButton->GetWide()/2) + x, tall - m_pOkButton->GetTall() - 15 * scale);
m_pCancelButton->SetPos((3*wide/4)-(m_pOkButton->GetWide()/2) + x, tall - m_pOkButton->GetTall() - 15); m_pCancelButton->SetPos((3*wide/4)-(m_pOkButton->GetWide()/2) + x, tall - m_pOkButton->GetTall() - 15 * scale);
} }
BaseClass::PerformLayout(); BaseClass::PerformLayout();

26
vgui2/vgui_controls/PropertyDialog.cpp

@ -115,24 +115,36 @@ void PropertyDialog::PerformLayout()
GetClientArea(x, y, wide, tall); GetClientArea(x, y, wide, tall);
_propertySheet->SetBounds(x, y, wide, tall - iBottom); _propertySheet->SetBounds(x, y, wide, tall - iBottom);
// calc button size and indent for proportionality
int iBtnWide = 72;
int iBtnTall = 24;
int iWideIndent = 8;
int iTallIndent = 4;
if (IsProportional())
{
iBtnWide = scheme()->GetProportionalScaledValueEx(GetScheme(), iBtnWide);
iBtnTall = scheme()->GetProportionalScaledValueEx(GetScheme(), iBtnTall);
iWideIndent = scheme()->GetProportionalScaledValueEx(GetScheme(), iWideIndent);
iTallIndent = scheme()->GetProportionalScaledValueEx(GetScheme(), iTallIndent);
}
// move the buttons to the bottom-right corner // move the buttons to the bottom-right corner
int xpos = x + wide - 80; int xpos = x + wide - iBtnWide - iWideIndent;
int ypos = tall + y - 28; int ypos = tall + y - iBtnTall - iTallIndent;
if (_applyButton->IsVisible()) if (_applyButton->IsVisible())
{ {
_applyButton->SetBounds(xpos, ypos, 72, 24); _applyButton->SetBounds(xpos, ypos, iBtnWide, iBtnTall);
xpos -= 80; xpos -= iBtnWide + iWideIndent;
} }
if (_cancelButton->IsVisible()) if (_cancelButton->IsVisible())
{ {
_cancelButton->SetBounds(xpos, ypos, 72, 24); _cancelButton->SetBounds(xpos, ypos, iBtnWide, iBtnTall);
xpos -= 80; xpos -= iBtnWide + iWideIndent;
} }
_okButton->SetBounds(xpos, ypos, 72, 24); _okButton->SetBounds(xpos, ypos, iBtnWide, iBtnTall);
_propertySheet->InvalidateLayout(); // tell the propertysheet to redraw! _propertySheet->InvalidateLayout(); // tell the propertysheet to redraw!
Repaint(); Repaint();

22
vgui2/vgui_controls/QueryBox.cpp

@ -9,6 +9,7 @@
//=============================================================================// //=============================================================================//
#include <vgui/KeyCode.h> #include <vgui/KeyCode.h>
#include <vgui/ISurface.h>
#include <vgui_controls/QueryBox.h> #include <vgui_controls/QueryBox.h>
#include <vgui_controls/TextImage.h> #include <vgui_controls/TextImage.h>
@ -89,10 +90,23 @@ void QueryBox::PerformLayout()
int oldWide, oldTall; int oldWide, oldTall;
m_pCancelButton->GetSize(oldWide, oldTall); m_pCancelButton->GetSize(oldWide, oldTall);
// calc proportionality scale
float scale = 1;
if (IsProportional())
{
int screenW, screenH;
surface()->GetScreenSize(screenW, screenH);
int proW, proH;
surface()->GetProportionalBase(proW, proH);
scale = ((float)(screenH) / (float)(proH));
}
int btnWide, btnTall; int btnWide, btnTall;
m_pCancelButton->GetContentSize(btnWide, btnTall); m_pCancelButton->GetContentSize(btnWide, btnTall);
btnWide = max(oldWide, btnWide + 10); btnWide = max(oldWide, btnWide + 10 * scale);
btnTall = max(oldTall, btnTall + 10); btnTall = max(oldTall, btnTall + 10 * scale);
m_pCancelButton->SetSize(btnWide, btnTall); m_pCancelButton->SetSize(btnWide, btnTall);
//nt boxWidth, boxTall; //nt boxWidth, boxTall;
@ -100,8 +114,8 @@ void QueryBox::PerformLayout()
// wide = max(wide, btnWide * 2 + 100); // wide = max(wide, btnWide * 2 + 100);
// SetSize(wide, tall); // SetSize(wide, tall);
m_pOkButton->SetPos((wide/2)-(m_pOkButton->GetWide())-1 + x, tall - m_pOkButton->GetTall() - 15); m_pOkButton->SetPos((wide/2)-(m_pOkButton->GetWide())-1 + x, tall - m_pOkButton->GetTall() - 15 * scale);
m_pCancelButton->SetPos((wide/2) + x+16, tall - m_pCancelButton->GetTall() - 15); m_pCancelButton->SetPos((wide/2) + x+16*scale, tall - m_pCancelButton->GetTall() - 15 * scale);
} }

25
vgui2/vgui_controls/consoledialog.cpp

@ -844,12 +844,24 @@ void CConsolePanel::PerformLayout()
if ( !m_bStatusVersion ) if ( !m_bStatusVersion )
{ {
const int inset = 8; float scale = 1;
const int entryHeight = 24; if (IsProportional())
const int topHeight = 4; {
const int entryInset = 4; int screenW, screenH;
const int submitWide = 64; surface()->GetScreenSize(screenW, screenH);
const int submitInset = 7; // x inset to pull the submit button away from the frame grab
int proW, proH;
surface()->GetProportionalBase(proW, proH);
scale = ((float)(screenH) / (float)(proH));
}
const int inset = 8 * scale;
const int entryHeight = 24 * scale;
const int topHeight = 4 * scale;
const int entryInset = 4 * scale;
const int submitWide = 64 * scale;
const int submitInset = 7 * scale; // x inset to pull the submit button away from the frame grab
m_pHistory->SetPos(inset, inset + topHeight); m_pHistory->SetPos(inset, inset + topHeight);
m_pHistory->SetSize(wide - (inset * 2), tall - (entryInset * 2 + inset * 2 + topHeight + entryHeight)); m_pHistory->SetSize(wide - (inset * 2), tall - (entryInset * 2 + inset * 2 + topHeight + entryHeight));
@ -931,6 +943,7 @@ void CConsolePanel::ApplySchemeSettings(IScheme *pScheme)
m_DPrintColor = GetSchemeColor("Console.DevTextColor", pScheme); m_DPrintColor = GetSchemeColor("Console.DevTextColor", pScheme);
m_pHistory->SetFont( pScheme->GetFont( "ConsoleText", IsProportional() ) ); m_pHistory->SetFont( pScheme->GetFont( "ConsoleText", IsProportional() ) );
m_pCompletionList->SetFont( pScheme->GetFont( "DefaultSmall", IsProportional() ) ); m_pCompletionList->SetFont( pScheme->GetFont( "DefaultSmall", IsProportional() ) );
m_pEntry->SetFont( pScheme->GetFont( "DefaultSmall", IsProportional() ) );
InvalidateLayout(); InvalidateLayout();
} }

Loading…
Cancel
Save