Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 977810201dbb4ee8df69b1c46dd5b91081d39b8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
   client/testmodelwindow.cc
   This file is part of the Osirion project and is distributed under
   the terms and conditions of the GNU General Public License version 2
*/

#include "client/testmodelwindow.h"
#include "client/closeiconbutton.h"

#include "ui/ui.h"
#include "ui/paint.h"

#include "model/model.h"

#include "core/gameinterface.h"

namespace client
{

TestModelWindow::TestModelWindow(ui::Widget *parent)
{
	set_background(true);
	set_border(false);
	set_label("testmodelwindow");
	testmodelwindow_modelview = new ui::ModelView(this);
	testmodelwindow_modelview->set_radius(1.0f);
	
	testmodelwindow_text = new ui::PlainText(this);
	testmodelwindow_text->set_label("text");
	testmodelwindow_text->set_background(false);
	testmodelwindow_text->set_border(false);
	
	testmodelwindow_wireframebutton = new ui::IconButton(this, "bitmaps/icons/button_wireframe", "Toggle wireframe", "toggle r_wireframe");
	
	testmodelwindow_normalsbutton  = new ui::IconButton(this, "bitmaps/icons/button_normals", "Toggle normals", "toggle r_normals");
	
	testmodelwindow_closebutton = new ui::Button(this);
	testmodelwindow_closebutton->set_text("Close");
	testmodelwindow_closebutton->set_background(true);
}

TestModelWindow::~TestModelWindow()
{
}

void TestModelWindow::set_modelname(const std::string & modelname)
{
	testmodelwindow_modelview->set_modelname(modelname);
	testmodelwindow_modelview->set_colors(core::localplayer()->color(), core::localplayer()->color_second());
}

void TestModelWindow::resize() 
{
	// this is a fullscreen window
	set_size(parent()->size());
	
	// resize the label
	testmodelwindow_text->set_size(width() - 16.0f, testmodelwindow_text->font()->height() * 5.0f);
	testmodelwindow_text->set_location(8.0f, 8.0f);
	
	// resize the 3d model view
	testmodelwindow_modelview->set_size(width(),height());
	testmodelwindow_modelview->set_location(0.0f, 0.0f);
	
	// resize icon buttons
	const float icon_margin = 4.0f;
	const float icon_size = 48.0f;
	const float icon_count = 2;
	const float l = (width() - ((icon_count + 1) * icon_margin) - (icon_count * icon_size)) * 0.5f;

	testmodelwindow_wireframebutton->set_geometry(l, icon_margin, icon_size, icon_size);
	testmodelwindow_normalsbutton->set_geometry(l + 1.0f *(icon_margin + icon_size), icon_margin, icon_size, icon_size);
	
	// reposition close button
	testmodelwindow_closebutton->set_size(
		ui::UI::elementsize.width() * 1.5f, 
		ui::UI::elementsize.height()
	);
	testmodelwindow_closebutton->set_location(
		width() - testmodelwindow_closebutton->width() - ui::UI::elementsize.height(), 
		height() - testmodelwindow_closebutton->height() - ui::UI::elementsize.height() * 0.5f
	);
}
	
void TestModelWindow::draw_background()
{
	math::Color color(palette()->background());
	color.a = 1.0f;
	ui::Paint::set_color(color);
	ui::Paint::draw_rectangle(global_location(), size());
}

void TestModelWindow::draw()
{
	model::Model *model = model::Model::find(testmodelwindow_modelview->modelname());
	
	std::ostringstream str;
	str << testmodelwindow_modelview->modelname() << '\n';
	
	if (model) {
		size_t frags = 0;
		
		for (model::Model::Groups::const_iterator git = model->groups().begin(); git != model->groups().end(); git++) {
			frags += (*git)->size();
		}		
		str << '\n';
		str << "tris:       " << model->model_tris_count << '\n';
		str << "quads:      " << model->model_quad_count << '\n';
		str << "fragments:  " << frags << '\n';
	}
	testmodelwindow_text->set_text(str.str());
}

bool TestModelWindow::on_emit(Widget *sender, const Event event, void *data)
{
	if (event == ui::Widget::EventButtonClicked) {
		// slider value changed
		if (sender == testmodelwindow_closebutton) {
			hide();
		}
		return true;
	}
	return false;
}

}	// namespace client