X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/97d483e41ae6e9401b7d8e1195b0f74759b1cc0b..8037b674e8b39d4ed3b621500237b5eb525a6de8:/src/aui/framemanager.cpp diff --git a/src/aui/framemanager.cpp b/src/aui/framemanager.cpp index 4d42a2610b..a2bd4c0701 100644 --- a/src/aui/framemanager.cpp +++ b/src/aui/framemanager.cpp @@ -30,6 +30,7 @@ #include "wx/aui/floatpane.h" #ifndef WX_PRECOMP + #include "wx/panel.h" #include "wx/settings.h" #include "wx/app.h" #include "wx/dcclient.h" @@ -561,7 +562,7 @@ wxDockUIPart* wxFrameManager::HitTest(int x, int y) continue; // if the point is inside the rectangle, we have a hit - if (item->rect.Inside(x,y)) + if (item->rect.Contains(x,y)) result = item; } @@ -2337,7 +2338,12 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, else if (pt.y >= cli_size.y - layer_insert_offset && pt.y < cli_size.y - layer_insert_offset + auiLayerInsertPixels) { + int new_layer = wxMax( wxMax( GetMaxLayer(docks, wxAUI_DOCK_BOTTOM), + GetMaxLayer(docks, wxAUI_DOCK_LEFT)), + GetMaxLayer(docks, wxAUI_DOCK_RIGHT)) + 1; + drop.Dock().Bottom(). + Layer(new_layer). Row(0). Position(pt.x - GetDockPixelOffset(drop) - offset.x); return ProcessDockResult(target, drop); @@ -2350,7 +2356,7 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, { if (!part || !part->dock) return false; - + // calculate the offset from where the dock begins // to the point where the user dropped the pane int dock_drop_offset = 0; @@ -2365,7 +2371,7 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, // should float if being dragged over center pane windows if (!part->dock->fixed || part->dock->dock_direction == wxAUI_DOCK_CENTER) { - if (m_last_rect.IsEmpty() || m_last_rect.Inside(pt.x, pt.y )) + if (m_last_rect.IsEmpty() || m_last_rect.Contains(pt.x, pt.y )) { m_skipping = true; } @@ -2378,12 +2384,12 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, { drop.Float(); } - + m_skipping = false; - + return ProcessDockResult(target, drop); } - + drop.Position(pt.x - GetDockPixelOffset(drop) - offset.x); return ProcessDockResult(target, drop); @@ -2392,7 +2398,7 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, { m_skipping = false; } - + if (!m_skipping) { m_last_rect = part->dock->rect; @@ -2406,15 +2412,26 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, Position(dock_drop_offset); if (( - ((pt.y < part->dock->rect.y + 2) && part->dock->IsHorizontal()) || - ((pt.x < part->dock->rect.x + 2) && part->dock->IsVertical()) + ((pt.y < part->dock->rect.y + 1) && part->dock->IsHorizontal()) || + ((pt.x < part->dock->rect.x + 1) && part->dock->IsVertical()) ) && part->dock->panes.GetCount() > 1) { - int row = drop.dock_row; - DoInsertDockRow(panes, part->dock->dock_direction, - part->dock->dock_layer, - part->dock->dock_row); - drop.dock_row = row; + if ((part->dock->dock_direction == wxAUI_DOCK_TOP) || + (part->dock->dock_direction == wxAUI_DOCK_LEFT)) + { + int row = drop.dock_row; + DoInsertDockRow(panes, part->dock->dock_direction, + part->dock->dock_layer, + part->dock->dock_row); + drop.dock_row = row; + } + else + { + DoInsertDockRow(panes, part->dock->dock_direction, + part->dock->dock_layer, + part->dock->dock_row+1); + drop.dock_row = part->dock->dock_row+1; + } } if (( @@ -2422,10 +2439,22 @@ bool wxFrameManager::DoDrop(wxDockInfoArray& docks, ((pt.x > part->dock->rect.x + part->dock->rect.width - 2 ) && part->dock->IsVertical()) ) && part->dock->panes.GetCount() > 1) { - DoInsertDockRow(panes, part->dock->dock_direction, - part->dock->dock_layer, - part->dock->dock_row+1); - drop.dock_row = part->dock->dock_row+1; + if ((part->dock->dock_direction == wxAUI_DOCK_TOP) || + (part->dock->dock_direction == wxAUI_DOCK_LEFT)) + { + DoInsertDockRow(panes, part->dock->dock_direction, + part->dock->dock_layer, + part->dock->dock_row+1); + drop.dock_row = part->dock->dock_row+1; + } + else + { + int row = drop.dock_row; + DoInsertDockRow(panes, part->dock->dock_direction, + part->dock->dock_layer, + part->dock->dock_row); + drop.dock_row = row; + } } return ProcessDockResult(target, drop); @@ -2920,6 +2949,8 @@ void wxFrameManager::OnFloatingPaneMoving(wxWindow* wnd, wxDirection dir) pos = wnd->ClientToScreen( pos ); pt.y = pos.y; } +#else + wxUnusedVar(dir); #endif wxPoint client_pt = m_frame->ScreenToClient(pt); @@ -3021,6 +3052,8 @@ void wxFrameManager::OnFloatingPaneMoved(wxWindow* wnd, wxDirection dir) pos = wnd->ClientToScreen( pos ); pt.y = pos.y; } +#else + wxUnusedVar(dir); #endif wxPoint client_pt = m_frame->ScreenToClient(pt); @@ -3135,22 +3168,22 @@ void wxFrameManager::OnRender(wxFrameManagerEvent& evt) { case wxDockUIPart::typeDockSizer: case wxDockUIPart::typePaneSizer: - m_art->DrawSash(*dc, part.orientation, part.rect); + m_art->DrawSash(*dc, m_frame, part.orientation, part.rect); break; case wxDockUIPart::typeBackground: - m_art->DrawBackground(*dc, part.orientation, part.rect); + m_art->DrawBackground(*dc, m_frame, part.orientation, part.rect); break; case wxDockUIPart::typeCaption: - m_art->DrawCaption(*dc, part.pane->caption, part.rect, *part.pane); + m_art->DrawCaption(*dc, m_frame, part.pane->caption, part.rect, *part.pane); break; case wxDockUIPart::typeGripper: - m_art->DrawGripper(*dc, part.rect, *part.pane); + m_art->DrawGripper(*dc, m_frame, part.rect, *part.pane); break; case wxDockUIPart::typePaneBorder: - m_art->DrawBorder(*dc, part.rect, *part.pane); + m_art->DrawBorder(*dc, m_frame, part.rect, *part.pane); break; case wxDockUIPart::typePaneButton: - m_art->DrawPaneButton(*dc, part.button->button_id, + m_art->DrawPaneButton(*dc, m_frame, part.button->button_id, wxAUI_BUTTON_STATE_NORMAL, part.rect, *part.pane); break; } @@ -3301,7 +3334,7 @@ void wxFrameManager::UpdateButtonOnScreen(wxDockUIPart* button_ui_part, if (pt.x != 0 || pt.y != 0) cdc.SetDeviceOrigin(pt.x, pt.y); - m_art->DrawPaneButton(cdc, + m_art->DrawPaneButton(cdc, m_frame, button_ui_part->button->button_id, state, button_ui_part->rect,