Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuSanka <yusanka@gmail.com>2022-06-07 12:12:53 +0300
committerYuSanka <yusanka@gmail.com>2022-06-07 12:12:53 +0300
commit1b4bfa30c48843f45fee6d3c58e08a9e0a841880 (patch)
tree5352939580744040d076498ff82bbd4a831e8c1c
parent211e591baa1b6b16fc7a34130a9b34a9d86819b2 (diff)
OSX specific: Fixed get_mouse_position_in_control().ys_stable_wxw316
+ Use GetItemRect() to calculation of the position and size for Extruder selector
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.cpp26
-rw-r--r--src/slic3r/GUI/GUI_ObjectList.hpp2
2 files changed, 21 insertions, 7 deletions
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index 728b959b7..c8e03a48c 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -969,12 +969,11 @@ void ObjectList::extruder_editing()
if (!item || !(m_objects_model->GetItemType(item) & (itVolume | itObject)))
return;
- const int column_width = GetColumn(colExtruder)->GetWidth() + wxSystemSettings::GetMetric(wxSYS_VSCROLL_X) + 5;
-
- wxPoint pos = this->get_mouse_position_in_control();
- wxSize size = wxSize(column_width, -1);
- pos.x = GetColumn(colName)->GetWidth() + GetColumn(colPrint)->GetWidth() + 5;
- pos.y -= GetTextExtent("m").y;
+ wxRect rect = this->GetItemRect(item, GetColumn(colExtruder));
+ wxPoint pos = rect.GetPosition();
+ pos.y -= 4;
+ wxSize size = rect.GetSize();
+ size.SetWidth(size.GetWidth() + 8);
apply_extruder_selector(&m_extruder_editor, this, L("default"), pos, size);
@@ -2405,6 +2404,21 @@ bool ObjectList::can_merge_to_single_object() const
return (*m_objects)[obj_idx]->volumes.size() > 1;
}
+wxPoint ObjectList::get_mouse_position_in_control() const
+{
+ wxPoint pt = wxGetMousePosition() - this->GetScreenPosition();
+
+#ifdef __APPLE__
+ // Workaround for OSX. From wxWidgets 3.1.6 Hittest doesn't respect to the header of wxDataViewCtrl
+ if (wxDataViewItem top_item = this->GetTopItem(); top_item.IsOk()) {
+ auto rect = this->GetItemRect(top_item, this->GetColumn(0));
+ pt.y -= rect.y;
+ }
+#endif // __APPLE__
+
+ return pt;
+}
+
// NO_PARAMETERS function call means that changed object index will be determine from Selection()
void ObjectList::changed_object(const int obj_idx/* = -1*/) const
{
diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp
index 51d69eaee..895df6384 100644
--- a/src/slic3r/GUI/GUI_ObjectList.hpp
+++ b/src/slic3r/GUI/GUI_ObjectList.hpp
@@ -280,7 +280,7 @@ public:
bool can_merge_to_multipart_object() const;
bool can_merge_to_single_object() const;
- wxPoint get_mouse_position_in_control() const { return wxGetMousePosition() - this->GetScreenPosition(); }
+ wxPoint get_mouse_position_in_control() const;
wxBoxSizer* get_sizer() {return m_sizer;}
int get_selected_obj_idx() const;
ModelConfig& get_item_config(const wxDataViewItem& item) const;