Merge branch 'tools_rewrite' into 'ground_effects_editor'

Tools regression fixes

See merge request T1ti/noggit-red!9
This commit is contained in:
T1ti
2024-09-12 21:28:04 +00:00
6 changed files with 190 additions and 176 deletions

View File

@@ -42,4 +42,4 @@ namespace Noggit
private: private:
Ui::flatten_blur_tool* _flattenTool = nullptr; Ui::flatten_blur_tool* _flattenTool = nullptr;
}; };
} }

View File

@@ -47,6 +47,7 @@ namespace Noggit
void ImpassTool::onTick(float deltaTime, TickParameters const& params) void ImpassTool::onTick(float deltaTime, TickParameters const& params)
{ {
mapView()->doSelection(true);
if (!mapView()->getWorld()->has_selection() || params.underMap || !params.left_mouse) if (!mapView()->getWorld()->has_selection() || params.underMap || !params.left_mouse)
{ {
return; return;

View File

@@ -477,11 +477,11 @@ namespace Noggit
void ObjectTool::onDeselected() void ObjectTool::onDeselected()
{ {
_objectEditor->modelImport->hide(); QSignalBlocker blocker{ _object_palette_dock };
_objectEditor->rotationEditor->hide(); _objectEditor->modelImport->hide();
_object_palette->hide(); _objectEditor->rotationEditor->hide();
_object_palette_dock->hide(); _object_palette_dock->hide();
_moveObject = false; _moveObject = false;
} }
void ObjectTool::onTick(float deltaTime, TickParameters const& params) void ObjectTool::onTick(float deltaTime, TickParameters const& params)

View File

@@ -75,7 +75,7 @@ namespace Noggit
}); });
addHotkey("toggleTexturePalette"_hash, Hotkey{ addHotkey("toggleTexturePalette"_hash, Hotkey{
.onPress = [=] { _show_texture_palette_small_window.toggle(); }, .onPress = [=] { _show_texture_palette_window.toggle(); },
.condition = [=] { return mapView->get_editing_mode() == editing_mode::paint && !NOGGIT_CUR_ACTION; }, .condition = [=] { return mapView->get_editing_mode() == editing_mode::paint && !NOGGIT_CUR_ACTION; },
}); });
@@ -83,14 +83,16 @@ namespace Noggit
, &MapView::selectionUpdated , &MapView::selectionUpdated
, [=](std::vector<selection_type>& selection) , [=](std::vector<selection_type>& selection)
{ {
if (_texturePickerNeedUpdate) if (mapView->isUiHidden() || _texturingTool->isHidden() || !_texturePickerNeedUpdate)
{ {
_texturePickerDock->setVisible(true); return;
_texturePicker->setMainTexture(_texturingTool->_current_texture); }
_texturePicker->getTextures(*selection.begin());
_texturePickerNeedUpdate = false; _texturePickerDock->setVisible(true);
} _texturePicker->setMainTexture(_texturingTool->_current_texture);
_texturePicker->getTextures(*selection.begin());
_texturePickerNeedUpdate = false;
} }
); );
} }
@@ -122,7 +124,7 @@ namespace Noggit
{ {
auto mv = mapView(); auto mv = mapView();
/* Tool */ /* Tool */
_texturingTool = new Ui::texturing_tool(&mv->getCamera()->position, mv, &_show_texture_palette_small_window, mv); _texturingTool = new Ui::texturing_tool(&mv->getCamera()->position, mv, &_show_texture_palette_window, mv);
toolPanel->registerTool(this, _texturingTool); toolPanel->registerTool(this, _texturingTool);
// Connects // Connects
@@ -151,196 +153,195 @@ namespace Noggit
QObject::connect(_texturingTool->_current_texture, &Noggit::Ui::current_texture::clicked QObject::connect(_texturingTool->_current_texture, &Noggit::Ui::current_texture::clicked
, [=] , [=]
{ {
_textureBrowserDock->setVisible(!_textureBrowserDock->isVisible()); _show_texture_browser_window.set(!_show_texture_browser_window.get());
} }
); );
QObject::connect(_texturingTool, &Ui::texturing_tool::texturePaletteToggled, QObject::connect(_texturingTool, &Ui::texturing_tool::texturePaletteToggled,
[=]() [=]()
{ {
_show_texture_palette_small_window.set(!_show_texture_palette_small_window.get()); _show_texture_palette_window.set(!_show_texture_palette_window.get());
}); });
/* Additional tools */ setupTextureBrowser(mv);
setupTexturePalette(mv);
setupTexturePicker(mv);
}
/* Texture Browser */ void TexturingTool::setupTextureBrowser(MapView* mv)
{
// Dock
_textureBrowserDock = new QDockWidget("Texture Browser", mv);
_textureBrowserDock->setFeatures(QDockWidget::DockWidgetMovable
| QDockWidget::DockWidgetFloatable
| QDockWidget::DockWidgetClosable);
_textureBrowserDock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea);
mv->mainWindow()->addDockWidget(Qt::BottomDockWidgetArea, _textureBrowserDock);
_textureBrowserDock->hide();
// Dock QObject::connect(_textureBrowserDock, &QDockWidget::visibilityChanged,
_textureBrowserDock = new QDockWidget("Texture Browser", mv); [=](bool visible)
_textureBrowserDock->setFeatures(QDockWidget::DockWidgetMovable {
| QDockWidget::DockWidgetFloatable if (mv->isUiHidden())
| QDockWidget::DockWidgetClosable); return;
_textureBrowserDock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea);
mv->mainWindow()->addDockWidget(Qt::BottomDockWidgetArea, _textureBrowserDock);
_textureBrowserDock->hide();
QObject::connect(_textureBrowserDock, &QDockWidget::visibilityChanged, mv->settings()->setValue("map_view/texture_browser", visible);
[=](bool visible) mv->settings()->sync();
{ });
if (mv->isUiHidden())
return;
mv->settings()->setValue("map_view/texture_browser", visible); QObject::connect(mv, &QObject::destroyed, _textureBrowserDock, &QObject::deleteLater);
mv->settings()->sync(); // End Dock
});
QObject::connect(mv, &QObject::destroyed, _textureBrowserDock, &QObject::deleteLater); _textureBrowser = new Noggit::Ui::tileset_chooser(mv);
// End Dock _textureBrowserDock->setWidget(_textureBrowser);
QObject::connect(mv, &QObject::destroyed, _textureBrowser, &QObject::deleteLater);
_texturePalette = new Noggit::Ui::tileset_chooser(mv); QObject::connect(_textureBrowser, &Noggit::Ui::tileset_chooser::selected
_textureBrowserDock->setWidget(_texturePalette); , [=](std::string const& filename)
QObject::connect(mv, &QObject::destroyed, _texturePalette, &QObject::deleteLater); {
mv->makeCurrent();
OpenGL::context::scoped_setter const _(::gl, mv->context());
QObject::connect(_texturePalette, &Noggit::Ui::tileset_chooser::selected Noggit::Ui::selected_texture::set({ filename, mv->getRenderContext() });
, [=](std::string const& filename) _texturingTool->_current_texture->set_texture(filename);
{ _texturePicker->setMainTexture(_texturingTool->_current_texture);
mv->makeCurrent(); _texturePicker->updateSelection();
OpenGL::context::scoped_setter const _(::gl, mv->context()); }
);
Noggit::Ui::selected_texture::set({ filename, mv->getRenderContext() }); QObject::connect(&_show_texture_browser_window, &Noggit::BoolToggleProperty::changed
_texturingTool->_current_texture->set_texture(filename); , [this, mv]
_texturePicker->setMainTexture(_texturingTool->_current_texture); {
_texturePicker->updateSelection(); if (!(mv->get_editing_mode() == editing_mode::paint || mv->get_editing_mode() == editing_mode::stamp)
} || mv->isUiHidden())
); {
QSignalBlocker const _(_show_texture_browser_window);
_show_texture_browser_window.set(false);
return;
}
QObject::connect(_texturePalette, &Noggit::Ui::widget::visibilityChanged QSignalBlocker const _(_textureBrowser);
, &_show_texture_palette_window, &Noggit::BoolToggleProperty::set _textureBrowserDock->setVisible(_show_texture_browser_window.get());
); }
);
}
QObject::connect(&_show_texture_palette_window, &Noggit::BoolToggleProperty::changed void TexturingTool::setupTexturePalette(MapView* mv)
, [this, mv] {
{ _texturePalette = new Noggit::Ui::texture_palette_small(mv->project(), mv->getWorld()->getMapID(), mv);
if ((mv->get_editing_mode() == editing_mode::paint || mv->get_editing_mode() == editing_mode::stamp)
&& !mv->isUiHidden())
{
_textureBrowserDock->setVisible(_show_texture_palette_window.get());
}
else
{
QSignalBlocker const _(_show_texture_palette_window);
_show_texture_palette_window.set(false);
}
}
);
/* Texture Palette Small */ // Dock
_texturePaletteSmall = new Noggit::Ui::texture_palette_small(mv->project(), mv->getWorld()->getMapID(), mv); _texturePaletteDock = new QDockWidget("Texture Palette", mv);
_texturePaletteDock->setFeatures(QDockWidget::DockWidgetMovable
| QDockWidget::DockWidgetFloatable
| QDockWidget::DockWidgetClosable
);
// Dock _texturePaletteDock->setWidget(_texturePalette);
_texturePaletteDock = new QDockWidget("Texture Palette", mv); _texturePaletteDock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
_texturePaletteDock->setFeatures(QDockWidget::DockWidgetMovable _texturePaletteDock->hide();
| QDockWidget::DockWidgetFloatable
| QDockWidget::DockWidgetClosable
);
_texturePaletteDock->setWidget(_texturePaletteSmall); QObject::connect(mv, &QObject::destroyed, _texturePaletteDock, &QObject::deleteLater);
_texturePaletteDock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
_texturePaletteDock->hide();
QObject::connect(mv, &QObject::destroyed, _texturePaletteDock, &QObject::deleteLater); mv->mainWindow()->addDockWidget(Qt::BottomDockWidgetArea, _texturePaletteDock);
// End Dock
mv->mainWindow()->addDockWidget(Qt::BottomDockWidgetArea, _texturePaletteDock); QObject::connect(_texturePaletteDock, &QDockWidget::visibilityChanged,
// End Dock [=](bool visible)
{
if (mv->isUiHidden())
return;
QObject::connect(_texturePaletteDock, &QDockWidget::visibilityChanged, mv->settings()->setValue("map_view/texture_palette", visible);
[=](bool visible) mv->settings()->sync();
{ });
if (mv->isUiHidden())
return;
mv->settings()->setValue("map_view/texture_palette", visible); QObject::connect(_texturePalette, &Noggit::Ui::texture_palette_small::selected
mv->settings()->sync(); , [=](std::string const& filename)
}); {
mv->makeCurrent();
OpenGL::context::scoped_setter const _(::gl, mv->context());
QObject::connect(_texturePaletteSmall, &Noggit::Ui::texture_palette_small::selected Noggit::Ui::selected_texture::set({ filename, mv->getRenderContext() });
, [=](std::string const& filename) _texturingTool->_current_texture->set_texture(filename);
{ }
mv->makeCurrent(); );
OpenGL::context::scoped_setter const _(::gl, mv->context()); QObject::connect(mv, &QObject::destroyed, _texturePalette, &QObject::deleteLater);
Noggit::Ui::selected_texture::set({ filename, mv->getRenderContext() }); QObject::connect(&_show_texture_palette_window, &Noggit::BoolToggleProperty::changed
_texturingTool->_current_texture->set_texture(filename); , _texturePaletteDock, [=]
} {
); if (mv->get_editing_mode() != editing_mode::paint || mv->isUiHidden())
QObject::connect(mv, &QObject::destroyed, _texturePaletteSmall, &QObject::deleteLater); {
QSignalBlocker const _(_show_texture_palette_window);
_show_texture_palette_window.set(false);
return;
}
QObject::connect(&_show_texture_palette_small_window, &Noggit::BoolToggleProperty::changed QSignalBlocker const _(_texturePalette);
, _texturePaletteDock, [=] _texturePaletteDock->setVisible(_show_texture_palette_window.get());
{ }
QSignalBlocker const blocker(_show_texture_palette_small_window); );
if (mv->get_editing_mode() == editing_mode::paint && !mv->isUiHidden())
{
_texturePaletteDock->setVisible(_show_texture_palette_small_window.get());
}
else
{
_show_texture_palette_small_window.set(false);
}
}
);
QObject::connect(_texturePaletteDock, &QDockWidget::visibilityChanged
, &_show_texture_palette_small_window, &Noggit::BoolToggleProperty::set
);
QObject::connect(_texturingTool->_current_texture, &Noggit::Ui::current_texture::texture_updated QObject::connect(_texturingTool->_current_texture, &Noggit::Ui::current_texture::texture_updated
, [=]() , [=]()
{ {
mv->getWorld()->notifyTileRendererOnSelectedTextureChange(); mv->getWorld()->notifyTileRendererOnSelectedTextureChange();
_texturingTool->getGroundEffectsTool()->TextureChanged(); _texturingTool->getGroundEffectsTool()->TextureChanged();
} }
); );
}
/* Texture Picker */ void TexturingTool::setupTexturePicker(MapView* mv)
{
// Dock
_texturePickerDock = new QDockWidget("Texture picker", mv);
_texturePickerDock->setFeatures(QDockWidget::DockWidgetMovable
| QDockWidget::DockWidgetFloatable
| QDockWidget::DockWidgetClosable);
mv->mainWindow()->addDockWidget(Qt::BottomDockWidgetArea, _texturePickerDock);
_texturePickerDock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
_texturePickerDock->setFloating(true);
_texturePickerDock->hide();
QObject::connect(mv, &QObject::destroyed, _texturePickerDock, &QObject::deleteLater);
// End Dock
// Dock _texturePicker = new Noggit::Ui::texture_picker(_texturingTool->_current_texture, mv);
_texturePickerDock = new QDockWidget("Texture picker", mv); _texturePickerDock->setWidget(_texturePicker);
_texturePickerDock->setFeatures(QDockWidget::DockWidgetMovable QObject::connect(mv, &QObject::destroyed, _texturePicker, &QObject::deleteLater);
| QDockWidget::DockWidgetFloatable
| QDockWidget::DockWidgetClosable);
mv->mainWindow()->addDockWidget(Qt::BottomDockWidgetArea, _texturePickerDock);
_texturePickerDock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
_texturePickerDock->setFloating(true);
_texturePickerDock->hide();
QObject::connect(mv, &QObject::destroyed, _texturePickerDock, &QObject::deleteLater);
// End Dock
_texturePicker = new Noggit::Ui::texture_picker(_texturingTool->_current_texture, mv); QObject::connect(_texturePicker
_texturePickerDock->setWidget(_texturePicker); , &Noggit::Ui::texture_picker::set_texture
QObject::connect(mv, &QObject::destroyed, _texturePicker, &QObject::deleteLater); , [=](scoped_blp_texture_reference texture)
{
QObject::connect(_texturePicker mv->makeCurrent();
, &Noggit::Ui::texture_picker::set_texture OpenGL::context::scoped_setter const _(::gl, mv->context());
, [=](scoped_blp_texture_reference texture) Noggit::Ui::selected_texture::set(std::move(texture));
{ }
mv->makeCurrent(); );
OpenGL::context::scoped_setter const _(::gl, mv->context()); QObject::connect(_texturePicker, &Noggit::Ui::texture_picker::shift_left
Noggit::Ui::selected_texture::set(std::move(texture)); , [=]
} {
); mv->makeCurrent();
QObject::connect(_texturePicker, &Noggit::Ui::texture_picker::shift_left OpenGL::context::scoped_setter const _(::gl, mv->context());
, [=] _texturePicker->shiftSelectedTextureLeft();
{ }
mv->makeCurrent(); );
OpenGL::context::scoped_setter const _(::gl, mv->context()); QObject::connect(_texturePicker, &Noggit::Ui::texture_picker::shift_right
_texturePicker->shiftSelectedTextureLeft(); , [=]
} {
); mv->makeCurrent();
QObject::connect(_texturePicker, &Noggit::Ui::texture_picker::shift_right OpenGL::context::scoped_setter const _(::gl, mv->context());
, [=] _texturePicker->shiftSelectedTextureRight();
{ }
mv->makeCurrent(); );
OpenGL::context::scoped_setter const _(::gl, mv->context());
_texturePicker->shiftSelectedTextureRight();
}
);
} }
void TexturingTool::registerMenuItems(QMenu* menu) void TexturingTool::registerMenuItems(QMenu* menu)
{ {
addMenuTitle(menu, "Texture Painter"); addMenuTitle(menu, "Texture Painter");
addMenuItem(menu, "Texture Browser", Qt::Key_X, _show_texture_palette_window); addMenuItem(menu, "Texture Browser", Qt::Key_X, _show_texture_browser_window);
addMenuItem(menu, "Texture palette", _show_texture_palette_small_window); addMenuItem(menu, "Texture palette", _show_texture_palette_window);
} }
ToolDrawParameters TexturingTool::drawParameters() const ToolDrawParameters TexturingTool::drawParameters() const
@@ -386,15 +387,23 @@ namespace Noggit
} }
} }
_textureBrowserDock->setVisible(!mv->isUiHidden() && mv->settings()->value("map_view/texture_browser", false).toBool()); auto showTextureBrowser = _show_texture_browser_window.get() || mv->settings()->value("map_view/texture_browser", false).toBool();
_texturePaletteDock->setVisible(!mv->isUiHidden() && mv->settings()->value("map_view/texture_palette", false).toBool()); auto showTexturePalette = _show_texture_palette_window.get() || mv->settings()->value("map_view/texture_palette", false).toBool();
_textureBrowserDock->setVisible(!mv->isUiHidden() && showTextureBrowser);
_texturePaletteDock->setVisible(!mv->isUiHidden() && showTexturePalette);
} }
void TexturingTool::onDeselected() void TexturingTool::onDeselected()
{ {
_texturingTool->getGroundEffectsTool()->hide(); _texturingTool->getGroundEffectsTool()->hide();
QSignalBlocker const blocker1(_show_texture_palette_window);
QSignalBlocker const blocker2(_show_texture_browser_window);
QSignalBlocker const blocker3(_textureBrowserDock);
_textureBrowserDock->setVisible(false); _textureBrowserDock->setVisible(false);
_texturePaletteDock->setVisible(false); _texturePaletteDock->setVisible(false);
_texturePickerDock->setVisible(false);
_texturePickerNeedUpdate = false;
} }
void TexturingTool::onTick(float deltaTime, TickParameters const& params) void TexturingTool::onTick(float deltaTime, TickParameters const& params)
@@ -564,7 +573,7 @@ namespace Noggit
void TexturingTool::hidePopups() void TexturingTool::hidePopups()
{ {
_texturePaletteSmall->hide(); _texturePalette->hide();
_texturePickerDock->hide(); _texturePickerDock->hide();
_textureBrowserDock->hide(); _textureBrowserDock->hide();
} }

View File

@@ -56,15 +56,19 @@ namespace Noggit
private: private:
Ui::texturing_tool* _texturingTool = nullptr; Ui::texturing_tool* _texturingTool = nullptr;
QDockWidget* _textureBrowserDock = nullptr; QDockWidget* _textureBrowserDock = nullptr;
Ui::tileset_chooser* _texturePalette = nullptr; Ui::tileset_chooser* _textureBrowser = nullptr;
Ui::texture_picker* _texturePicker = nullptr; Ui::texture_picker* _texturePicker = nullptr;
Ui::texture_palette_small* _texturePaletteSmall = nullptr; Ui::texture_palette_small* _texturePalette = nullptr;
QDockWidget* _texturePaletteDock = nullptr; QDockWidget* _texturePaletteDock = nullptr;
QDockWidget* _texturePickerDock = nullptr; QDockWidget* _texturePickerDock = nullptr;
bool _texturePickerNeedUpdate = false; bool _texturePickerNeedUpdate = false;
Noggit::BoolToggleProperty _show_texture_browser_window = { false };
Noggit::BoolToggleProperty _show_texture_palette_window = { false }; Noggit::BoolToggleProperty _show_texture_palette_window = { false };
Noggit::BoolToggleProperty _show_texture_palette_small_window = { false };
void randomizeTexturingRotation(); void randomizeTexturingRotation();
void setupTextureBrowser(MapView* mv);
void setupTexturePalette(MapView* mv);
void setupTexturePicker(MapView* mv);
}; };
} }

View File

@@ -84,7 +84,7 @@ namespace Noggit
{ {
return; return;
} }
for (auto& selection : mapView()->getWorld()->current_selection()) for (auto& selection : mapView()->getWorld()->current_selection())
{ {
if (selection.index() != eEntry_MapChunk) if (selection.index() != eEntry_MapChunk)