* preferences->Selection->Selector size (pixels)

This commit is contained in:
Garux 2018-04-29 19:12:42 +03:00
parent 9114385dda
commit 1d4f115517

View File

@ -52,6 +52,8 @@
#include "grid.h" #include "grid.h"
int g_SELECT_EPSILON = 8;
struct Pivot2World struct Pivot2World
{ {
Matrix4 m_worldSpace; Matrix4 m_worldSpace;
@ -2347,8 +2349,8 @@ public:
matrix4_transform_point( inv, point ); matrix4_transform_point( inv, point );
point -= origin; point -= origin;
point = vector3_added( point, vector3_scaled( m_pivot.m_axis_screen, -vector3_dot( point, m_pivot.m_axis_screen ) ) ); //constrain_to_axis point = vector3_added( point, vector3_scaled( m_pivot.m_axis_screen, -vector3_dot( point, m_pivot.m_axis_screen ) ) ); //constrain_to_axis
m_rotateAxis.SetRadius( vector3_length( point ) - 4 ); //- SELECT_EPSILON / 2 m_rotateAxis.SetRadius( vector3_length( point ) - g_SELECT_EPSILON / 2.0 - 1.0 ); /* use smaller radius to constrain to one rotation direction in 2D */
//globalOutputStream() << "radius\n"; //globalOutputStream() << "radius " << ( vector3_length( point ) - g_SELECT_EPSILON / 2.0 - 1.0 ) << "\n";
} }
else{ else{
m_rotateAxis.SetRadius( g_radius ); m_rotateAxis.SetRadius( g_radius );
@ -5043,6 +5045,7 @@ void RadiantSelectionSystem::renderSolid( Renderer& renderer, const VolumeTest&
bool g_bLeftMouseClickSelector = true; bool g_bLeftMouseClickSelector = true;
void SelectionSystem_constructPreferences( PreferencesPage& page ){ void SelectionSystem_constructPreferences( PreferencesPage& page ){
page.appendSpinner( "Selector size (pixels)", g_SELECT_EPSILON, 8, 2, 64 );
page.appendCheckBox( "", "Prefer point entities in 2D", getSelectionSystem().m_bPreferPointEntsIn2D ); page.appendCheckBox( "", "Prefer point entities in 2D", getSelectionSystem().m_bPreferPointEntsIn2D );
page.appendCheckBox( "", "Left mouse click tunnel selector", g_bLeftMouseClickSelector ); page.appendCheckBox( "", "Left mouse click tunnel selector", g_bLeftMouseClickSelector );
} }
@ -5071,6 +5074,7 @@ void SelectionSystem_Construct(){
GlobalShaderCache().attachRenderable( getSelectionSystem() ); GlobalShaderCache().attachRenderable( getSelectionSystem() );
GlobalPreferenceSystem().registerPreference( "SELECT_EPSILON", IntImportStringCaller( g_SELECT_EPSILON ), IntExportStringCaller( g_SELECT_EPSILON ) );
GlobalPreferenceSystem().registerPreference( "PreferPointEntsIn2D", BoolImportStringCaller( getSelectionSystem().m_bPreferPointEntsIn2D ), BoolExportStringCaller( getSelectionSystem().m_bPreferPointEntsIn2D ) ); GlobalPreferenceSystem().registerPreference( "PreferPointEntsIn2D", BoolImportStringCaller( getSelectionSystem().m_bPreferPointEntsIn2D ), BoolExportStringCaller( getSelectionSystem().m_bPreferPointEntsIn2D ) );
GlobalPreferenceSystem().registerPreference( "LeftMouseClickSelector", BoolImportStringCaller( g_bLeftMouseClickSelector ), BoolExportStringCaller( g_bLeftMouseClickSelector ) ); GlobalPreferenceSystem().registerPreference( "LeftMouseClickSelector", BoolImportStringCaller( g_bLeftMouseClickSelector ), BoolExportStringCaller( g_bLeftMouseClickSelector ) );
SelectionSystem_registerPreferencesPage(); SelectionSystem_registerPreferencesPage();
@ -5151,13 +5155,13 @@ void Scene_projectClosestTexture( SelectionTest& test );
class TexManipulator_ class TexManipulator_
{ {
const DeviceVector& m_epsilon;
public: public:
DeviceVector m_epsilon;
const View* m_view; const View* m_view;
ModifierFlags m_state; ModifierFlags m_state;
bool m_undo_begun; bool m_undo_begun;
TexManipulator_() : m_state( c_modifierNone ), m_undo_begun( false ){ TexManipulator_( const DeviceVector& epsilon ) : m_epsilon( epsilon ), m_state( c_modifierNone ), m_undo_begun( false ){
} }
void mouseDown( DeviceVector position ){ void mouseDown( DeviceVector position ){
@ -5239,10 +5243,10 @@ rect_t getDeviceArea() const {
} }
} }
const DeviceVector& m_epsilon;
public: public:
DeviceVector m_start; DeviceVector m_start;
DeviceVector m_current; DeviceVector m_current;
DeviceVector m_epsilon;
ModifierFlags m_state; ModifierFlags m_state;
bool m_mouse2; bool m_mouse2;
bool m_mouseMoved; bool m_mouseMoved;
@ -5251,7 +5255,7 @@ bool m_paintSelect;
const View* m_view; const View* m_view;
RectangleCallback m_window_update; RectangleCallback m_window_update;
Selector_() : m_start( 0.0f, 0.0f ), m_current( 0.0f, 0.0f ), m_state( c_modifierNone ), m_mouse2( false ), m_mouseMoved( false ), m_mouseMovedWhilePressed( false ){ Selector_( const DeviceVector& epsilon ) : m_epsilon( epsilon ), m_start( 0.0f, 0.0f ), m_current( 0.0f, 0.0f ), m_state( c_modifierNone ), m_mouse2( false ), m_mouseMoved( false ), m_mouseMovedWhilePressed( false ){
} }
void draw_area(){ void draw_area(){
@ -5344,15 +5348,15 @@ typedef MemberCaller1<Selector_, DeviceVector, &Selector_::mouseUp> MouseUpCalle
class Manipulator_ class Manipulator_
{ {
const DeviceVector& m_epsilon;
public: public:
DeviceVector m_epsilon;
const View* m_view; const View* m_view;
ModifierFlags m_state; ModifierFlags m_state;
bool m_moving_transformOrigin; bool m_moving_transformOrigin;
bool m_mouseMovedWhilePressed; bool m_mouseMovedWhilePressed;
Manipulator_() : m_state( c_modifierNone ), m_moving_transformOrigin( false ), m_mouseMovedWhilePressed( false ) { Manipulator_( const DeviceVector& epsilon ) : m_epsilon( epsilon ), m_state( c_modifierNone ), m_moving_transformOrigin( false ), m_mouseMovedWhilePressed( false ) {
} }
bool mouseDown( DeviceVector position ){ bool mouseDown( DeviceVector position ){
@ -5395,10 +5399,7 @@ void modifierDisable( ModifierFlags type ){
class RadiantWindowObserver : public SelectionSystemWindowObserver class RadiantWindowObserver : public SelectionSystemWindowObserver
{ {
enum DeviceVector m_epsilon;
{
SELECT_EPSILON = 8,
};
int m_width; int m_width;
int m_height; int m_height;
@ -5416,7 +5417,7 @@ Selector_ m_selector;
Manipulator_ m_manipulator; Manipulator_ m_manipulator;
TexManipulator_ m_texmanipulator; TexManipulator_ m_texmanipulator;
RadiantWindowObserver() : m_mouse_down( false ), m_moveEpsilon( .01f ){ RadiantWindowObserver() : m_mouse_down( false ), m_moveEpsilon( .01f ), m_selector( m_epsilon ), m_manipulator( m_epsilon ), m_texmanipulator( m_epsilon ){
} }
void release(){ void release(){
delete this; delete this;
@ -5429,13 +5430,17 @@ void setView( const View& view ){
void setRectangleDrawCallback( const RectangleCallback& callback ){ void setRectangleDrawCallback( const RectangleCallback& callback ){
m_selector.m_window_update = callback; m_selector.m_window_update = callback;
} }
void updateEpsilon(){
m_epsilon = DeviceVector( g_SELECT_EPSILON / static_cast<float>( m_width ), g_SELECT_EPSILON / static_cast<float>( m_height ) );
}
void onSizeChanged( int width, int height ){ void onSizeChanged( int width, int height ){
m_width = width; m_width = width;
m_height = height; m_height = height;
DeviceVector epsilon( SELECT_EPSILON / static_cast<float>( m_width ), SELECT_EPSILON / static_cast<float>( m_height ) ); updateEpsilon();
m_selector.m_epsilon = m_manipulator.m_epsilon = m_texmanipulator.m_epsilon = epsilon;
} }
void onMouseDown( const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers ){ void onMouseDown( const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers ){
updateEpsilon(); /* could have changed, as it is user setting */
const DeviceVector devicePosition( device( position ) ); const DeviceVector devicePosition( device( position ) );
if ( button == c_button_select || ( button == c_button_select2 && modifiers != c_modifierNone ) ) { if ( button == c_button_select || ( button == c_button_select2 && modifiers != c_modifierNone ) ) {
@ -5472,7 +5477,7 @@ void onMouseMotion( const WindowVector& position, ModifierFlags modifiers ){
g_mouseMovedCallback.get() ( device( position ) ); g_mouseMovedCallback.get() ( device( position ) );
} }
else{ else{
getSelectionSystem().HighlightManipulator( *m_manipulator.m_view, &device( position )[0], &m_manipulator.m_epsilon[0] ); getSelectionSystem().HighlightManipulator( *m_manipulator.m_view, &device( position )[0], &m_epsilon[0] );
} }
} }
void onMouseUp( const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers ){ void onMouseUp( const WindowVector& position, ButtonIdentifier button, ModifierFlags modifiers ){