From 5801b1fafff8ad9618248d4d5d5c751fdf52be2f Mon Sep 17 00:00:00 2001
From: titiger <titi_linux@megaglest.org>
Date: Sat, 5 Jun 2021 01:33:50 +0200
Subject: [PATCH] get rid of manual wxPaintEvent creation

---
 source/g3d_viewer/main.cpp | 43 +++++++++++++++++++-------------------
 source/g3d_viewer/main.h   |  2 ++
 2 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/source/g3d_viewer/main.cpp b/source/g3d_viewer/main.cpp
index c1bed3f5b..db228ae85 100644
--- a/source/g3d_viewer/main.cpp
+++ b/source/g3d_viewer/main.cpp
@@ -565,7 +565,7 @@ void MainWindow::setupStartupSettings() {
 	renderer->init();
 
 	wxCommandEvent event;
-	onMenuRestart(event);
+	onMenuRestartNoEvent();
 }
 
 MainWindow::~MainWindow(){
@@ -610,10 +610,14 @@ void MainWindow::init() {
 
 void MainWindow::onPaint(wxPaintEvent &event) {
 	if(!IsShown()) {
-		event.Skip();
-		return;
-	}
-	
+			event.Skip();
+			return;
+		}
+
+	onPaintNoEvent( );
+}
+
+void MainWindow::onPaintNoEvent( ) {
 	bool isFirstWindowShownEvent = !startupSettingsInited ;
 	if(startupSettingsInited == false) {
 		startupSettingsInited = true;
@@ -712,7 +716,6 @@ void MainWindow::onPaint(wxPaintEvent &event) {
 			resetAnimation 		= false;
 			particleLoopStart 	= resetParticleLoopStart;
 
-			wxCommandEvent event;
 			if(unitPath.first != "") {
 				//onMenuFileClearAll(event);
 
@@ -720,12 +723,8 @@ void MainWindow::onPaint(wxPaintEvent &event) {
 				particlePathList.clear();
 				particleProjectilePathList.clear();
 				particleSplashPathList.clear(); // as above
-
-				onMenuRestart(event);
-			}
-			else {
-				onMenuRestart(event);
 			}
+			onMenuRestartNoEvent();
 		}
 	}
 	else if(modelPathList.empty() == true && haveLoadedParticles) {
@@ -740,7 +739,7 @@ void MainWindow::onPaint(wxPaintEvent &event) {
 			particleLoopStart 	= resetParticleLoopStart;
 
 			wxCommandEvent event;
-			onMenuRestart(event);
+			onMenuRestartNoEvent();
 		}
 	}
 
@@ -796,14 +795,13 @@ void MainWindow::onClose(wxCloseEvent &event){
 // for the mousewheel
 void MainWindow::onMouseWheelDown(wxMouseEvent &event) {
 	try {
-		wxPaintEvent paintEvent;
 		zoom*= 1.1f;
 		zoom= clamp(zoom, 0.1f, 10.0f);
 
 		string statusTextValue = statusbarText + " animation speed: " + floatToStr(speed * 1000.0) + " anim value: " + floatToStr(anim) + " zoom: " + floatToStr(zoom) + " rotX: " + floatToStr(rotX) + " rotY: " + floatToStr(rotY);
 		GetStatusBar()->SetStatusText(ToUnicode(statusTextValue.c_str()));
 
-		onPaint(paintEvent);
+		onPaintNoEvent();
 	}
 	catch(std::runtime_error &e) {
 		std::cout << e.what() << std::endl;
@@ -813,14 +811,13 @@ void MainWindow::onMouseWheelDown(wxMouseEvent &event) {
 
 void MainWindow::onMouseWheelUp(wxMouseEvent &event) {
 	try {
-		wxPaintEvent paintEvent;
 		zoom*= 0.90909f;
 		zoom= clamp(zoom, 0.1f, 10.0f);
 
 		string statusTextValue = statusbarText + " animation speed: " + floatToStr(speed * 1000.0) + " anim value: " + floatToStr(anim) + " zoom: " + floatToStr(zoom) + " rotX: " + floatToStr(rotX) + " rotY: " + floatToStr(rotY);
 		GetStatusBar()->SetStatusText(ToUnicode(statusTextValue.c_str()));
 
-		onPaint(paintEvent);
+		onPaintNoEvent();
 	}
 	catch(std::runtime_error &e) {
 		std::cout << e.what() << std::endl;
@@ -833,7 +830,7 @@ void MainWindow::onMouseMove(wxMouseEvent &event){
 	try {
 		int x= event.GetX();
 		int y= event.GetY();
-		wxPaintEvent paintEvent;
+
 
 		if(event.LeftIsDown()){
 			rotX+= clamp(lastX-x, -10, 10);
@@ -842,7 +839,7 @@ void MainWindow::onMouseMove(wxMouseEvent &event){
 			string statusTextValue = statusbarText + " animation speed: " + floatToStr(speed * 1000.0) + " anim value: " + floatToStr(anim) + " zoom: " + floatToStr(zoom) + " rotX: " + floatToStr(rotX) + " rotY: " + floatToStr(rotY);
 			GetStatusBar()->SetStatusText(ToUnicode(statusTextValue.c_str()));
 
-			onPaint(paintEvent);
+			onPaintNoEvent();
 		}
 		else if(event.RightIsDown()){
 			zoom*= 1.0f+(lastX-x+lastY-y)/100.0f;
@@ -851,7 +848,7 @@ void MainWindow::onMouseMove(wxMouseEvent &event){
 			string statusTextValue = statusbarText + " animation speed: " + floatToStr(speed * 1000.0) + " anim value: " + floatToStr(anim) + " zoom: " + floatToStr(zoom) + " rotX: " + floatToStr(rotX) + " rotY: " + floatToStr(rotY);
 			GetStatusBar()->SetStatusText(ToUnicode(statusTextValue.c_str()));
 
-			onPaint(paintEvent);
+			onPaintNoEvent();
 		}
 
 		lastX= x;
@@ -1868,8 +1865,8 @@ void MainWindow::onTimer(wxTimerEvent &event) {
 		anim -= 1.f;
 		resetAnimation = true;
 	}
-	wxPaintEvent paintEvent;
-	onPaint(paintEvent);
+
+	onPaintNoEvent();
 }
 
 string MainWindow::getModelInfo() {
@@ -1962,6 +1959,10 @@ void MainWindow::onKeyDown(wxKeyEvent &e) {
 }
 
 void MainWindow::onMenuRestart(wxCommandEvent &event) {
+	onMenuRestartNoEvent();
+}
+
+void MainWindow::onMenuRestartNoEvent() {
 	try {
 		// std::cout << "pressed R (restart particle animation)" << std::endl;
 		if(timer) timer->Stop();
diff --git a/source/g3d_viewer/main.h b/source/g3d_viewer/main.h
index d1af96318..16f591678 100644
--- a/source/g3d_viewer/main.h
+++ b/source/g3d_viewer/main.h
@@ -146,6 +146,7 @@ class MainWindow: public wxFrame{
 
 	void Notify();
 
+	void onPaintNoEvent();
 	void onPaint(wxPaintEvent &event);
 	void onClose(wxCloseEvent &event);
 	void onMenuFileLoad(wxCommandEvent &event);
@@ -162,6 +163,7 @@ class MainWindow: public wxFrame{
 	void onMenuSpeedSlower(wxCommandEvent &event);
 	void onMenuSpeedFaster(wxCommandEvent &event);
 	void onMenuRestart(wxCommandEvent &event);
+	void onMenuRestartNoEvent();
 	void OnChangeColor(wxCommandEvent &event);
 	void onMenuColorRed(wxCommandEvent &event);
 	void onMenuColorBlue(wxCommandEvent &event);
