Radiant:
binds... * m2x2 in camera: entities creation menu
This commit is contained in:
parent
c92c662abb
commit
4dcf76ef34
|
|
@ -751,6 +751,8 @@ CameraView& getCameraView(){
|
|||
return m_cameraview;
|
||||
}
|
||||
|
||||
guint32 m_rightClickTime;
|
||||
|
||||
private:
|
||||
void Cam_Draw();
|
||||
};
|
||||
|
|
@ -825,9 +827,40 @@ void Camera_setAngles( CamWnd& camwnd, const Vector3& angles ){
|
|||
// =============================================================================
|
||||
// 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 ){
|
||||
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();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
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 ){
|
||||
if ( event->type == GDK_BUTTON_PRESS && event->button == 3 && modifiers_for_state( event->state ) == c_modifierNone ) {
|
||||
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 FALSE;
|
||||
|
|
@ -1247,7 +1290,8 @@ CamWnd::CamWnd() :
|
|||
m_selection_button_release_handler( 0 ),
|
||||
m_selection_motion_handler( 0 ),
|
||||
m_freelook_button_press_handler( 0 ),
|
||||
m_drawing( false ){
|
||||
m_drawing( false ),
|
||||
m_rightClickTime( 0 ){
|
||||
m_bFreeMove = false;
|
||||
|
||||
GlobalWindowObservers_add( m_window_observer );
|
||||
|
|
|
|||
|
|
@ -76,6 +76,8 @@ void LoadTextureRGBA( qtexture_t* q, unsigned char* pPixels, int nWidth, int nHe
|
|||
// d1223m
|
||||
extern bool g_brush_always_caulk;
|
||||
|
||||
bool g_bCamEntityMenu = false;
|
||||
|
||||
//!\todo Rewrite.
|
||||
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 ) );
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
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 );
|
||||
}
|
||||
|
||||
g_bCamEntityMenu = false;
|
||||
gtk_menu_popup( m_mnuDrop, 0, 0, 0, 0, 1, GDK_CURRENT_TIME );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@
|
|||
|
||||
#include "qerplugin.h"
|
||||
|
||||
extern bool g_bCamEntityMenu;
|
||||
|
||||
class Shader;
|
||||
class SelectionSystemWindowObserver;
|
||||
namespace scene
|
||||
|
|
@ -205,13 +207,13 @@ VIEWTYPE m_viewType;
|
|||
void OriginalButtonUp( 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 );
|
||||
|
||||
int m_entityCreate_x, m_entityCreate_y;
|
||||
bool m_entityCreate;
|
||||
|
||||
public:
|
||||
void OnContextMenu();
|
||||
void ButtonState_onMouseDown( unsigned int buttons ){
|
||||
//m_buttonstate |= buttons;
|
||||
m_buttonstate = buttons;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user