binds...
	* m2x2 in camera: entities creation menu
This commit is contained in:
Garux 2017-08-02 09:22:40 +03:00
parent c92c662abb
commit 4dcf76ef34
3 changed files with 71 additions and 4 deletions

View File

@ -751,6 +751,8 @@ CameraView& getCameraView(){
return m_cameraview; return m_cameraview;
} }
guint32 m_rightClickTime;
private: private:
void Cam_Draw(); void Cam_Draw();
}; };
@ -825,9 +827,40 @@ void Camera_setAngles( CamWnd& camwnd, const Vector3& angles ){
// ============================================================================= // =============================================================================
// CamWnd class // CamWnd class
void context_menu(){
if( g_pParentWnd->ActiveXY() ){
g_pParentWnd->ActiveXY()->OnContextMenu();
g_bCamEntityMenu = true;
}
}
/* GDK_2BUTTON_PRESS doesn't always work in this case, so... */
bool context_menu_try( GdkEventButton* event, CamWnd* camwnd ){
if( ( event->time - camwnd->m_rightClickTime ) < 200 ){
camwnd->m_rightClickTime = event->time;
return true;
}
else{
camwnd->m_rightClickTime = event->time;
return false;
}
}
gboolean enable_freelook_button_press( GtkWidget* widget, GdkEventButton* event, CamWnd* camwnd ){ gboolean enable_freelook_button_press( GtkWidget* widget, GdkEventButton* event, CamWnd* camwnd ){
if ( event->type == GDK_BUTTON_PRESS && event->button == 3 && modifiers_for_state( event->state ) == c_modifierNone ) { if ( event->type == GDK_BUTTON_PRESS && event->button == 3 && modifiers_for_state( event->state ) == c_modifierNone ) {
if( context_menu_try( event, camwnd ) ){
//need this hack, otherwise button wont be released = global accels broken, until correct button pressed again...
GdkEvent* event_ = gtk_get_current_event();
if( event_ ){
event_->type = GDK_BUTTON_RELEASE;
gtk_main_do_event( event_ );
gdk_event_free( event_ );
context_menu();
}
}
else{
camwnd->EnableFreeMove(); camwnd->EnableFreeMove();
}
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
@ -836,6 +869,16 @@ gboolean enable_freelook_button_press( GtkWidget* widget, GdkEventButton* event,
gboolean disable_freelook_button_press( GtkWidget* widget, GdkEventButton* event, CamWnd* camwnd ){ gboolean disable_freelook_button_press( GtkWidget* widget, GdkEventButton* event, CamWnd* camwnd ){
if ( event->type == GDK_BUTTON_PRESS && event->button == 3 && modifiers_for_state( event->state ) == c_modifierNone ) { if ( event->type == GDK_BUTTON_PRESS && event->button == 3 && modifiers_for_state( event->state ) == c_modifierNone ) {
camwnd->DisableFreeMove(); camwnd->DisableFreeMove();
if( context_menu_try( event, camwnd ) ){
//need this hack, otherwise button wont be released = global accels broken, until correct button pressed again...
GdkEvent* event_ = gtk_get_current_event();
if( event_ ){
event_->type = GDK_BUTTON_RELEASE;
gtk_main_do_event( event_ );
gdk_event_free( event_ );
context_menu();
}
}
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
@ -1247,7 +1290,8 @@ CamWnd::CamWnd() :
m_selection_button_release_handler( 0 ), m_selection_button_release_handler( 0 ),
m_selection_motion_handler( 0 ), m_selection_motion_handler( 0 ),
m_freelook_button_press_handler( 0 ), m_freelook_button_press_handler( 0 ),
m_drawing( false ){ m_drawing( false ),
m_rightClickTime( 0 ){
m_bFreeMove = false; m_bFreeMove = false;
GlobalWindowObservers_add( m_window_observer ); GlobalWindowObservers_add( m_window_observer );

View File

@ -76,6 +76,8 @@ void LoadTextureRGBA( qtexture_t* q, unsigned char* pPixels, int nWidth, int nHe
// d1223m // d1223m
extern bool g_brush_always_caulk; extern bool g_brush_always_caulk;
bool g_bCamEntityMenu = false;
//!\todo Rewrite. //!\todo Rewrite.
class ClipPoint class ClipPoint
{ {
@ -1190,8 +1192,26 @@ void entitycreate_activated( GtkWidget* item ){
const char* entity_name = gtk_label_get_text( GTK_LABEL( GTK_BIN( item )->child ) ); const char* entity_name = gtk_label_get_text( GTK_LABEL( GTK_BIN( item )->child ) );
if ( !( world_node && string_equal( entity_name, "worldspawn" ) ) ) { if ( !( world_node && string_equal( entity_name, "worldspawn" ) ) ) {
if( g_bCamEntityMenu ){
StringOutputStream command;
command << "entityCreate -class " << entity_name;
UndoableCommand undo( command.c_str() );
Vector3 angles( Camera_getAngles( *g_pParentWnd->GetCamWnd() ) );
Vector3 radangles( degrees_to_radians( angles[0] ), degrees_to_radians( angles[1] ), degrees_to_radians( angles[2] ) );
Vector3 viewvector;
viewvector[0] = cos( radangles[1] ) * cos( radangles[0] );
viewvector[1] = sin( radangles[1] ) * cos( radangles[0] );
viewvector[2] = sin( radangles[0] );
Vector3 point = viewvector * 64.f + Camera_getOrigin( *g_pParentWnd->GetCamWnd() );
vector3_snap( point, GetSnapGridSize() );
Entity_createFromSelection( entity_name, point );
}
else{
g_pParentWnd->ActiveXY()->OnEntityCreate( entity_name ); g_pParentWnd->ActiveXY()->OnEntityCreate( entity_name );
} }
}
else { else {
GlobalRadiant().m_pfnMessageBox( GTK_WIDGET( MainFrame_getWindow() ), "There's already a worldspawn in your map!" GlobalRadiant().m_pfnMessageBox( GTK_WIDGET( MainFrame_getWindow() ), "There's already a worldspawn in your map!"
"", "",
@ -1285,6 +1305,7 @@ void XYWnd::OnContextMenu(){
GlobalEntityClassManager().forEach( inserter ); GlobalEntityClassManager().forEach( inserter );
} }
g_bCamEntityMenu = false;
gtk_menu_popup( m_mnuDrop, 0, 0, 0, 0, 1, GDK_CURRENT_TIME ); gtk_menu_popup( m_mnuDrop, 0, 0, 0, 0, 1, GDK_CURRENT_TIME );
} }

View File

@ -34,6 +34,8 @@
#include "qerplugin.h" #include "qerplugin.h"
extern bool g_bCamEntityMenu;
class Shader; class Shader;
class SelectionSystemWindowObserver; class SelectionSystemWindowObserver;
namespace scene namespace scene
@ -205,13 +207,13 @@ VIEWTYPE m_viewType;
void OriginalButtonUp( guint32 nFlags, int point, int pointy ); void OriginalButtonUp( guint32 nFlags, int point, int pointy );
void OriginalButtonDown( guint32 nFlags, int point, int pointy ); void OriginalButtonDown( guint32 nFlags, int point, int pointy );
void OnContextMenu();
void PaintSizeInfo( int nDim1, int nDim2, Vector3& vMinBounds, Vector3& vMaxBounds ); void PaintSizeInfo( int nDim1, int nDim2, Vector3& vMinBounds, Vector3& vMaxBounds );
int m_entityCreate_x, m_entityCreate_y; int m_entityCreate_x, m_entityCreate_y;
bool m_entityCreate; bool m_entityCreate;
public: public:
void OnContextMenu();
void ButtonState_onMouseDown( unsigned int buttons ){ void ButtonState_onMouseDown( unsigned int buttons ){
//m_buttonstate |= buttons; //m_buttonstate |= buttons;
m_buttonstate = buttons; m_buttonstate = buttons;