diff --git a/resources/Makefile b/resources/Makefile index 8482181..1720ce4 100644 --- a/resources/Makefile +++ b/resources/Makefile @@ -92,6 +92,9 @@ all: cp -vf ./bitmaps/side_surfspec.png ../build/bitmaps/side_surfspec.png cp -vf ./bitmaps/side_tex.png ../build/bitmaps/side_tex.png cp -vf ./bitmaps/side_vertices.xpm ../build/bitmaps/side_vertices.xpm + cp -vf ./bitmaps/side_selectface.png ../build/bitmaps/side_selectface.png + cp -vf ./bitmaps/side_selectwhole.png ../build/bitmaps/side_selectwhole.png + cp -vf ./bitmaps/side_resize.png ../build/bitmaps/side_resize.png cp -vf ./bitmaps/splash.xcf ../build/bitmaps/splash.xcf cp -vf ./bitmaps/splash.xpm ../build/bitmaps/splash.xpm cp -vf ./bitmaps/texture_browser.xpm ../build/bitmaps/texture_browser.xpm diff --git a/resources/bitmaps/side_resize.png b/resources/bitmaps/side_resize.png new file mode 100644 index 0000000..0501c33 Binary files /dev/null and b/resources/bitmaps/side_resize.png differ diff --git a/resources/bitmaps/side_selectface.png b/resources/bitmaps/side_selectface.png new file mode 100644 index 0000000..946ab14 Binary files /dev/null and b/resources/bitmaps/side_selectface.png differ diff --git a/resources/bitmaps/side_selectwhole.png b/resources/bitmaps/side_selectwhole.png new file mode 100644 index 0000000..51fcff8 Binary files /dev/null and b/resources/bitmaps/side_selectwhole.png differ diff --git a/resources/bitmaps/ws_icons.xcf b/resources/bitmaps/ws_icons.xcf index 1cf81cd..858c277 100644 Binary files a/resources/bitmaps/ws_icons.xcf and b/resources/bitmaps/ws_icons.xcf differ diff --git a/src/mainframe.cpp b/src/mainframe.cpp index 38453a7..24296c6 100644 --- a/src/mainframe.cpp +++ b/src/mainframe.cpp @@ -1330,7 +1330,6 @@ void ToolChanged() g_dragmode_button.update(); g_clipper_button.update(); } - const char *const c_ResizeMode_status = "Drag Tool: move and resize objects"; void DragMode() @@ -1431,6 +1430,65 @@ void ClipperMode() } } +static int g_modifier_state; + +void Modifier1Export(const Callback &importCallback) +{ + importCallback(g_modifier_state == 0); +} +void Modifier2Export(const Callback &importCallback) +{ + importCallback(g_modifier_state == 1); +} +void Modifier3Export(const Callback &importCallback) +{ + importCallback(g_modifier_state == 3); +} + +FreeCaller &), Modifier1Export> g_modifier1_button_caller; +Callback &)> g_modifier1_button_callback(g_modifier1_button_caller); +ToggleItem g_modifier1_button(g_modifier1_button_callback); + +FreeCaller &), Modifier2Export> g_modifier2_button_caller; +Callback &)> g_modifier2_button_callback(g_modifier2_button_caller); +ToggleItem g_modifier2_button(g_modifier2_button_callback); + +FreeCaller &), Modifier3Export> g_modifier3_button_caller; +Callback &)> g_modifier3_button_callback(g_modifier3_button_caller); +ToggleItem g_modifier3_button(g_modifier3_button_callback); + +void ModifierChanged() +{ + g_modifier1_button.update(); + g_modifier2_button.update(); + g_modifier3_button.update(); +} + +void Modifier1() +{ + g_modifier_state = 0; + ModifierChanged(); + ModeChangeNotify(); +} +void Modifier2() +{ + g_modifier_state = 1; + ModifierChanged(); + ModeChangeNotify(); +} +void Modifier3() +{ + g_modifier_state = 3; + ModifierChanged(); + ModeChangeNotify(); +} + +int +Get_Modifier_State(void) +{ + return g_modifier_state; +} + void Texdef_Rotate(float angle) { @@ -2379,7 +2437,11 @@ ui::Toolbar create_main_sidebar() toolbar.add(btn); }; - toolbar_append_toggle_button(toolbar, "Resize (Q)", "side_select.png", "MouseDrag"); + toolbar_append_toggle_button(toolbar, "Create", "side_select.png", "Modifier1"); + toolbar_append_toggle_button(toolbar, "Select Face", "side_selectface.png", "Modifier3"); + toolbar_append_toggle_button(toolbar, "Select-Whole", "side_selectwhole.png", "Modifier2"); + space(); + toolbar_append_toggle_button(toolbar, "Resize (Q)", "side_resize.png", "MouseDrag"); toolbar_append_toggle_button(toolbar, "Translate (W)", "side_move.png", "MouseTranslate"); toolbar_append_toggle_button(toolbar, "Rotate (R)", "side_rotate.png", "MouseRotate"); toolbar_append_toggle_button(toolbar, "Scale", "side_scale.png", "MouseScale"); @@ -3109,6 +3171,11 @@ void MainFrame_Construct() GlobalToggles_insert("MouseDrag", makeCallbackF(DragMode), ToggleItem::AddCallbackCaller(g_dragmode_button), Accelerator('Q')); + + GlobalToggles_insert("Modifier1", makeCallbackF(Modifier1), ToggleItem::AddCallbackCaller(g_modifier1_button)); + GlobalToggles_insert("Modifier2", makeCallbackF(Modifier2), ToggleItem::AddCallbackCaller(g_modifier2_button)); + GlobalToggles_insert("Modifier3", makeCallbackF(Modifier3), ToggleItem::AddCallbackCaller(g_modifier3_button)); + GlobalCommands_insert("ColorSchemeWS", makeCallbackF(ColorScheme_WorldSpawn)); GlobalCommands_insert("ColorSchemeOriginal", makeCallbackF(ColorScheme_Original)); GlobalCommands_insert("ColorSchemeQER", makeCallbackF(ColorScheme_QER)); diff --git a/src/windowobservers.cpp b/src/windowobservers.cpp index 6f01a68..8a65bae 100644 --- a/src/windowobservers.cpp +++ b/src/windowobservers.cpp @@ -158,16 +158,17 @@ void GlobalWindowObservers_connectWidget(ui::Widget widget) widget.connect("motion_notify_event", G_CALLBACK(modifiers_motion), &g_window_observers); } +int Get_Modifier_State(void); ModifierFlags modifiers_for_state(unsigned int state) { ModifierFlags modifiers = c_modifierNone; - if (state & GDK_SHIFT_MASK) { + if (Get_Modifier_State() & 1) { modifiers |= c_modifierShift; } - if (state & GDK_CONTROL_MASK) { + if (Get_Modifier_State() & 2) { modifiers |= c_modifierControl; } - if (state & GDK_MOD1_MASK) { + if (Get_Modifier_State() & 4) { modifiers |= c_modifierAlt; } return modifiers;