- added more error checks in code and defaults for invalid font size values.
- re-enabled client side changing of values from connect menu without waiting for server reply.
This commit is contained in:
parent
4ba4b756c8
commit
ac31d06106
|
@ -0,0 +1,89 @@
|
|||
// ==============================================================
|
||||
// This file is part of Glest (www.glest.org)
|
||||
//
|
||||
// Copyright (C) 2001-2008 Martio Figueroa
|
||||
//
|
||||
// You can redistribute this code and/or modify it under
|
||||
// the terms of the GNU General Public License as published
|
||||
// by the Free Software Foundation; either version 2 of the
|
||||
// License, or (at your option) any later version
|
||||
// ==============================================================
|
||||
|
||||
#include "metrics.h"
|
||||
|
||||
#include "element_type.h"
|
||||
#include <stdexcept>
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace Glest{ namespace Game{
|
||||
|
||||
|
||||
// =====================================================
|
||||
// class Metrics
|
||||
// =====================================================
|
||||
|
||||
Metrics::Metrics(){
|
||||
Config &config= Config::getInstance();
|
||||
|
||||
virtualW= 1000;
|
||||
virtualH= 750;
|
||||
|
||||
screenW= config.getInt("ScreenWidth");
|
||||
screenH= config.getInt("ScreenHeight");
|
||||
|
||||
minimapX= 10;
|
||||
minimapY= 750-128-30+16;
|
||||
minimapW= 128;
|
||||
minimapH= 128;
|
||||
|
||||
displayX= 800;
|
||||
displayY= 250;
|
||||
displayW= 128;
|
||||
displayH= 480;
|
||||
}
|
||||
|
||||
const Metrics &Metrics::getInstance(){
|
||||
static const Metrics metrics;
|
||||
return metrics;
|
||||
}
|
||||
|
||||
float Metrics::getAspectRatio() const{
|
||||
if(screenH == 0) {
|
||||
throw runtime_error("div by 0 screenH == 0");
|
||||
}
|
||||
return static_cast<float>(screenW)/screenH;
|
||||
}
|
||||
|
||||
int Metrics::toVirtualX(int w) const{
|
||||
if(screenW == 0) {
|
||||
throw runtime_error("div by 0 screenW == 0");
|
||||
}
|
||||
return w*virtualW/screenW;
|
||||
}
|
||||
|
||||
int Metrics::toVirtualY(int h) const{
|
||||
if(screenH == 0) {
|
||||
throw runtime_error("div by 0 screenH == 0");
|
||||
}
|
||||
return h*virtualH/screenH;
|
||||
}
|
||||
|
||||
bool Metrics::isInDisplay(int x, int y) const{
|
||||
return
|
||||
x > displayX &&
|
||||
y > displayY &&
|
||||
x < displayX+displayW &&
|
||||
y < displayY+displayH;
|
||||
}
|
||||
|
||||
bool Metrics::isInMinimap(int x, int y) const{
|
||||
return
|
||||
x > minimapX &&
|
||||
y > minimapY &&
|
||||
x < minimapX+minimapW &&
|
||||
y < minimapY+minimapH;
|
||||
}
|
||||
|
||||
}}// end namespace
|
|
@ -932,14 +932,22 @@ void Renderer::renderSelectionQuad(){
|
|||
}
|
||||
|
||||
Vec2i computeCenteredPos(const string &text, const Font2D *font, int x, int y){
|
||||
Vec2i textPos;
|
||||
|
||||
if(font == NULL) {
|
||||
throw runtime_error("font == NULL");
|
||||
}
|
||||
const Metrics &metrics= Metrics::getInstance();
|
||||
const FontMetrics *fontMetrics= font->getMetrics();
|
||||
|
||||
textPos= Vec2i(
|
||||
x-metrics.toVirtualX(static_cast<int>(fontMetrics->getTextWidth(text)/2.f)),
|
||||
y-metrics.toVirtualY(static_cast<int>(fontMetrics->getHeight()/2.f)));
|
||||
if(fontMetrics == NULL) {
|
||||
throw runtime_error("fontMetrics == NULL");
|
||||
}
|
||||
|
||||
int virtualX = (fontMetrics->getTextWidth(text) > 0 ? static_cast<int>(fontMetrics->getTextWidth(text)/2.f) : 5);
|
||||
int virtualY = (fontMetrics->getHeight() > 0 ? static_cast<int>(fontMetrics->getHeight()/2.f) : 5);
|
||||
|
||||
Vec2i textPos(
|
||||
x-metrics.toVirtualX(virtualX),
|
||||
y-metrics.toVirtualY(virtualY));
|
||||
|
||||
return textPos;
|
||||
}
|
||||
|
|
|
@ -240,7 +240,7 @@ void MenuStateConnectedGame::mouseClick(int x, int y, MouseButton mouseButton){
|
|||
NetworkManager &networkManager= NetworkManager::getInstance();
|
||||
ClientInterface* clientInterface= networkManager.getClientInterface();
|
||||
|
||||
if (!settingsReceivedFromServer) return;
|
||||
//if (!settingsReceivedFromServer) return;
|
||||
|
||||
if(buttonDisconnect.mouseClick(x,y)){
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
|
Loading…
Reference in New Issue