From 79b2c431b2cb00d2524852044431bc1fd85f2686 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Sat, 19 Dec 2020 21:17:19 +0100 Subject: [PATCH] Work towards redoing some of the UX has begun, affecting our side-bar, the way we spawn and manipulate objects... etc. Mail the feedback. --- include/iselection.h | 3 + radiant/mainframe.cpp | 149 ++++++++++++--- radiant/patchdialog.cpp | 2 + radiant/selection.cpp | 69 ++++--- radiant/surfacedialog.cpp | 1 + radiant/xywindow.cpp | 268 ++++++++++++++++++++++++--- radiant/xywindow.h | 12 +- resources/bitmaps/side_brush.png | Bin 0 -> 1778 bytes resources/bitmaps/side_clipper.xpm | 45 ----- resources/bitmaps/side_cut.png | Bin 0 -> 2703 bytes resources/bitmaps/side_entities.png | Bin 0 -> 1983 bytes resources/bitmaps/side_entities.xpm | 45 ----- resources/bitmaps/side_entspec.png | Bin 0 -> 3637 bytes resources/bitmaps/side_find.xpm | 44 ----- resources/bitmaps/side_move.png | Bin 0 -> 1548 bytes resources/bitmaps/side_patch.png | Bin 0 -> 2343 bytes resources/bitmaps/side_patch.xpm | 157 ---------------- resources/bitmaps/side_patchspec.png | Bin 0 -> 2994 bytes resources/bitmaps/side_resize.xpm | 43 ----- resources/bitmaps/side_rotate.png | Bin 0 -> 1858 bytes resources/bitmaps/side_rotate.xpm | 44 ----- resources/bitmaps/side_scale.png | Bin 0 -> 1401 bytes resources/bitmaps/side_scale.xpm | 44 ----- resources/bitmaps/side_select.png | Bin 0 -> 1414 bytes resources/bitmaps/side_surface.xpm | 48 ----- resources/bitmaps/side_surfspec.png | Bin 0 -> 2319 bytes resources/bitmaps/side_tex.png | Bin 0 -> 1977 bytes resources/bitmaps/side_textures.xpm | 148 --------------- resources/bitmaps/side_transform.xpm | 44 ----- resources/bitmaps/ws_icons.xcf | Bin 0 -> 89400 bytes tools/vmap/light.c | 6 +- 31 files changed, 434 insertions(+), 738 deletions(-) create mode 100644 resources/bitmaps/side_brush.png delete mode 100644 resources/bitmaps/side_clipper.xpm create mode 100644 resources/bitmaps/side_cut.png create mode 100644 resources/bitmaps/side_entities.png delete mode 100644 resources/bitmaps/side_entities.xpm create mode 100644 resources/bitmaps/side_entspec.png delete mode 100644 resources/bitmaps/side_find.xpm create mode 100644 resources/bitmaps/side_move.png create mode 100644 resources/bitmaps/side_patch.png delete mode 100644 resources/bitmaps/side_patch.xpm create mode 100644 resources/bitmaps/side_patchspec.png delete mode 100644 resources/bitmaps/side_resize.xpm create mode 100644 resources/bitmaps/side_rotate.png delete mode 100644 resources/bitmaps/side_rotate.xpm create mode 100644 resources/bitmaps/side_scale.png delete mode 100644 resources/bitmaps/side_scale.xpm create mode 100644 resources/bitmaps/side_select.png delete mode 100644 resources/bitmaps/side_surface.xpm create mode 100644 resources/bitmaps/side_surfspec.png create mode 100644 resources/bitmaps/side_tex.png delete mode 100644 resources/bitmaps/side_textures.xpm delete mode 100644 resources/bitmaps/side_transform.xpm create mode 100644 resources/bitmaps/ws_icons.xcf diff --git a/include/iselection.h b/include/iselection.h index 9207271..eb38a63 100644 --- a/include/iselection.h +++ b/include/iselection.h @@ -89,6 +89,9 @@ enum EManipulatorMode eScale, eDrag, eClip, + eCreate, + eEntSpawn, + ePatchSpawn }; virtual void SetMode( EMode mode ) = 0; diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index 0af1490..6712367 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -1543,7 +1543,7 @@ void Selection_Clone_MakeUnique() NudgeSelection(eNudgeDown, GetGridSize(), GlobalXYWnd_getCurrentViewType()); } } - +void ScaleMode(); // called when the escape key is used (either on the main window or on an inspector) void Selection_Deselect() { @@ -1561,6 +1561,11 @@ void Selection_Deselect() GlobalSelectionSystem().setSelectedAll(false); } } + + if (GlobalSelectionSystem().ManipulatorMode() != SelectionSystem::eCreate) + if (GlobalSelectionSystem().ManipulatorMode() != SelectionSystem::eEntSpawn) + if (GlobalSelectionSystem().ManipulatorMode() != SelectionSystem::ePatchSpawn) + ScaleMode(); } @@ -1614,6 +1619,22 @@ void ClipperToolExport(const Callback &importCallback) importCallback(GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::eClip); } +void CreateToolExport(const Callback &importCallback) +{ + importCallback(GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::eCreate); +} + +void CreateEToolExport(const Callback &importCallback) +{ + importCallback(GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::eEntSpawn); +} + +void CreatePToolExport(const Callback &importCallback) +{ + importCallback(GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::ePatchSpawn); +} + + FreeCaller &), TranslateToolExport> g_translatemode_button_caller; Callback &)> g_translatemode_button_callback(g_translatemode_button_caller); ToggleItem g_translatemode_button(g_translatemode_button_callback); @@ -1634,6 +1655,18 @@ FreeCaller &), ClipperToolExport> g_clipper_butt Callback &)> g_clipper_button_callback(g_clipper_button_caller); ToggleItem g_clipper_button(g_clipper_button_callback); +FreeCaller &), CreateToolExport> g_create_button_caller; +Callback &)> g_create_button_callback(g_create_button_caller); +ToggleItem g_create_button(g_create_button_callback); + +FreeCaller &), CreateEToolExport> g_createE_button_caller; +Callback &)> g_createE_button_callback(g_createE_button_caller); +ToggleItem g_createE_button(g_createE_button_callback); + +FreeCaller &), CreatePToolExport> g_createP_button_caller; +Callback &)> g_createP_button_callback(g_createP_button_caller); +ToggleItem g_createP_button(g_createP_button_callback); + void ToolChanged() { g_translatemode_button.update(); @@ -1641,10 +1674,12 @@ void ToolChanged() g_scalemode_button.update(); g_dragmode_button.update(); g_clipper_button.update(); + g_create_button.update(); + g_createE_button.update(); + g_createP_button.update(); } const char *const c_ResizeMode_status = "Drag Tool: move and resize objects"; - void DragMode() { if (g_currentToolMode == DragMode && g_defaultToolMode != DragMode) { @@ -1662,6 +1697,63 @@ void DragMode() } } +const char *const c_CreateMode_status = "Create Tool: draw brush models"; +void CreateMode() +{ + Selection_Deselect(); + if (g_currentToolMode == CreateMode && g_defaultToolMode != CreateMode) { + g_defaultToolMode(); + } else { + g_currentToolMode = CreateMode; + g_currentToolModeSupportsComponentEditing = true; + + OnClipMode(false); + + Sys_Status(c_CreateMode_status); + GlobalSelectionSystem().SetManipulatorMode(SelectionSystem::eCreate); + ToolChanged(); + ModeChangeNotify(); + } +} + +const char *const c_CreateEMode_status = "Create Entity Tool: spawn point entities"; +void CreateEMode() +{ + Selection_Deselect(); + if (g_currentToolMode == CreateEMode && g_defaultToolMode != CreateEMode) { + g_defaultToolMode(); + } else { + g_currentToolMode = CreateEMode; + g_currentToolModeSupportsComponentEditing = true; + + OnClipMode(false); + + Sys_Status(c_CreateEMode_status); + GlobalSelectionSystem().SetManipulatorMode(SelectionSystem::eEntSpawn); + ToolChanged(); + ModeChangeNotify(); + } +} + +const char *const c_CreatePMode_status = "Create Patch Tool: spawn patches"; +void CreatePMode() +{ + Selection_Deselect(); + if (g_currentToolMode == CreatePMode && g_defaultToolMode != CreatePMode) { + g_defaultToolMode(); + } else { + g_currentToolMode = CreatePMode; + g_currentToolModeSupportsComponentEditing = true; + + OnClipMode(false); + + Sys_Status(c_CreatePMode_status); + GlobalSelectionSystem().SetManipulatorMode(SelectionSystem::ePatchSpawn); + ToolChanged(); + ModeChangeNotify(); + } +} + const char *const c_TranslateMode_status = "Translate Tool: translate objects and components"; @@ -2507,9 +2599,12 @@ void Patch_registerShortcuts() void Manipulators_registerShortcuts() { + toggle_add_accelerator("MouseCreate"); + toggle_add_accelerator("MouseCreateE"); + toggle_add_accelerator("MouseCreateP"); toggle_add_accelerator("MouseRotate"); toggle_add_accelerator("MouseTranslate"); - toggle_add_accelerator("MouseScale"); + toggle_add_accelerator("MouseSelect"); toggle_add_accelerator("MouseDrag"); toggle_add_accelerator("ToggleClipper"); } @@ -2578,6 +2673,10 @@ void File_constructToolbar(ui::Toolbar toolbar) void UndoRedo_constructToolbar(ui::Toolbar toolbar) { + + toolbar_append_toggle_button(toolbar, "Select Vertices (V)", "side_vertices.xpm", "DragVertices"); + toolbar_append_toggle_button(toolbar, "Select Edges (E)", "side_edges.xpm", "DragEdges"); + toolbar_append_toggle_button(toolbar, "Select Faces (F)", "side_faces.xpm", "DragFaces"); toolbar_append_button(toolbar, "Undo (CTRL + Z)", "undo.xpm", "Undo"); toolbar_append_button(toolbar, "Redo (CTRL + Y)", "redo.xpm", "Redo"); } @@ -2630,10 +2729,11 @@ void XYWnd_constructToolbar(ui::Toolbar toolbar) void Manipulators_constructToolbar(ui::Toolbar toolbar) { - toolbar_append_toggle_button(toolbar, "Translate (W)", "select_mousetranslate.xpm", "MouseTranslate"); - toolbar_append_toggle_button(toolbar, "Rotate (R)", "select_mouserotate.xpm", "MouseRotate"); - toolbar_append_toggle_button(toolbar, "Scale", "select_mousescale.xpm", "MouseScale"); - toolbar_append_toggle_button(toolbar, "Resize (Q)", "select_mouseresize.xpm", "MouseDrag"); + toolbar_append_toggle_button(toolbar, "Select", "select_mousescale.xpm", "MouseSelect"); + toolbar_append_toggle_button(toolbar, "Translate", "select_mousetranslate.xpm", "MouseTranslate"); + toolbar_append_toggle_button(toolbar, "Rotate", "select_mouserotate.xpm", "MouseRotate"); + toolbar_append_toggle_button(toolbar, "Resize", "select_mouseresize.xpm", "MouseDrag"); + toolbar_append_toggle_button(toolbar, "Create", "select_mousecreate.xpm", "MouseCreate"); Clipper_constructToolbar(toolbar); } @@ -2737,22 +2837,20 @@ ui::Toolbar create_main_sidebar() toolbar.add(btn); }; - toolbar_append_toggle_button(toolbar, "Select Vertices (V)", "side_vertices.xpm", "DragVertices"); - toolbar_append_toggle_button(toolbar, "Select Edges (E)", "side_edges.xpm", "DragEdges"); - toolbar_append_toggle_button(toolbar, "Select Faces (F)", "side_faces.xpm", "DragFaces"); + toolbar_append_toggle_button(toolbar, "Select", "side_select.png", "MouseSelect"); + toolbar_append_toggle_button(toolbar, "Translate", "side_move.png", "MouseTranslate"); + toolbar_append_toggle_button(toolbar, "Rotate", "side_rotate.png", "MouseRotate"); + toolbar_append_toggle_button(toolbar, "Resize", "side_scale.png", "MouseDrag"); + toolbar_append_toggle_button(toolbar, "Clipper", "side_cut.png", "ToggleClipper"); space(); - toolbar_append_toggle_button(toolbar, "Drag (Q)", "side_resize.xpm", "MouseDrag"); - toolbar_append_toggle_button(toolbar, "Translate (W)", "side_transform.xpm", "MouseTranslate"); - toolbar_append_toggle_button(toolbar, "Rotate (R)", "side_rotate.xpm", "MouseRotate"); - toolbar_append_toggle_button(toolbar, "Scale", "side_scale.xpm", "MouseScale"); - toolbar_append_toggle_button(toolbar, "Clipper (X)", "side_clipper.xpm", "ToggleClipper"); - space(); - toolbar_append_button(toolbar, "Entity Inspector (N)", "side_entities.xpm", "ToggleEntityInspector"); - toolbar_append_button(toolbar, "Texture Browser (T)", "side_textures.xpm", "ToggleTextures"); - toolbar_append_button(toolbar, "Surface Inspector (S)", "side_surface.xpm", "SurfaceInspector"); - toolbar_append_button(toolbar, "Patch Inspector (SHIFT + S)", "side_patch.xpm", "PatchInspector"); - space(); - toolbar_append_button(toolbar, "Find Brush", "side_find.xpm", "FindBrush"); + toolbar_append_toggle_button(toolbar, "Create", "side_brush.png", "MouseCreate"); + toolbar_append_toggle_button(toolbar, "Create Entity", "side_entities.png", "MouseCreateE"); + toolbar_append_toggle_button(toolbar, "Create Patch", "side_patch.png", "MouseCreateP"); + space(); + toolbar_append_button(toolbar, "Texture Browser", "side_tex.png", "ToggleTextures"); + toolbar_append_button(toolbar, "Entity Inspector", "side_entspec.png", "ToggleEntityInspector"); + toolbar_append_button(toolbar, "Surface Inspector", "side_surfspec.png", "SurfaceInspector"); + toolbar_append_button(toolbar, "Patch Inspector", "side_patchspec.png", "PatchInspector"); return toolbar; } @@ -3176,7 +3274,7 @@ void MainFrame::Create() SetActiveXY(m_pXYWnd); AddGridChangeCallback(SetGridStatusCaller(*this)); AddGridChangeCallback(ReferenceCaller(*this)); - g_defaultToolMode = DragMode; + g_defaultToolMode = ScaleMode; g_defaultToolMode(); SetStatusText(m_command_status, c_TranslateMode_status); EverySecondTimer_enable(); @@ -3437,9 +3535,12 @@ void MainFrame_Construct() ToggleItem::AddCallbackCaller(g_translatemode_button), Accelerator('W')); GlobalToggles_insert("MouseRotate", makeCallbackF(RotateMode), ToggleItem::AddCallbackCaller(g_rotatemode_button), Accelerator('R')); - GlobalToggles_insert("MouseScale", makeCallbackF(ScaleMode), ToggleItem::AddCallbackCaller(g_scalemode_button)); + GlobalToggles_insert("MouseSelect", makeCallbackF(ScaleMode), ToggleItem::AddCallbackCaller(g_scalemode_button)); GlobalToggles_insert("MouseDrag", makeCallbackF(DragMode), ToggleItem::AddCallbackCaller(g_dragmode_button), Accelerator('Q')); + GlobalToggles_insert("MouseCreate", makeCallbackF(CreateMode), ToggleItem::AddCallbackCaller(g_create_button)); + GlobalToggles_insert("MouseCreateE", makeCallbackF(CreateEMode), ToggleItem::AddCallbackCaller(g_createE_button)); + GlobalToggles_insert("MouseCreateP", makeCallbackF(CreatePMode), ToggleItem::AddCallbackCaller(g_createP_button)); GlobalCommands_insert("ColorSchemeWS", makeCallbackF(ColorScheme_WorldSpawn)); GlobalCommands_insert("ColorSchemeOriginal", makeCallbackF(ColorScheme_Original)); diff --git a/radiant/patchdialog.cpp b/radiant/patchdialog.cpp index e62b296..4c86039 100644 --- a/radiant/patchdialog.cpp +++ b/radiant/patchdialog.cpp @@ -607,6 +607,8 @@ ui::Window PatchInspector::BuildDialog() global_accel_connect_window(window); window_connect_focus_in_clear_focus_widget(window); + + gtk_window_set_resizable(window, FALSE); { diff --git a/radiant/selection.cpp b/radiant/selection.cpp index a8666cc..74f40df 100644 --- a/radiant/selection.cpp +++ b/radiant/selection.cpp @@ -388,7 +388,7 @@ public: void Transform(const Matrix4 &manip2object, const Matrix4 &device2manip, const float x, const float y) { - Vector3 current; + /*Vector3 current; point_on_axis(current, m_axis, device2manip, x, y); Vector3 delta = vector3_subtracted(current, m_start); @@ -401,7 +401,7 @@ public: start[1] == 0 ? 1 : 1 + delta[1] / start[1], start[2] == 0 ? 1 : 1 + delta[2] / start[2] ); - m_scalable.scale(scale); + m_scalable.scale(scale);*/ } void SetAxis(const Vector3 &axis) @@ -427,7 +427,7 @@ public: void Transform(const Matrix4 &manip2object, const Matrix4 &device2manip, const float x, const float y) { - Vector3 current; + /*Vector3 current; point_on_plane(current, device2manip, x, y); Vector3 delta = vector3_subtracted(current, m_start); @@ -440,7 +440,7 @@ public: start[1] == 0 ? 1 : 1 + delta[1] / start[1], start[2] == 0 ? 1 : 1 + delta[2] / start[2] ); - m_scalable.scale(scale); + m_scalable.scale(scale);*/ } }; @@ -1631,11 +1631,11 @@ public: m_free(scalable), m_axis(scalable) { - draw_arrowline(length, m_arrow_x.m_line, 0); + /* draw_arrowline(length, m_arrow_x.m_line, 0); draw_arrowline(length, m_arrow_y.m_line, 1); draw_arrowline(length, m_arrow_z.m_line, 2); - draw_quad(16, m_quad_screen.m_quad); + draw_quad(16, m_quad_screen.m_quad);*/ } Pivot2World &getPivot() @@ -2899,6 +2899,9 @@ public: case eDrag: m_manipulator = &m_drag_manipulator; break; + case eCreate: + m_manipulator = &m_drag_manipulator; + break; case eClip: m_manipulator = &m_clip_manipulator; break; @@ -3017,14 +3020,14 @@ public: bool SelectManipulator(const View &view, const float device_point[2], const float device_epsilon[2]) { - if (!nothingSelected() || (ManipulatorMode() == eDrag && Mode() == eComponent)) { + if (!nothingSelected() || ((ManipulatorMode() == eDrag || ManipulatorMode() == eCreate) && Mode() == eComponent)) { #if defined ( DEBUG_SELECTION ) g_render_clipped.destroy(); #endif m_manipulator->setSelected(false); - if (!nothingSelected() || (ManipulatorMode() == eDrag && Mode() == eComponent)) { + if (!nothingSelected() || ((ManipulatorMode() == eDrag || ManipulatorMode() == eCreate) && Mode() == eComponent)) { View scissored(view); ConstructSelectionTest(scissored, SelectionBoxForPoint(device_point, device_epsilon)); m_manipulator->testSelect(scissored, GetPivot2World()); @@ -3067,6 +3070,10 @@ public: void SelectPoint(const View &view, const float device_point[2], const float device_epsilon[2], RadiantSelectionSystem::EModifier modifier, bool face) { + if (m_manipulator_mode != eScale) { + return; + } + ASSERT_MESSAGE(fabs(device_point[0]) <= 1.0f && fabs(device_point[1]) <= 1.0f, "point-selection error"); if (modifier == eReplace) { if (face) { @@ -3142,6 +3149,10 @@ public: void SelectArea(const View &view, const float device_point[2], const float device_delta[2], RadiantSelectionSystem::EModifier modifier, bool face) { + if (m_manipulator_mode != eScale) { + return; + } + if (modifier == eReplace) { if (face) { setSelectedAllComponents(false); @@ -3284,7 +3295,7 @@ public: /// \todo Support view-dependent nudge. void NudgeManipulator(const Vector3 &nudge, const Vector3 &view) { - if (ManipulatorMode() == eTranslate || ManipulatorMode() == eDrag) { + if (ManipulatorMode() == eTranslate || (ManipulatorMode() == eDrag || ManipulatorMode() == eCreate)) { translateSelected(nudge); } } @@ -3518,7 +3529,7 @@ void RadiantSelectionSystem::endMove() freezeTransforms(); if (Mode() == ePrimitive) { - if (ManipulatorMode() == eDrag) { + if ((ManipulatorMode() == eDrag || ManipulatorMode() == eCreate)) { Scene_SelectAll_Component(false, SelectionSystem::eFace); } } @@ -3538,15 +3549,14 @@ void RadiantSelectionSystem::endMove() command << "rotateTool"; outputRotation(command); } else if (ManipulatorMode() == eScale) { - command << "scaleTool"; - outputScale(command); - } else if (ManipulatorMode() == eDrag) { + //command << "scaleTool"; + //outputScale(command); + } else if ((ManipulatorMode() == eDrag || ManipulatorMode() == eCreate)) { command << "dragTool"; - } + } GlobalUndoSystem().finish(command.c_str()); } - } inline AABB Instance_getPivotBounds(scene::Instance &instance) @@ -3677,13 +3687,6 @@ void RadiantSelectionSystem::ConstructPivot() const matrix4_assign_rotation_for_pivot(m_pivot2world, m_selection.back()); } break; - case eScale: - if (Mode() == eComponent) { - matrix4_assign_rotation_for_pivot(m_pivot2world, m_component_selection.back()); - } else { - matrix4_assign_rotation_for_pivot(m_pivot2world, m_selection.back()); - } - break; default: break; } @@ -3785,9 +3788,9 @@ Single g_mouseUpCallback; const ButtonIdentifier c_button_select = c_buttonLeft; const ButtonIdentifier c_button_texture = c_buttonMiddle; const ModifierFlags c_modifier_manipulator = c_modifierNone; -const ModifierFlags c_modifier_toggle = c_modifierShift; -const ModifierFlags c_modifier_toggle_face = c_modifierShift | c_modifierControl; -const ModifierFlags c_modifier_face = c_modifierControl; +const ModifierFlags c_modifier_toggle = c_modifierNone; +const ModifierFlags c_modifier_toggle_face = c_modifierShift; +const ModifierFlags c_modifier_face = c_modifierShift; const ModifierFlags c_modifier_replace = c_modifierShift | c_modifierAlt; const ModifierFlags c_modifier_replace_face = c_modifier_replace | c_modifier_face; const ModifierFlags c_modifier_apply_texture1 = c_modifierControl | c_modifierShift; @@ -3839,8 +3842,12 @@ public: void testSelect(DeviceVector position) { + if (getSelectionSystem().ManipulatorMode() != SelectionSystem::eScale) { + return; + } + RadiantSelectionSystem::EModifier modifier = modifier_for_state(m_state); - if (modifier != RadiantSelectionSystem::eManipulator) { + DeviceVector delta(position - m_start); if (fabs(delta.x()) > m_epsilon.x() && fabs(delta.y()) > m_epsilon.y()) { DeviceVector delta(position - m_start); @@ -3853,7 +3860,6 @@ public: getSelectionSystem().SelectPoint(*m_view, &position[0], &m_epsilon[0], modifier, (m_state & c_modifier_face) != c_modifierNone); } - } m_start = m_current = DeviceVector(0.0f, 0.0f); draw_area(); @@ -3861,7 +3867,10 @@ public: bool selecting() const { - return m_state != c_modifier_manipulator; + if (getSelectionSystem().ManipulatorMode() != SelectionSystem::eScale) { + return 0; + } + return 1; } void setState(ModifierFlags state) @@ -3997,6 +4006,10 @@ public: g_mouseMovedCallback.insert(MouseEventCallback(Manipulator_::MouseMovedCaller(m_manipulator))); g_mouseUpCallback.insert(MouseEventCallback(Manipulator_::MouseUpCaller(m_manipulator))); } else { + /* TODO: Only when eScale is selected */ + if (getSelectionSystem().ManipulatorMode() != SelectionSystem::eScale) { + return; + } m_selector.mouseDown(devicePosition); g_mouseMovedCallback.insert(MouseEventCallback(Selector_::MouseMovedCaller(m_selector))); g_mouseUpCallback.insert(MouseEventCallback(Selector_::MouseUpCaller(m_selector))); diff --git a/radiant/surfacedialog.cpp b/radiant/surfacedialog.cpp index e3b2299..e6a020b 100644 --- a/radiant/surfacedialog.cpp +++ b/radiant/surfacedialog.cpp @@ -634,6 +634,7 @@ ui::Window SurfaceInspector::BuildDialog() global_accel_connect_window(window); window_connect_focus_in_clear_focus_widget(window); + gtk_window_set_resizable(window, FALSE); { diff --git a/radiant/xywindow.cpp b/radiant/xywindow.cpp index ef261bc..5283173 100644 --- a/radiant/xywindow.cpp +++ b/radiant/xywindow.cpp @@ -324,6 +324,16 @@ bool ClipMode() return GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::eClip; } +bool IsCreateMode() +{ + return GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::eCreate; +} + +bool IsCreateEMode() +{ + return GlobalSelectionSystem().ManipulatorMode() == SelectionSystem::eEntSpawn; +} + void NewClipPoint(const Vector3 &point) { if (g_Clip1.Set() == false) { @@ -1235,16 +1245,9 @@ public: void XYWnd::OnContextMenu() { - if (g_xywindow_globals.m_bRightClick == false) { + if (g_xywindow_globals.m_bRightClick == false) return; - } - /* first time, init */ - if (!m_mnuDrop) { - auto menu1 = m_mnuDrop = ui::Menu(ui::New); - EntityClassMenuInserter inserter(menu1); - GlobalEntityClassManager().forEachPoint(inserter); - } if (!m_mnuDropSingle) { auto menu2 = m_mnuDropSingle = ui::Menu(ui::New); create_menu_item_with_mnemonic(menu2, "Make detail", "MakeDetail"); @@ -1275,15 +1278,29 @@ void XYWnd::OnContextMenu() create_menu_item_with_mnemonic(menu3, "_Normalize Color...", "NormalizeColor"); } - if (GlobalSelectionSystem().countSelected() == 0) { - gtk_menu_popup(m_mnuDrop, 0, 0, 0, 0, 1, GDK_CURRENT_TIME); - } else if (GlobalSelectionSystem().countSelected() == 1) { + if (GlobalSelectionSystem().countSelected() == 1) { gtk_menu_popup(m_mnuDropSingle, 0, 0, 0, 0, 1, GDK_CURRENT_TIME); } else { gtk_menu_popup(m_mnuDropMultiple, 0, 0, 0, 0, 1, GDK_CURRENT_TIME); } } +void Selection_Deselect(); +void XYWnd::OnPointMenu() +{ + /* first time, init */ + if (!m_mnuDrop) { + auto menu1 = m_mnuDrop = ui::Menu(ui::New); + EntityClassMenuInserter inserter(menu1); + GlobalEntityClassManager().forEachPoint(inserter); + } + + if (GlobalSelectionSystem().countSelected() != 0) + Selection_Deselect(); + + gtk_menu_popup(m_mnuDrop, 0, 0, 0, 0, 1, GDK_CURRENT_TIME); +} + FreezePointer g_xywnd_freezePointer; unsigned int Move_buttons() @@ -1294,6 +1311,8 @@ unsigned int Move_buttons() void XYWnd_moveDelta(int x, int y, unsigned int state, void *data) { reinterpret_cast( data )->EntityCreate_MouseMove(x, y); + reinterpret_cast( data )->PointCreate_MouseMove(x, y); + reinterpret_cast( data )->BrushCreate_MouseMove(x, y); reinterpret_cast( data )->Scroll(-x, y); } @@ -1405,21 +1424,24 @@ void XYWnd::mouseDown(const WindowVector &position, ButtonIdentifier button, Mod } void CamWnd_DisableMovement(); - void XYWnd::XY_MouseDown(int x, int y, unsigned int buttons) { - if (buttons == Move_buttons()) { - Move_Begin(); - EntityCreate_MouseDown(x, y); +#if 0 + if (IsCreateEMode()) { + PointCreate_MouseDown(x, y); } else if (buttons == Zoom_buttons()) { Zoom_Begin(); } else if (ClipMode() && buttons == Clipper_buttons()) { Clipper_OnLButtonDown(x, y); - } else if (buttons == NewBrushDrag_buttons() && GlobalSelectionSystem().countSelected() == 0) { + } else if (IsCreateMode() && buttons == NewBrushDrag_buttons() && GlobalSelectionSystem().countSelected() == 0) { + /* Only do it in eCreate mode */ NewBrushDrag_Begin(x, y); - } + } if (IsCreateMode()) { + BrushCreate_MouseDown(x, y); + } else if (buttons == Move_buttons()) { + Move_Begin(); + } else if (buttons == MoveCamera_buttons()) { // control mbutton = move camera - else if (buttons == MoveCamera_buttons()) { XYWnd_PositionCamera(this, x, y, *g_pParentWnd->GetCamWnd()); } // mbutton = angle camera @@ -1429,25 +1451,184 @@ void XYWnd::XY_MouseDown(int x, int y, unsigned int buttons) m_window_observer->onMouseDown(WindowVector_forInteger(x, y), button_for_flags(buttons), modifiers_for_flags(buttons)); } +#else + switch (GlobalSelectionSystem().ManipulatorMode()) { + case SelectionSystem::eScale: + case SelectionSystem::eRotate: + case SelectionSystem::eDrag: + case SelectionSystem::eTranslate: + if (buttons == Zoom_buttons()) { + Zoom_Begin(); + } else if (buttons == Move_buttons()) { + Move_Begin(); + } else if (buttons == MoveCamera_buttons()) { + // control mbutton = move camera + XYWnd_PositionCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else if (buttons == OrientCamera_buttons()) { + // mbutton = angle camera + XYWnd_OrientCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else { + m_window_observer->onMouseDown(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::eClip: + if (buttons == Clipper_buttons()) { + Clipper_OnLButtonDown(x, y); + } else if (buttons == Move_buttons()) { + Move_Begin(); + } else if (buttons == MoveCamera_buttons()) { + // control mbutton = move camera + XYWnd_PositionCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else if (buttons == OrientCamera_buttons()) { + // mbutton = angle camera + XYWnd_OrientCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else { + m_window_observer->onMouseDown(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::ePatchSpawn: + case SelectionSystem::eCreate: + if (buttons == NewBrushDrag_buttons() && GlobalSelectionSystem().countSelected() == 0) + NewBrushDrag_Begin(x, y); + else if (buttons == Move_buttons() && GlobalSelectionSystem().countSelected() == 0) { + Move_Begin(); + } else if (buttons == MoveCamera_buttons()) { + // control mbutton = move camera + XYWnd_PositionCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else if (buttons == OrientCamera_buttons()) { + // mbutton = angle camera + XYWnd_OrientCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else { + m_window_observer->onMouseDown(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::eEntSpawn: + if (buttons == NewBrushDrag_buttons()) + PointCreate_MouseDown(x, y); + else if (buttons == Move_buttons() && GlobalSelectionSystem().countSelected() == 0) { + Move_Begin(); + } else if (buttons == MoveCamera_buttons()) { + // control mbutton = move camera + XYWnd_PositionCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else if (buttons == OrientCamera_buttons()) { + // mbutton = angle camera + XYWnd_OrientCamera(this, x, y, *g_pParentWnd->GetCamWnd()); + } else { + m_window_observer->onMouseDown(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + } +#endif + CamWnd_DisableMovement(); } +void Patch_Plane(); void XYWnd::XY_MouseUp(int x, int y, unsigned int buttons) { - if (m_move_started) { +#if 0 + if (IsCreateEMode()) { + PointCreate_MouseUp(x, y); + } else if (IsCreateMode() && buttons == Move_buttons()) { + BrushCreate_MouseUp(x, y); + } else if (m_move_started) { Move_End(); EntityCreate_MouseUp(x, y); } else if (m_zoom_started) { Zoom_End(); } else if (ClipMode() && buttons == Clipper_buttons()) { Clipper_OnLButtonUp(x, y); - } else if (m_bNewBrushDrag) { + }else if (m_bNewBrushDrag) { m_bNewBrushDrag = false; NewBrushDrag_End(x, y); - } else { + }else { m_window_observer->onMouseUp(WindowVector_forInteger(x, y), button_for_flags(buttons), modifiers_for_flags(buttons)); } +#else + switch (GlobalSelectionSystem().ManipulatorMode()) { + case SelectionSystem::eScale: + case SelectionSystem::eRotate: + case SelectionSystem::eDrag: + case SelectionSystem::eTranslate: + if (m_move_started) { + Move_End(); + EntityCreate_MouseUp(x, y); + } else if (m_zoom_started) { + Zoom_End(); + } else { + m_window_observer->onMouseUp(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::eClip: + if (buttons == Clipper_buttons()) + Clipper_OnLButtonUp(x, y); + else if (m_move_started) { + Move_End(); + EntityCreate_MouseUp(x, y); + } else if (m_zoom_started) { + Zoom_End(); + } else { + m_window_observer->onMouseUp(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::eCreate: + if (buttons == Move_buttons() && GlobalSelectionSystem().countSelected() != 0) { + BrushCreate_MouseUp(x, y); + Selection_Deselect(); + } else if (m_move_started) { + Move_End(); + EntityCreate_MouseUp(x, y); + } else if (m_zoom_started) { + Zoom_End(); + } else if (m_bNewBrushDrag) { + m_bNewBrushDrag = false; + NewBrushDrag_End(x, y); + } else { + m_window_observer->onMouseUp(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::eEntSpawn: + if (buttons == Move_buttons() && GlobalSelectionSystem().countSelected() != 0) { + Selection_Deselect(); + } else if (buttons == NewBrushDrag_buttons()) + PointCreate_MouseUp(x, y); + else if (m_move_started) { + Move_End(); + EntityCreate_MouseUp(x, y); + } else if (m_zoom_started) { + Zoom_End(); + } else { + m_window_observer->onMouseUp(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + case SelectionSystem::ePatchSpawn: + if (buttons == Move_buttons() && GlobalSelectionSystem().countSelected() != 0) { + BrushCreate_MouseUp(x, y); + Patch_Plane(); + } else if (m_move_started) { + Move_End(); + EntityCreate_MouseUp(x, y); + } else if (m_zoom_started) { + Zoom_End(); + } else if (m_bNewBrushDrag) { + m_bNewBrushDrag = false; + NewBrushDrag_End(x, y); + } else { + m_window_observer->onMouseUp(WindowVector_forInteger(x, y), button_for_flags(buttons), + modifiers_for_flags(buttons)); + } + break; + } +#endif } void XYWnd::XY_MouseMoved(int x, int y, unsigned int buttons) @@ -1516,6 +1697,51 @@ void XYWnd::EntityCreate_MouseUp(int x, int y) } } +void XYWnd::BrushCreate_MouseDown(int x, int y) +{ + m_entityCreate = true; + m_entityCreate_x = x; + m_entityCreate_y = y; +} + +void XYWnd::BrushCreate_MouseMove(int x, int y) +{ + if (m_entityCreate && (m_entityCreate_x != x || m_entityCreate_y != y)) { + m_entityCreate = false; + } +} + +void XYWnd::BrushCreate_MouseUp(int x, int y) +{ + if (m_entityCreate) { + m_entityCreate = false; + m_bNewBrushDrag = false; + NewBrushDrag_End(x, y); + } +} + +void XYWnd::PointCreate_MouseDown(int x, int y) +{ + m_entityCreate = true; + m_entityCreate_x = x; + m_entityCreate_y = y; +} + +void XYWnd::PointCreate_MouseMove(int x, int y) +{ + if (m_entityCreate && (m_entityCreate_x != x || m_entityCreate_y != y)) { + m_entityCreate = false; + } +} + +void XYWnd::PointCreate_MouseUp(int x, int y) +{ + if (m_entityCreate) { + m_entityCreate = false; + OnPointMenu(); + } +} + inline float screen_normalised(int pos, unsigned int size) { return ((2.0f * pos) / size) - 1.0f; diff --git a/radiant/xywindow.h b/radiant/xywindow.h index 4edfc63..1ccef30 100644 --- a/radiant/xywindow.h +++ b/radiant/xywindow.h @@ -231,6 +231,8 @@ private: void OriginalButtonDown(guint32 nFlags, int point, int pointy); void OnContextMenu(); + void OnBrushMenu(); + void OnPointMenu(); void PaintSizeInfo(int nDim1, int nDim2, Vector3 &vMinBounds, Vector3 &vMaxBounds); @@ -254,11 +256,17 @@ public: } void EntityCreate_MouseDown(int x, int y); - void EntityCreate_MouseMove(int x, int y); - void EntityCreate_MouseUp(int x, int y); + void BrushCreate_MouseDown(int x, int y); + void BrushCreate_MouseMove(int x, int y); + void BrushCreate_MouseUp(int x, int y); + + void PointCreate_MouseDown(int x, int y); + void PointCreate_MouseMove(int x, int y); + void PointCreate_MouseUp(int x, int y); + void OnEntityCreate(const char *item); VIEWTYPE GetViewType() diff --git a/resources/bitmaps/side_brush.png b/resources/bitmaps/side_brush.png new file mode 100644 index 0000000000000000000000000000000000000000..7e83db7f5dc5b01e934e0f924d49ff6321bec60b GIT binary patch literal 1778 zcmVEX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00hcOL_t(&-tAewuGP}s}yu_Rqg8+Iq9p_>bTGT6aye ztKdl6SlA!ZLC*b<{t>4K;9*(Uo(S#RQF|6S@X4F|`rI6MOjWWF;Z1p?MBS++-=2u! zipgE%z-O=jsLzKc7!P7%Vgdmo<-#a8L>U97VerEWX{^4Vk1e5nM~+n1kU&Zg5A#B;sI*JUMc~K@Bbr<|l{F#}lD_N0ovNuXEt}U;DZ{G&{#t z5Al%l5+Y;0GWv4RImth}LbY_KBcVBw_FDX@E9ufOY2#{c(Am!l71#_VaE;^7kPozdu!gAztxyBiroZNF*U#Y!- zd0J=G0Y=qRA1I?gr?QLC6*QxRK+LQRNxy_lh-Vd?4pi*W)WdIi4Z!ud6;4=?f|wj* zfQWK|1DxWsO!MjLWK@c^$U|j)IfUpYZK7~wKn2}VUBs3bbD4Cvh9P4Hxj|FK&h0Kz z=%fSaq_Qf=-;7!#L$YB_&Ocj)>O*%og$pm{EOo$l1^XeIQw-)v!$&z^nh3;9_;m-G z@eKIDh%B-w5m7kG$hlnTL9lIwlX~^O5a>(ipvepbj#iN|;uD1z0@^91kxVHtM6LS1 z%_vX(Wh$M_fQm8_q)NRZ_PK&!QuD_G+WBz-=xJpQL{fmkttVXzC8Nv{K{Y*@DG~vK zX=1U)uo^<9BMwq$f*2I;jUlD%NY=xOTZZWjNbFjSn}ROsFnPXJW#sibW>ItazgVbC zaLK6Me8vUxD6O#!hAs(PtF~7`sPjpW5bINx#C|CgSuIOJOL`xO#?9V{UrXalGXP_W zQ2?5eU?K=zgc93c>YF&{TsRkD7P45GA%$jS093}u z=mp{QF)%CoFxUH$b)a?kLLRw389n)OYIN377�}$4D8E5og`Ov3aunVSOW;U;~>R z2m`33p6xn0*NZDfLBY4rw)Jmc-Tl1Ufef$X$AQsjESni}c>vKk2Y*0x`*d5s{QB;v zhcz-11;`^bDX|J;EURlnc8jRA62zI-insyW zRxAoRT|L>>e|~$}_<1!TwU4<}&QxYe`;3SsD@o${WAk`hzxr;T@$+h64C|#1IpY8_ z^}gGu+j{@~eB)=G2TBpNl7j8+BE;2*_}>ScOvyU9dAzOnFP0g99oKOk*YW*6PI{*Lx literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_clipper.xpm b/resources/bitmaps/side_clipper.xpm deleted file mode 100644 index bcb87e1..0000000 --- a/resources/bitmaps/side_clipper.xpm +++ /dev/null @@ -1,45 +0,0 @@ -/* XPM */ -static char *side_clipper[] = { -/* columns rows colors chars-per-pixel */ -"40 32 7 1 ", -" c None", -". c black", -"X c #800000", -"o c red", -"O c #008000", -"+ c green", -"@ c #808080", -/* pixels */ -" ", -" ", -" ", -" ", -" ", -" ", -" ", -" +++++X ", -" ++++++XoXX ", -" +++++++oXoXXXX ", -" ++++++XoXoXoXXXX ", -" OOOOO@oXoXoXoXXXX ", -" OOOOOO@oXoXoXXXXXX ", -" OOOOOOO@oXoXoXXXXXX ", -" OOOOOOOO@oXoXXXXXX@ ", -" OOOOOOOOO@oXoXXXX@@ ", -" OOOOOOOOO@oXoXX@@@ ", -" OOOOOOOOOO@oXX@@@. ", -" OOOOOOOOOOO@o@@@@ ", -" OOOOOOOOOOOO@@@@@ ", -" OOOOOOOOOOOO@@@@ ", -" OOOOOOOOOOO@@@ ", -" OOOOOOOOOO@@@ ", -" OOOOOOO@@ ", -" OOOO@ ", -" OO ", -" ", -" ", -" ", -" ", -" ", -" " -}; diff --git a/resources/bitmaps/side_cut.png b/resources/bitmaps/side_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..3bec71b206179ae408f16668e9d7d87a0f96d38c GIT binary patch literal 2703 zcmV;A3UKv_P)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00?JEL_t(&-tAf4j}})M|2@z1YH-DN5mr{dq%CZLZdX!Z zyL8?1*;0tH(P)f%Vf3Pji8scJnLlCYMlVfF6Qic_!oHTVa=p9eY5@GYR3-pz1MyF$bMDb3#uAk+qZ7Nss)4qfuL4C9j}!(cFZjtc;MEl zvkGjUyl;ys4)uw6VKN*MpvbzSh8ddf*uHP|t<(Df-RpwLZ~`C&)V3f`DFIF?p@gvd z23kA&miElPr9HFbzg#;z-fB|a+S&17?d-Vr%#IJwN7X&|C|^Bpf-}A6^g^@+RspMg zOO#(&cXQ%nbsfFa*%vV+WaVJp>_j7|i=BOufJ0IV*4_NmhbF-)ptj+(30Ux8Wnz`D zG33SdH!duw>+J2$MN=fR+!L`TB>Jwu+XyO=mypf;=L=QOWuRw^(I089DLz)#){LgPiJG zmiffvSEn06o&L=7h*UyCv%F|x;(jMaq5(k`jWVaU;j6_e-K=taV0xyvZlKqfc1NNT zG9=h~b*7QT$)(*{blN&yEzh-1Y+BaKorvTTfh7T6B#J{GDYnW)CdNh~Fxc40q|P4<)>cal-!Dc+hd%h*);dtfx)(=cBxG#` zPhOdAByp^Jv2|}}0WdCgqwAxxQt<)dDkQS?Si1MNBSN^`M4%Dm5IwMgI z2@-6-@{dLmqsuyzJOK%|734)*6+V!HgzLaIA7rM)HYz2K&JZD$kCV#pc3i%_rw-JS zWuJ;zB_!ow=jGdtB#v5nDaf;pl-?*LP83RL>wnA18o}QX(Byn)Xf`|==q7pnkb$7T}3uWt(XWmy$7ebURwA8b3BF~Z|T~Luy zvf6oWWFmH2`!NplDiYlNn0F#_G22=@Z2pZe7 zA*exePTQO_49Lp=bkC&zpbpT;DvH!lsET0Eq&8~ez)FrZMwntKnUIMAHGnbpY)Kg7 z{8M5E(7Co;)|R|WYCy)|M^C+15A48dicE~q7z9nSsk|DzZ00-!G;V{5EtvFd(l!NR zdmpVf^?K}%vDvHdPzW0cCJI?FyJrl^;cbo?t7f8fK*#Z$Yd4h3r{-%lX!nO&m+$=b}o+32~iER_} zBaxZV(738^pC=bd$?oA$^?p#U4=s)Yga`&;(T<0 zDMTlC){9PDxK~Xa-_ZuCVxNgI@`X3Fat zWs1IKlKvS$F9@&okLk{n19Zi^$k{?s|CmC7;r=mAOjtb{*nG?r!HaR9JkF`rwv}w! zCimHO*~Vf3lK{4#9;8cEn%I0SbL?atJy@uPj3*?T;(yMG@uqy8h0i%BTbul~mfsU& zu-X`mJ@%?rZWf##q{tYA>3jY}rcM-6PeO8Iy%TXXpR}^%r^Wmb=jEI}#l+}VgX0^I zXysu)iIJG_5S1gjOsUausMnPTd^hd)J9d zM+X`+@w%6^YMt1weVkFe-^a?ePj#{6Dcy_t1PTL!0r2$;U!>pE z66pDD1%W#1I*(`n{gLEC!gnuziGE&5V9krF^H{Uw%LccMpt2^i%xpV!v$kt~r8&@o z3EEGhN_g(iU#9211U~mGM*}tAPu((uoN^mf7~CnxiSB*Mser+;vLF8C8}#E6fzSR- zOCNs8;|sO6TvcsU^y_A$MP4vNclIk=o=I-9{IIcU>6`jGez$y8%ulTDdyL}zF zLx-Ag}}OFHkd1;8jiI{r_N{{V!r46bfMXHozF002ov JPDHLkV1l;P18o2R literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_entities.png b/resources/bitmaps/side_entities.png new file mode 100644 index 0000000000000000000000000000000000000000..c5893d66107a8ff30009fe9c583c59b83ae75c55 GIT binary patch literal 1983 zcmV;w2SE6VP)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00oyxL_t(&-tC!BY*bYg#(!s~D@{O~Y9lcg6RK1&{B5IB z6Tnc^4Q_QogJENE<-}FtT!?dFbFL`}4_uYHveD{3cIp^NOy{oyGHFC1{Kfl-s^nvvtbpmZ> zhNM}HNnivR{^h=HL;ooNkKZ`IPp}tQZ-D&7=`;BTh9NX&aO9_D-G`bAp!4@j+YL%U z9|jVbc~b@EjTV*x1Rw*Gh6MwY53D=AZI>xQ zF^zcl#|PIQTQUGo{W`u!#(M@Uf;FuyapDOSth*^YN$3vj8q$F)tzE|!9l+Y_6WcM4 zB04HFsK!jn`8DNykH=1fz5YXM=Yr_evQPj8ilvJ2cp4DXB;$?HTG?C-%62o+p;%9+ z7tI6fXQ%cVd>~>*D4|7QyUEf;PIzBwu{{1%^Xkp9wv~q##REkZ_sYiL7ED5xjEVas z-7Ji>Ddx7u1E2^lHPC|cfv{k6VMq-)uY~)Cqq3~CxZmtz0BE(U2tp;oSJ$1s-3$c)(>LA|L0ek80?^uU07VsBszoY{ zf~i803J|v*$mKL zRpiWhDqK|y3c2uepqLn}RT7zRpJ_M%=a@vaTU8l6U(U*_pc8g!{$ggb@c<%5FnXy` zCRD<{sJTrD9abqlTy9<)x%2RT#}r~%4&=beKmDzo+Xc_0e=^oN4>agU@-BWqyeRvD zZR5JA;N&5sL}uSor45^Bla{k#8#~iw8yfBbPopD>Ac{bdU)3n^M9}VnJ4!x>@1v^Q z_mktuqV9>G|4u_P`f3f#@Luy&q&Wf+44+$PI~R3N>>LBYlQKF&LFet|!!x1`O*xRJbOWVAURgK^TUU{=;Yh4Ar5@A*^Vs<0Dxyk^cAp1#`0=U%-My72Naon z1rmQ4T>iGlw$x)sprQJDI0syi z7&n;0m_gk1bh#hnAz&rYCD>%p>u%HOMc&^O4Ltq12Ec3J-+sihThTx+2QTetf(F(O zspb0}R#KG)GNnY6jXG5ktLz;8mv&fb%}^6G&~+--fEg#Ryi}hCx=yLvh&6EKd7yPBYZ zRUfHkVwaU%M86`+E{*S%5?R@}pV5YkD9h15vCB%UK5l{r9y_5ygR2rJe}1h#4RoAP zH(mqNuP(6${=P*SV-T_bk)xW#;yhq54ot~wz#o!i@_@l6p!cs^bowQ1jt1I3jB6oT z?GuTx1XX@%een7l^=sg+|5Ly0eeFi<#(1ITF+~1BTp2ii<1IVRz3YE`{R8_kI%gkw R!&U$Q002ovPDHLkV1k00juZd@ literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_entities.xpm b/resources/bitmaps/side_entities.xpm deleted file mode 100644 index adf3bea..0000000 --- a/resources/bitmaps/side_entities.xpm +++ /dev/null @@ -1,45 +0,0 @@ -/* XPM */ -static char *side_entities[] = { -/* columns rows colors chars-per-pixel */ -"40 32 7 1 ", -" c None", -". c black", -"X c #0C0C0C", -"o c #808080", -"O c #C0C0C0", -"+ c #F3F3F3", -"@ c white", -/* pixels */ -" ", -" ", -" ", -" ", -" @ ", -" @ @ ", -" @ @O@O@ooo ", -" @@O@O@Oo.oo ", -" @@@@@OOoo.oo ", -" @@@@OOOOo..o ", -" O@@@OOOOo..o ", -" @@@@OOOOo..o ", -" @@OOO@OOOo..o ", -" @OOOOO@Oo...o ", -" @ OOOOOO@O..oo ", -" @ OOOooo@o.o ", -" @ Oooo.oOo ", -" ooo..o o ", -" Oo...o o ", -" Ooo..o ", -" OOoooo ", -" OOOo.. ", -" @@@OOO.. ", -" OOoo.. ", -" O@@Ooo.. ", -" OOoo.o ", -" @ o ", -" X X X ", -" + + + ", -" ", -" ", -" " -}; diff --git a/resources/bitmaps/side_entspec.png b/resources/bitmaps/side_entspec.png new file mode 100644 index 0000000000000000000000000000000000000000..43448ff11a06acacd8ec3ea5be020ae577d7ee09 GIT binary patch literal 3637 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 N002ovPDHLkV1kv;Q40V7 literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_patch.xpm b/resources/bitmaps/side_patch.xpm deleted file mode 100644 index 1645017..0000000 --- a/resources/bitmaps/side_patch.xpm +++ /dev/null @@ -1,157 +0,0 @@ -/* XPM */ -static char *side_patch[] = { -/* columns rows colors chars-per-pixel */ -"40 32 119 2 ", -" c None", -". c #0C0C0C", -"X c #0C0E23", -"o c #0C0E24", -"O c #0D0F27", -"+ c #0D1028", -"@ c #0F122D", -"# c #101330", -"$ c #111433", -"% c #131638", -"& c #13173A", -"* c #450000", -"= c #4F0000", -"- c #520000", -"; c #5C0000", -": c #5D0000", -"> c #670000", -", c #690000", -"< c #740000", -"1 c #7F0000", -"2 c #7F0100", -"3 c #7F0001", -"4 c #7F0101", -"5 c #171B42", -"6 c #1E235A", -"7 c #1E245B", -"8 c #232968", -"9 c #232969", -"0 c #242A6B", -"q c #242A6C", -"w c #262D72", -"e c #272D74", -"r c #2E3477", -"t c #29307B", -"y c #29317C", -"u c #800100", -"i c #800001", -"p c #800101", -"a c #820202", -"s c #8C0C0C", -"d c #8D0E0C", -"f c #8D0C0E", -"g c #8D0E0E", -"h c #981919", -"j c #991919", -"k c #981A19", -"l c #991A19", -"z c #98191A", -"x c #99191A", -"c c #981A1A", -"v c #991A1A", -"b c #9F2420", -"n c #9F2421", -"m c #A12420", -"M c #A12421", -"N c #A42424", -"B c #AC302D", -"V c #AD312E", -"C c #B03131", -"Z c #B13131", -"A c #B33331", -"S c #B33133", -"D c #B13333", -"F c #B33333", -"G c #B73C38", -"H c #B93D3A", -"J c #C44846", -"K c #D05452", -"L c #DC5F5C", -"P c #DD5F5C", -"I c #DC5F5D", -"U c #DC615C", -"Y c #DD615C", -"T c #DE625E", -"R c #E76B69", -"E c #EA6D6A", -"W c #F47876", -"Q c #F47976", -"! c #F47877", -"~ c #F67876", -"^ c #2C3485", -"/ c #2D3586", -"( c #2E3689", -") c #2E368B", -"_ c #323983", -"` c #30388F", -"' c #313A93", -"] c #323A95", -"[ c #323B96", -"{ c #383F91", -"} c #333D9A", -"| c #343D9C", -" . c #3E4492", -".. c #4C52A5", -"X. c #565CB1", -"o. c #6B70B7", -"O. c #7B7FBA", -"+. c #4550C1", -"@. c #4651C1", -"#. c #4E58C4", -"$. c #4F59C4", -"%. c #535DC6", -"&. c #606ACA", -"*. c #7980CB", -"=. c #7F86D4", -"-. c #FF8482", -";. c #FF8582", -":. c #FF8584", -">. c #878DD0", -",. c #8189D5", -"<. c #838BD6", -"1. c #868DD7", -"2. c #8990D8", -"3. c #8A91D8", -"4. c #8B92D8", -"5. c #9198DA", -"6. c #9399DB", -"7. c #989EDD", -"8. c #F3F3F3", -/* pixels */ -" ", -" ", -" D * ", -" D :.N W B - m * ", -" D -.N W k E g T a K < J , H ; B = b * ", -" r D -.N W j E g T a K < J , H ; C = m * ", -" .O D :.N W j E g T a K < J , H : B = b * ", -" O & _ S -.N W j E f T a K < J , H ; C = m * ", -" ..X 7 q Z -.N W k E g T 1 K < J , H : B = m * ", -" @ + e y { Z -.N ! k E f T 1 K < J , H : B = b * ", -" X.X 6 9 ' } D -.N ~ k E f T a K < J , H ; B = b * ", -" $ O ^ w ) $.*. Z -.N W x E g T 1 K < J , H : B = b * ", -" o.O & 9 ] | %.2. D -.N W k E g T 1 K < J , H ; B = b * ", -" 5 X ^ w ` +.=.=.1. D -.N W k E g T 1 K < J , H ; B = m * ", -" O.O & 9 t ) #.=.2.6. C -.N W k E g L 1 K < J , H ; B = m * ", -" # X 6 9 ` X.&.5.2.7. C -.N W k E g L a K < J , H ; C = b * ", -" + + e y ^ $.,.2.6.7. D -.N W k E g L a K < J , H ; B = b * ", -" q ] | &.6.2. C -.N W x E f L 1 K < J , H ; B = b * ", -" C -.N W k E s P a K < J , H ; B = m * ", -" C -.N W k E s P 1 K < J , G ; B = b * ", -" C -.N W k E s L 1 K < J , G ; B = m * ", -" C -.N W k E s T 1 K < J , G ; B = m * ", -" D -.N W h R s L 1 K < J , G ; B = m * ", -" C -.N W h R s U 1 K < J , G : B = b * ", -" -.N W k R s L 1 K < J > G : B = m ", -" k R s L a K < J > G : ", -" ", -" . . . ", -" 8. 8. 8. ", -" ", -" ", -" " -}; diff --git a/resources/bitmaps/side_patchspec.png b/resources/bitmaps/side_patchspec.png new file mode 100644 index 0000000000000000000000000000000000000000..a4043507be28e8adac232acfc96e1e4afdeec60b GIT binary patch literal 2994 zcmV;j3r+NiP)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{011joL_t(&-tC%gj26`u$A9O}Jo`NR!m=!|yzGl?Sp){wXG)o(og-+5RGX~G#YKIhHX^@6p9w5TAI{W ztM~#cF9s0-*JpR1xu+lQotZnkV0l{;6K^s+Gk4CNIWPb7Kj+Q@AM+uHo2;z;)l^hJ z3(Q66LFodSjA*OE7*Way5s&}_CGG=0xNvRlTqBxw%{3Zdvrqi70C>J$F9neZY3$XLj}9)@LeC z*?jMYWZ(Ytb(nQJ{8t1N1RY`15!WCZjc<8$_u0#q9Ix{6CFd^!9s=t9)K=g#aVk(h zwR7H3&5*ozsGtBS5`;oEym$B@<@el~8QU!7sU7DXukxi!7A|aBc+Tq9D=#f42M%&z z%|;HceR391$qcA#9#^TGGnS#Z_c6Hr4ea2c*TOiZQb_oJ4WI(zEmFnJ0Y*SoD7Chr zHlbn8Ow>r@u_|7-^n&@ogUyQl5F^x!EqPp!h z45ch5j$Zi-7XhoAFPvYVxa`YFY)}NFifL)Jt(W!QxVvv1fdM8@77S5bmS|iVTE>Au zb=zxHdb$fZslGC74kuS0*P3Ca52yT5VM zTR>m{QT7s}5ynPdDFqdbdPR_24&x)|lLNsJ<#K3I<|syG=|%Gu{?dHTyz=DbS0Pae ztbzzw5VbF=DJ{>Edt?N}ML><$$)&ImVKmO!ML{&mz3U@jtijkg%W$I+26J@EFIhAX z<&oyI&a9vEwdI&nol{yst$^Cs#FQ3poiOd45e7sWdp*>7o7g9=Gr*`J(g^jekkrYzb@HLg*DqOo2C!z#nP)Ujz4q&vx(cXgKn1mSJ0_n0j|pA73-p?C zzM7mxG|H|$)nJI-oM#wkw1bBPg&2tGm>c7Cbv~>WHcyL?FPa_jaMSTJhc{1B3)}>LDX)5Nk51xyT(^{f6G&nJDX< z=FAz_dEIx2D-DI3gSC6aMDw3%oBaA=3tSR1o#au5sQ-s1)Ty5RHgz^ zrHMT#QGDU1DJ}o`zdcgXfPhFf^2Iad^T^Sos58h@WaO3AR8Diqh(d(%6zrbeeDN3C zRoPhI(b+ZqhLx0>$2k)4&a#Pp-$?0#jZ?;KJ*p``~Ahhrhp$Q3CxqZbn- zu?dVeYJ64janRT&wjv^)k|S*O14QMCa@(X?Gj9Abm6nN_gFNRBs6@T%+sj*ysm&&+ zzY??vks4IIYML`n*gT7xtZ1bWkyK6;tS5(o8awX1jmm^cr_EaNbIRiy1Ux`oQb zse$qeN=*%yujw>T9M?vtSTs^Bx&z7SQLVUsB(=!*Cz?`d)+q{_cwi(oc0T+N@9%h( z*(-0MJfYn^H}gC-j9js%QyxC*oqvP}lBaYc;mtcL#@F z-^Q$)Zl&DTfwg4p3CKy9$b z8-Ms6?`(OJSu1X(($<;D`L$MI`T7}h|A~H;$RiMxa8;bQ#2Mlsyc3v|FDayAVpDFj8jL#|~BH(%uuW-Qc)-v3S4px?oy%M$T z+3*Pa|M@hhe(x44?bF@;qHnI-Fk9|8S>J^UIgowQN%HG7N7d$YS%(oAg(|z&{E_`z zpQh)AUr>L_%q)so+A240oGZ7T%nw_+0fEPD0FAUQw+STP+rH<+CSFdJJ!}8Ou1D@? z`t`r0VcKlRHo>@k)aC}M40Kv5=(fQgi2NL^5^?&JVuw0z3QeB5G`=_3XtYHOqU?KS%$YuahKD z-Lty@$x$;P#d!L%#JVI+*(bc0dOjIS*x7d%QYzDR^-9!~c=x#{G37?elcr%47&>qu zBY@EuhlNne`x<=s)Bsj#vK)N*UqlVf^!(sAl*Ud#B15TlGL^1VGg+%Hio!=}K$6#i ze3KE>3I$v3r@H4Y+OJ%RM6t_>Bv=bb%2Iap@}R&%DZ^x(9~fXQ*ji4D?{9yZma`V4 z5@*FOW3WKZ+R?**F$cVdHSuuKoF>!XjQ58u^sZ#=PYtRc3v=T}HKVJw%a>K*uj%Fo(Ag#Enhc9Yj zqK=RomdF_aXjaJ|7+nJrR@sETq2ifB!<7uGu?>$PS28*GyVoYH8dU>cx=hwt%gt)p z8+v)fkt$Uic5R2zZjvSNUYl_9OP9&IQOyB>ZI{ccQ|{F_YXkgnu*&Ddd$j>D)d26} z=A>HK=QA__W*}R(X>fpF@3`W`_Ps}K0KoPur4Q(v@_YTJz}4Uk85#hp#g=<;Fqrc+ zQyTV!Z07*qoM6N<$f)4Aa`Tzg` literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_resize.xpm b/resources/bitmaps/side_resize.xpm deleted file mode 100644 index 354f6f5..0000000 --- a/resources/bitmaps/side_resize.xpm +++ /dev/null @@ -1,43 +0,0 @@ -/* XPM */ -static char *side_resize[] = { -/* columns rows colors chars-per-pixel */ -"40 32 5 1 ", -" c None", -". c black", -"X c #3E3E3E", -"o c gray43", -"O c #F8F8F8", -/* pixels */ -" ", -" ", -" ... ... ... ", -" . ", -" . . ", -" . . ", -" . ", -" . ", -" . . ", -" . . ", -" . ", -" . OOOOOOO ", -" . . OOOOOOOOOOOOOOOo ", -" . . XOOOOOOOOOOOOOOOOoo ", -" . XXXXXXOOOOOOOOOoooo ", -" ... ... ... XXXXXXXXXXOOOOooooo ", -" XXXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXoooo ", -" XXXXXXXXXXooo ", -" XXXXXXXoo ", -" XXXXo ", -" X ", -" ", -" " -}; diff --git a/resources/bitmaps/side_rotate.png b/resources/bitmaps/side_rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..c9cd0d83e0439903b9aa13fbe0918a8f94946cba GIT binary patch literal 1858 zcmV-I2fg@-P)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00kOJL_t(&-tC!9Xcbo!$A9PE2UQ8NUuulhE-YFNrb115 zYNbsi8wmunC@BGI`iH2cSjahrUyuP zAiMq+>LLzJuoq(zc(>v_;LT+(XC7}JZ>g`m`5}kHSt=YSwg2Tizjsy~0WptQ3Neo} zhcnmpdo%z?n?uxUok{PIA+-^tR!psI*K(=7|INE6{xzJHBq zMG(+j=4}#Z+65xEfC*Jl1r5NI#g*cLKv|r`rU4U01TWid0R-iRwQCo28Fnr0b*>cpe?km zpo1}3EMlc!116*WPoUJLhpe&O;L}6ar~!2eeNI|He-VMf2Dzt7Pwc9QNJrTtP(X)i zcJHG~&)_R^uVgNy0jD&`DjijJZM^`1X`4||ugXyk7}MODP^$q4*PpZIhYf!H zIcr8as7h_(TpH7WqciRcU2m348qghUA<{#GD&2Kwt>s~XuRCiks&s2WLwxE6;TGz? z-Yl0&cKD{6aP9YYSd9Gz!=na=f7&j`|4;C1zq3vWo4B=!v>AaT!`tP7&E3>AImjV1 z7MQR%u@`HBkJt3ts{+Svw#eXIfWO#lX^cIlv}^PZiN2j-d}P9*seV6gUuboYEd<_! z0#D>VXnhWxywxh_X9Ik7k2L}vxt>pv9RUvAYL$QHL?E^o&R8dK0AqRb%MkI$QsD;B z2Ml5i1Ghz@O3GM_uu@>1L7Fhns>`l)KAr-;I zc6cw6EXeckr?E4@(cj)IE!a5|h;8{7wi9DF!X_+#rg%cjFTx8xSm($^Hv_GP)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00U7;L_t(&-tAdUYt=v$J@-yjC@x$GF8o9g5k&<-Tqza& zT_(Sxf5j?Vih|DHA_9_KU!CdMGsj|ldz?VPy8rjJbpe2)X06)11Q4_ zCgb0Mm*)6=>*CshDOYO8m$ubC_9WW6xK=4$sZ=NnC>@jv2M48tFqB~qg-}P&rO8-b z?1~=hHhz8SOy%gxxL7!-DI9h29S+I@j>YJ?n$1~ezzXOhqDI-v%cm+wEfoqi7uj&o zIB@_Gm>LbBway5D1n3VhvKLphqL-2;!KVr61vG@x*L60|e>yfo*}N**&d|+kQa$@h z04Sv|MdbJckG4pcI}GHuSJ$O7kJ5Z#mL6!H&BAAlneUE`3_Sfp4rb=~M}17bySqaJ z2$T?%&8}0DUpNj5fPukf4YYQ~e3-l`<8$4o)7KU|?EPYVQ@*(=6+KF8`DxllGvIp| zXezhw$g%cp^cmBzMjOJx=`VSfCHm+D8` z4CFXQJN}YgetTCcvKDqG5qB71Mh47+CQ^HMzh=S?!9bq|((^S-2o1Eoe<0PPkK^9m z(18CQs-yqX;y3cQP z(5hf7hu+EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00Ul0L_t(&-tCvqYZE~f$Gh!+u5&_krfY7r^bYEf%zYfBIjl-kUD9%goT^5fFo z1UHZe%kIu5{kE^!a9*noVbU;@Yh-<7;h~yOrHE-%c{OS-nxp|U{K;lE6o=*mmt^%eyQ9s!TrsDMj)%1lg zy9)HFH#>*Or2zl~!k((D6K*$zyS57xrCxD2GlPs8NQG*e*O)4&Dh|Bjy_o?BWl>|N z1u~eS2DZrtU2Je8I~8zx=h*)XGks!`2~)L0%*4Gi-Z#w`vn3(>mJ2Tj#H3rlLxfdg zuL@K(*or4!G*3#+aG}ENpiLeCW(UPKRd6$s7kN^%{n15Dlv27mU{H8H6esUZ=^_)h zxYkl*I~_mztT|FjQ-R63e0}l&Fqan_WN?paXF&DF?t0Ht-klaewCbWB+Zw1>mx~EdeNexs)#P)Z6Ku#NR)dg1|liSJ$qH=jcQyI?=TF2mCwG U_TkVgY5)KL07*qoM6N<$f?t4j5C8xG literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_surface.xpm b/resources/bitmaps/side_surface.xpm deleted file mode 100644 index c5849fa..0000000 --- a/resources/bitmaps/side_surface.xpm +++ /dev/null @@ -1,48 +0,0 @@ -/* XPM */ -static char *side_surface[] = { -/* columns rows colors chars-per-pixel */ -"40 32 10 1 ", -" c None", -". c #0C0C0C", -"X c #800000", -"o c red", -"O c #FF0100", -"+ c #FF0001", -"@ c #008000", -"# c yellow", -"$ c #C3C3C3", -"% c #F3F3F3", -/* pixels */ -" ", -" ", -" $$$$ ", -" $oooo$$$ ", -" $o$$$$ooo$ ", -" $o$ $$o$ ", -" $oo$ $o$ ", -" $oo$ $o$ ", -" $oo$ $o$ ", -" $oo$$$$ $ ", -" $oooooo$$ ", -" $ooooooo$ ####### ", -" $$$ooooo$ ###############@ ", -" $$$ooo$ X################@@ ", -" $ $oo$ XXXXXX#########@@@@ ", -" $o$ $oo$ XXXXXXXXXX####@@@@@ ", -" $o$ $oo$ XXXXXXXXXXXXX@@@@@ ", -" $oo$ $oo$ XXXXXXXXXXXXX@@@@@ ", -" $oo$$ $$o$ XXXXXXXXXXXXX@@@@@ ", -" $o$oo$$$oo$ XXXXXXXXXXXX@@@@@ ", -" $ $$ooo$$ XXXXXXXXXXXX@@@@@ ", -" $$$ XXXXXXXXXXXX@@@@@ ", -" XXXXXXXXXXXX@@@@@ ", -" XXXXXXXXXXXX@@@@@ ", -" XXXXXXXXXXXX@@@@@ ", -" XXXXXXXXXXX@@@@ ", -" XXXXXXXXXX@@@ ", -" . . . XXXXXXX@@ ", -" % % % XXXX@ ", -" X ", -" ", -" " -}; diff --git a/resources/bitmaps/side_surfspec.png b/resources/bitmaps/side_surfspec.png new file mode 100644 index 0000000000000000000000000000000000000000..e56594706a115c21d27bc85c48f779d02f77ba46 GIT binary patch literal 2319 zcmV+q3GnubP)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00!qtL_t(&-tAcXZxmG&{?47UbLTw1^PTSuFtYyJMURrPV&%d`0DlYMDuC^>{`ApD#(~I+ zmzDw83m{?ts|mpTN5X;VirU(e+64#3uUi>2ySmYJ=oq>WpUeO#jXcbT7cF112*94? z%ZtaCu3aT4A`nT8!nozj&~xO>!R!x5GRDJe{L*Cr9Y`*HFOzwj2XLPLKka*R;qxfp@HWVZ0+InDKmx?_0*mN|&@@`MTd7=jkX;f_91QCk^ zV32)d0e zx1~E98tVoPcfQbvTqSenpz?z)h$M<#tC#`V(*vWVWcqIt%bNqcbG`#Bw(YQCLm(zN zA85aQe=GaKe3DPiL)GT@5sij7Uk+tq5iUXZz5xdk^}qwT2gS&;0T$TL)=XNZxJ4j8QXZSrp-HU;>Dh z3MTYiJP%?9lXVZn+QWTW{C)ZaD%Wj9B$)&&5s}#}+P>e7do5Q005`wcMWHf4EUXB# z25jjWNCXHr6#wjf(sPs;Fj#;A2-`0Kf| zN2a;irB5ov0b;|ha0d>gc5*i^1{+|TtJ%#1IY#>*R4vd2>DDW6Qt{ zZ})(S)`R$36DnU{i+EXuV!V~% z)}#B-eg03&b+wv-Asb7e11voj3BKP-4NLO#Df{aM1n>Z(XvyQRSe_hu%EG0Tl{fzQg-asrh1yXwK#LVcu)r$V^ zE-)9~M*(IoG-_o(nwmcEfR$zOV%G$~Q(n(6dzRRswz7GgF z>2{*R@GAuALLv7-nHwz__v~UMrp~l7L<&4u%alqQG{giK#sL)?taMse>e%Gt)PQG* ziCE?1D6X1mv5ji5KD{XE4GP3?vyhiYof>elt3{3pIq;CZStO^=bsckAjI}b-?gJM* zM&w~3(=r@hKMEuUl}2TM7RA+1LYj<$?mIBEy&z$rXnYDmqo`W1(vFbcgsD&m)Cf9H zV^)lJUvGGfWW+~<*}%Q)Es&XeUcrt@dCgU=A2p-WK1XWe7m8XBTLTW(Rot?MU(=>X z2m{90iO5`Q20Og#XnU!R5{_YdLEB2)ZIpIx9Aq(+4k6X}o1d@VS-6;!T68Fw zC4Bo3tbKAMH|I(cRm>%()}-6M7@qNi_JQHN2i3(~&;T-=vz$hjsH#cd+BJOR^FxRS z8HSW=POXqSj3}9KV8}{6v3}ilAW>D5ZvQHr@p&B>=*>^SF5U?+di~=jDT9x*vb{s= pnP^2#y5sBc#*eI#HM0H(>tE&UcmLaiEQ0_5002ovPDHLkV1foCEw2Co literal 0 HcmV?d00001 diff --git a/resources/bitmaps/side_tex.png b/resources/bitmaps/side_tex.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9d3b87506df11fdada139e65b0b2b424ce3d36 GIT binary patch literal 1977 zcmV;q2S)gbP)EX>4Tx04R}tkv&MmKpe$iQ>7|ZhjtKA$WWauh>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfa&%I3krMxx6k5c1aNLh~_a1le0HI!Dn$f_we!cF3PjK&;2=i)vUz;pGZ8*46{PKK|H-# zF*xrNhgm^ZiO-40Ou8WPBi9v|-#F(T7IZL1yduQB95q&z6mk{8 z$gzMjG{}x0{11M2Yvm><+@xR(=zOv5j}aiS3p8rB{e5iPjT6BC3|#3gf4L6Ke3D*k zX^|tKe;c^CZfVLMaJd5vJQ=bnJCdKKkjnw@XY@@OAao1#thv24_i_3Fq^PUJ4RCM> zjOHnO-Q(R|?Y;ebrrF;QIl^*~a0=qU00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00ogrL_t(&-tAetjvPf4J*RqB0wIAVBqAKLDZ)eq*dZe4 zJNOvBgN%Tfmo_nEBw&*eA{l|S2)r|O2)erJ*6mx}v+Do?cQDh>TlabHsVd;*@!uX? zPA)$EMD?!x({hjN^V842zK{abJNL(9cpc1f^V#PFfI}6OFYx-u4n2V%+HtYIyVqo~>J=G))O&K3gGI1S zm-39(lUs*-Cn*|_u?}WjMiD4U)LAVP{T0fX+M;X(7=X0LM0MkZhT4c45F!xQKvF`| zWD1z2a9NaIfNuUL1eM4PBM=sJyPiq}dYqfbLY2+tOqCKIMIeb)m;fYjftuNB35hI< z1Id^Z_eUQ$Z{Spv^sz|>%stF%5CO2}q#St7(P;UfoT9$?gB%K5>f{`T1=-lf^sY$7 zybwl-1c^u}4Mg$I(zbsBk0npPxpM93#E)Ol$9QF7mB92icCA7R(hLD`ZbskxcEVW2xhb1y}AkbjhOOjC1q8G7UmH zZ+2029*-ih+W^`5_0W+{ZKNK?u$Eo3vkqb4oCU~~cgpJwR(r5hMP(P!5gxlnr#vo| zt$Q*PmtmkI3Kd3Rd7upq2F1J>K#t4CHooeZyhHaisOw<_6t5oC$voqghQ)v!6Q-uT z^`1)V#h=u96y2n790B!j%78+hz^F}EEwCs^0}CcrDLdcpzO&A8hG`=wy9i`C?iC1Q z5X#7t-N%;=?J$TfOVVgD_64~RAA0Mv`c;)R&H=qQE1 z?)G}0pE-uF!Bb$s=?EPExz+ko^-MnAEro{T?Ktpsj8f c #634B44", -", c #694F42", -"< c #6A5248", -"1 c #725647", -"2 c #72574B", -"3 c #775D50", -"4 c #7C6251", -"5 c #FF0000", -"6 c #9E5113", -"7 c #AC4F0C", -"8 c #A5540F", -"9 c #B2530F", -"0 c #A05116", -"q c #AD5514", -"w c #AC5B1D", -"e c #B45514", -"r c #B35A15", -"t c #B95914", -"y c #B45C1B", -"u c #BB5E1B", -"i c #B36317", -"p c #B6641F", -"a c #BB631C", -"s c #BB6B1C", -"d c #AD5F22", -"f c #B55F20", -"g c #B85D22", -"h c #B46425", -"j c #BB6621", -"k c #BB6A22", -"l c #B76729", -"z c #B46C2B", -"x c #BC6E2B", -"c c #BF702B", -"v c #BC6932", -"b c #BE7130", -"n c #C16A1E", -"m c #C26724", -"M c #C26C25", -"N c #C36C29", -"B c #C96D28", -"V c #C77326", -"C c #C4732B", -"Z c #C9732C", -"A c #CA792E", -"S c #C37432", -"D c #CB7431", -"F c #C77C33", -"G c #C97A33", -"H c #C27738", -"J c #CC7D3B", -"K c #D27737", -"L c #D17A3E", -"P c #856856", -"I c #8E7362", -"U c #927565", -"Y c #CC7E42", -"T c #CE823B", -"R c #D1853E", -"E c #A28975", -"W c #A3877B", -"Q c #AE917F", -"! c #CE8342", -"~ c #D78941", -"^ c #D18E4D", -"/ c #DD9555", -"( c #637BB5", -") c #6681B5", -"_ c #6A82B7", -"` c #6781B9", -"' c #6C85BB", -"] c #6F88BD", -"[ c #728CBD", -"{ c #728CC1", -"} c #788EC0", -"| c #7791C4", -" . c #7B94C3", -".. c #7F9AC5", -"X. c #7C95C9", -"o. c #7F9AC8", -"O. c #B29681", -"+. c #B29583", -"@. c #B59888", -"#. c #B99C8A", -"$. c #BAA393", -"%. c #C8AD98", -"&. c #839ECE", -"*. c #84A0C9", -"=. c #88A4C8", -"-. c #87A2D1", -";. c #8FA9D6", -":. c #9CB5DD", -">. c #C3C3C3", -",. c #F3F3F3", -/* pixels */ -" ", -" ", -" ", -" >.>.>.>.>.>.>.>.>.>.>.>.>.>. ", -" >.5 5 5 5 5 5 5 5 5 5 5 5 5 5 >. ", -" >.5 >.>.>.>.>.5 5 >.>.>.>.>.5 >. ", -" >.5 >. >.5 5 >. >.5 >. ", -" >.5 >. >.5 5 >. >.5 >. ", -" >.5 >. >.5 5 >. >.5 >. ", -" >. >.5 5 >. >. ", -" >.5 5 >. ", -" >.5 5 >. O +.1 W - + $ ", -" >.5 5 >. E : O.#.@.U < * > X & X 3 4 * ' ", -" >.5 5 >. k o $.I %.Q I U - > $ * # % o ; I ' [ ", -" >.5 5 >. C F x x k v P 1 2 - < > % X @ ' _ ) ' ", -" >.5 5 >. C F F k h S 6 x J q & & * X { ] ] | [ ", -" >.5 5 >. h G F j r S w w Y e u p N { } X.| . ", -" >.5 5 >. 8 T C D a S c d S q N N j [ [ X.&.&. ", -" >.>.>.5 5 >.>.>. p R S Z N G c b z q j j k { { ' ' ' ", -" >.5 5 5 5 5 5 5 5 >. R R j B J z / ! S N M x | [ ( ( ( ", -" >.>.>.>.>.>.>.>. G C C a x z ^ / g N D G &.;.&.[ ' ", -" ! x j d l h J L w n m V _ [ .:.' ", -" R m m N Y d x S g t s C ( ( X. .( ", -" F N 7 C v 6 Y D e u B M ( ( ` ( ( ", -" F M 9 m h f K B r u B V ( ( ( ( ( ", -" n a r u e r a s B k C ' ( ( _ ", -" a i s n 9 n s A A s | ' [ ", -" . . . n s s s s A V ..-. ", -" ,. ,. ,. V s G C =. ", -" C ", -" ", -" " -}; diff --git a/resources/bitmaps/side_transform.xpm b/resources/bitmaps/side_transform.xpm deleted file mode 100644 index b7e6f85..0000000 --- a/resources/bitmaps/side_transform.xpm +++ /dev/null @@ -1,44 +0,0 @@ -/* XPM */ -static char *side_transform[] = { -/* columns rows colors chars-per-pixel */ -"40 32 6 1 ", -" c None", -". c black", -"X c #3E3E3E", -"o c gray43", -"O c blue", -"+ c #F8F8F8", -/* pixels */ -" ", -" ", -" ", -" ....... ", -" . . ", -" . . ", -" . . O ", -" . . OO ", -" . . OOO ", -" . .OOOOOOO ", -" . . OOO ", -" . . OO +++++++ ", -" . . O +++++++++++++++o ", -" . . X++++++++++++++++oo ", -" . . XXXXXX+++++++++oooo ", -" . . XXXXXXXXXX++++ooooo ", -" ....... XXXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXXooooo ", -" XXXXXXXXXXXoooo ", -" XXXXXXXXXXooo ", -" XXXXXXXoo ", -" XXXXo ", -" X ", -" ", -" " -}; diff --git a/resources/bitmaps/ws_icons.xcf b/resources/bitmaps/ws_icons.xcf new file mode 100644 index 0000000000000000000000000000000000000000..1cf81cdc2f7b2c6491821a2bc325e4a5b26a8744 GIT binary patch literal 89400 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

N5RBv&2xjE*7-kCWB?x{Aff@B4 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

tbY=Ogu~S5 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 QZ#{e}YQ$$s5l!L$1BafD+W-In literal 0 HcmV?d00001 diff --git a/tools/vmap/light.c b/tools/vmap/light.c index fd1caa7..205fa28 100644 --- a/tools/vmap/light.c +++ b/tools/vmap/light.c @@ -1273,6 +1273,7 @@ int LightContributionToSample( trace_t *trace ){ to the surface normal the bigger is the amount of radiosity received. So, for preserving the directional lights contributions, we scale down the radiosity contribution. It's a hack, but there's a reason behind it */ +#if 1 if ( bouncing ) { addDeluxe *= addDeluxeBounceScale; /* better NOT increase it beyond the original value @@ -1280,7 +1281,8 @@ int LightContributionToSample( trace_t *trace ){ addDeluxe = 0.00390625f; */ } - +#endif + if ( doAddDeluxe ) { VectorScale( trace->direction, addDeluxe, trace->directionContribution ); } @@ -3013,6 +3015,8 @@ int LightMain( int argc, char **argv ){ } } } + + lightAngleHL = qfalse; /* fix up lightmap search power */ if ( lightmapMergeSize ) {