vcl/source/window/dockmgr.cxx |  108 +++++++++---------------------------------
 1 file changed, 25 insertions(+), 83 deletions(-)

New commits:
commit 445f157a132ba977fc026746221f8e85daa289cb
Author: Maxim Monastirsky <momonas...@gmail.com>
Date:   Sat Oct 8 22:34:13 2016 +0300

    Add title-based tearoff to DockingManager, take 2
    
    Change-Id: I2582756fd1fb6e823daa7336a7fb1ce5d752f83e

diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index 06cb139..0bc7ce2 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -1056,7 +1056,12 @@ void ImplDockingWindowWrapper::StartPopupMode( ToolBox 
*pParentToolBox, FloatWin
         mpOldBorderWin = nullptr;  // no border window found
 
     // the new parent for popup mode
-    VclPtrInstance<ImplPopupFloatWin> pWin( mpParent, this, bool(nFlags & 
FloatWinPopupFlags::AllowTearOff) );
+    VclPtr<FloatingWindow> pWin;
+    bool bAllowTearOff = bool( nFlags & FloatWinPopupFlags::AllowTearOff );
+    if ( bAllowTearOff && !dynamic_cast< ToolBox* >( GetWindow() ) )
+        pWin = VclPtr<FloatingWindow>::Create( mpParent, WB_STDPOPUP );
+    else
+        pWin = VclPtr<ImplPopupFloatWin>::Create( mpParent, this, 
bAllowTearOff );
 
     pWin->SetPopupModeEndHdl( LINK( this, ImplDockingWindowWrapper, 
PopupModeEnd ) );
     pWin->SetText( GetWindow()->GetText() );
commit 23567618f0ee316aae080a7fa60e804282c0df07
Author: Maxim Monastirsky <momonas...@gmail.com>
Date:   Sat Oct 8 22:32:22 2016 +0300

    mbGripAtBottom is always true
    
    Change-Id: I76db4c796933996cdf9d1782e9a6fb19ee7860a7

diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index fcddef3..06cb139 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -462,7 +462,6 @@ private:
     bool                        mbMoving;
     bool                        mbTrackingEnabled;
     Point                       maDelta;
-    bool                        mbGripAtBottom;
     bool                        mbHasGrip;
     void                        ImplSetBorder();
 
@@ -480,7 +479,6 @@ public:
     virtual void        Resize() override;
 
     Rectangle           GetDragRect() const;
-    Point               GetToolboxPosition() const;
     void                DrawGrip(vcl::RenderContext& rRenderContext);
     void                DrawBorder(vcl::RenderContext& rRenderContext);
 
@@ -496,7 +494,6 @@ ImplPopupFloatWin::ImplPopupFloatWin( vcl::Window* pParent, 
ImplDockingWindowWra
     mbHighlight = false;
     mbMoving = false;
     mbTrackingEnabled = false;
-    mbGripAtBottom = true;
     mbHasGrip = bHasGrip;
 
     ImplSetBorder();
@@ -546,26 +543,11 @@ void ImplPopupFloatWin::Resize()
 
 Rectangle ImplPopupFloatWin::GetDragRect() const
 {
-    Rectangle aRect;
-    if( hasGrip() )
-    {
-        aRect = Rectangle( 1,1, GetOutputSizePixel().Width()-1, 
2+POPUP_DRAGHEIGHT );
-        if( mbGripAtBottom )
-        {
-            int height = GetOutputSizePixel().Height();
-            aRect.Top() = height - 3 - POPUP_DRAGHEIGHT;
-            aRect.Bottom() = aRect.Top() + 1 + POPUP_DRAGHEIGHT;
-        }
-    }
-    return aRect;
-}
-
-Point ImplPopupFloatWin::GetToolboxPosition() const
-{
-    // return inner position where a toolbox could be placed
-    Point aPt( 1, 1 + ((mbGripAtBottom || !hasGrip()) ? 0 : 
GetDragRect().getHeight()) );    // grip + border
+    if( !hasGrip() )
+        return Rectangle();
 
-    return aPt;
+    return Rectangle( 1, GetOutputSizePixel().Height() - 3 - POPUP_DRAGHEIGHT,
+                      GetOutputSizePixel().Width() - 1, 
GetOutputSizePixel().Height() - 1 );
 }
 
 void ImplPopupFloatWin::DrawBorder(vcl::RenderContext& rRenderContext)
@@ -1087,8 +1069,8 @@ void ImplDockingWindowWrapper::StartPopupMode( ToolBox 
*pParentToolBox, FloatWin
     GetWindow()->mpWindowImpl->mnRightBorder   = 0;
     GetWindow()->mpWindowImpl->mnBottomBorder  = 0;
 
-    // position toolbox below DragRect
-    GetWindow()->SetPosPixel( pWin->GetToolboxPosition() );
+    // position toolbox above DragRect
+    GetWindow()->SetPosPixel( Point( 1, 1 ) );
 
     // reparent borderwindow and window
     if ( mpOldBorderWin )
commit 3e4e5717d470f4bdb3477da6a979184b363a07e5
Author: Maxim Monastirsky <momonas...@gmail.com>
Date:   Sat Oct 8 22:10:32 2016 +0300

    Just get the last window pos
    
    Change-Id: I1cf0964d11e9045366697b75c2606df6f62aa438

diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index 984e5af..fcddef3 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -462,7 +462,6 @@ private:
     bool                        mbMoving;
     bool                        mbTrackingEnabled;
     Point                       maDelta;
-    Point                       maTearOffPosition;
     bool                        mbGripAtBottom;
     bool                        mbHasGrip;
     void                        ImplSetBorder();
@@ -482,7 +481,6 @@ public:
 
     Rectangle           GetDragRect() const;
     Point               GetToolboxPosition() const;
-    Point               GetTearOffPosition() const;
     void                DrawGrip(vcl::RenderContext& rRenderContext);
     void                DrawBorder(vcl::RenderContext& rRenderContext);
 
@@ -570,13 +568,6 @@ Point ImplPopupFloatWin::GetToolboxPosition() const
     return aPt;
 }
 
-Point ImplPopupFloatWin::GetTearOffPosition() const
-{
-    Point aPt( maTearOffPosition );
-    //aPt += GetToolboxPosition();    // remove 'decoration'
-    return aPt;
-}
-
 void ImplPopupFloatWin::DrawBorder(vcl::RenderContext& rRenderContext)
 {
     rRenderContext.SetFillColor();
@@ -741,8 +732,7 @@ void ImplPopupFloatWin::MouseButtonDown( const MouseEvent& 
rMEvt )
         PointerState aState = GetParent()->GetPointerState();
         if (HasMirroredGraphics() && IsRTLEnabled())
             ImplMirrorFramePos(aState.maPos);
-        maTearOffPosition = GetWindow( GetWindowType::Border )->GetPosPixel();
-        maDelta = aState.maPos - maTearOffPosition;
+        maDelta = aState.maPos - GetWindow( GetWindowType::Border 
)->GetPosPixel();
         mbTrackingEnabled = true;
     }
     else
@@ -767,8 +757,7 @@ void ImplPopupFloatWin::Tracking( const TrackingEvent& 
rTEvt )
             const OutputDevice *pOutDev = GetOutDev();
             if (pOutDev->HasMirroredGraphics() && IsRTLEnabled())
                 ImplMirrorFramePos(aState.maPos);
-            maTearOffPosition = aState.maPos - maDelta;
-            GetWindow( GetWindowType::Border )->SetPosPixel( maTearOffPosition 
);
+            GetWindow( GetWindowType::Border )->SetPosPixel( aState.maPos - 
maDelta );
         }
     }
 }
@@ -1136,8 +1125,7 @@ IMPL_LINK_NOARG(ImplDockingWindowWrapper, PopupModeEnd, 
FloatingWindow*, void)
     GetWindow()->Show( false, ShowFlags::NoFocusChange );
 
     // set parameter for handler before destroying floating window
-    ImplPopupFloatWin *pPopupFloatWin = 
static_cast<ImplPopupFloatWin*>(mpFloatWin.get());
-    EndPopupModeData aData( pPopupFloatWin->GetTearOffPosition(), 
mpFloatWin->IsPopupModeTearOff() );
+    EndPopupModeData aData( mpFloatWin->GetWindow( GetWindowType::Border 
)->GetPosPixel(), mpFloatWin->IsPopupModeTearOff() );
 
     // before deleting change parent back, so we can delete the floating 
window alone
     vcl::Window* pRealParent = GetWindow()->GetWindow( GetWindowType::Parent );
commit 9ffd74a37670f7c102595a460fb2c425eb58da62
Author: Maxim Monastirsky <momonas...@gmail.com>
Date:   Sat Oct 8 21:59:02 2016 +0300

    Revert "Add title-based tearoff to DockingManager"
    
    Careful reading of the code reveals that WB_POPUP is what adds
    the tearoff title, not WB_OWNERDRAWDECORATION, so we can use that
    instead of introducing yet another title implementation into
    ImplPopupFloatWin.
    
    This reverts commit 6128a8311d37514c49c2fe3ba80f850a51de37d6.
    
    Change-Id: I681686c9a0bd79d80f43ce213caeef77dcbab6b8

diff --git a/vcl/source/window/dockmgr.cxx b/vcl/source/window/dockmgr.cxx
index 9caf5cc..984e5af 100644
--- a/vcl/source/window/dockmgr.cxx
+++ b/vcl/source/window/dockmgr.cxx
@@ -454,13 +454,6 @@ Rectangle DockingManager::GetPosSizePixel( const 
vcl::Window *pWindow )
 #define POPUP_DRAGHEIGHT    (POPUP_DRAGGRIP+POPUP_DRAGBORDER+POPUP_DRAGBORDER)
 #define POPUP_DRAGWIDTH     20
 
-enum class TearOffStyle
-{
-    Grip,
-    Title,
-    None
-};
-
 class ImplPopupFloatWin : public FloatingWindow
 {
 private:
@@ -470,11 +463,12 @@ private:
     bool                        mbTrackingEnabled;
     Point                       maDelta;
     Point                       maTearOffPosition;
-    TearOffStyle                meTearOffStyle;
+    bool                        mbGripAtBottom;
+    bool                        mbHasGrip;
     void                        ImplSetBorder();
 
 public:
-    ImplPopupFloatWin( vcl::Window* pParent, ImplDockingWindowWrapper* 
pDockingWin, TearOffStyle eStyle );
+    ImplPopupFloatWin( vcl::Window* pParent, ImplDockingWindowWrapper* 
pDockingWin, bool bHasGrip );
     virtual ~ImplPopupFloatWin() override;
     virtual void dispose() override;
 
@@ -490,11 +484,12 @@ public:
     Point               GetToolboxPosition() const;
     Point               GetTearOffPosition() const;
     void                DrawGrip(vcl::RenderContext& rRenderContext);
-    void                DrawTitle(vcl::RenderContext& rRenderContext);
     void                DrawBorder(vcl::RenderContext& rRenderContext);
+
+    bool                hasGrip() const { return mbHasGrip; }
 };
 
-ImplPopupFloatWin::ImplPopupFloatWin( vcl::Window* pParent, 
ImplDockingWindowWrapper* pDockingWin, TearOffStyle eStyle ) :
+ImplPopupFloatWin::ImplPopupFloatWin( vcl::Window* pParent, 
ImplDockingWindowWrapper* pDockingWin, bool bHasGrip ) :
     FloatingWindow( pParent, WB_NOBORDER | WB_SYSTEMWINDOW | WB_NOSHADOW)
 {
     mpWindowImpl->mbToolbarFloatingWindow = true;   // indicate window type, 
required for accessibility
@@ -503,7 +498,8 @@ ImplPopupFloatWin::ImplPopupFloatWin( vcl::Window* pParent, 
ImplDockingWindowWra
     mbHighlight = false;
     mbMoving = false;
     mbTrackingEnabled = false;
-    meTearOffStyle = eStyle;
+    mbGripAtBottom = true;
+    mbHasGrip = bHasGrip;
 
     ImplSetBorder();
 }
@@ -537,10 +533,8 @@ void ImplPopupFloatWin::ImplSetBorder()
     // by setting those members the method SetOutputSizePixel() can
     //  be used to set the proper window size
     mpWindowImpl->mnTopBorder     = 1;
-    if( meTearOffStyle == TearOffStyle::Grip )
+    if( hasGrip() )
         mpWindowImpl->mnTopBorder += POPUP_DRAGHEIGHT+2;
-    else if( meTearOffStyle == TearOffStyle::Title )
-        mpWindowImpl->mnTopBorder += 
GetSettings().GetStyleSettings().GetTitleHeight()+2;
     mpWindowImpl->mnBottomBorder  = 1;
     mpWindowImpl->mnLeftBorder    = 1;
     mpWindowImpl->mnRightBorder   = 1;
@@ -554,23 +548,24 @@ void ImplPopupFloatWin::Resize()
 
 Rectangle ImplPopupFloatWin::GetDragRect() const
 {
-    if( meTearOffStyle == TearOffStyle::Grip )
-    {
-        return Rectangle( 1, GetOutputSizePixel().Height() - 3 - 
POPUP_DRAGHEIGHT,
-                           GetOutputSizePixel().Width() - 1, 
GetOutputSizePixel().Height() - 1 );
-    }
-    else if( meTearOffStyle == TearOffStyle::Title )
+    Rectangle aRect;
+    if( hasGrip() )
     {
-        return Rectangle( 1, 1, GetOutputSizePixel().Width() - 1, 
GetSettings().GetStyleSettings().GetTitleHeight() + 2 );
+        aRect = Rectangle( 1,1, GetOutputSizePixel().Width()-1, 
2+POPUP_DRAGHEIGHT );
+        if( mbGripAtBottom )
+        {
+            int height = GetOutputSizePixel().Height();
+            aRect.Top() = height - 3 - POPUP_DRAGHEIGHT;
+            aRect.Bottom() = aRect.Top() + 1 + POPUP_DRAGHEIGHT;
+        }
     }
-
-    return Rectangle();
+    return aRect;
 }
 
 Point ImplPopupFloatWin::GetToolboxPosition() const
 {
     // return inner position where a toolbox could be placed
-    Point aPt( 1, 1 + ( meTearOffStyle != TearOffStyle::Title ? 0 : 
GetDragRect().getHeight()) );    // grip + border
+    Point aPt( 1, 1 + ((mbGripAtBottom || !hasGrip()) ? 0 : 
GetDragRect().getHeight()) );    // grip + border
 
     return aPt;
 }
@@ -696,33 +691,13 @@ void ImplPopupFloatWin::DrawGrip(vcl::RenderContext& 
rRenderContext)
         rRenderContext.SetFillColor();
 }
 
-void ImplPopupFloatWin::DrawTitle(vcl::RenderContext &rRenderContext)
-{
-    Rectangle aRect(GetDragRect());
-    aRect.Left()  += 2;
-    aRect.Right() -= 2;
-
-    DrawTextFlags nTextStyle = DrawTextFlags::Left | DrawTextFlags::VCenter | 
DrawTextFlags::EndEllipsis | DrawTextFlags::Clip;
-    
rRenderContext.SetTextColor(GetSettings().GetStyleSettings().GetButtonTextColor());
-    SetPointFont(rRenderContext, 
GetSettings().GetStyleSettings().GetTitleFont());
-    rRenderContext.DrawText(aRect, GetText(), nTextStyle);
-}
-
 void ImplPopupFloatWin::Paint(vcl::RenderContext& rRenderContext, const 
Rectangle&)
 {
     Rectangle aRect(Point(), GetOutputSizePixel());
-
-    if (meTearOffStyle == TearOffStyle::Grip)
-    {
-        rRenderContext.DrawWallpaper(aRect, 
Wallpaper(rRenderContext.GetSettings().GetStyleSettings().GetFaceGradientColor()));
-        DrawGrip(rRenderContext);
-    }
-    else if ( meTearOffStyle == TearOffStyle::Title )
-    {
-        rRenderContext.DrawWallpaper(aRect, 
Wallpaper(rRenderContext.GetSettings().GetStyleSettings().GetFaceColor()));
-        DrawTitle(rRenderContext);
-    }
+    rRenderContext.DrawWallpaper(aRect, 
Wallpaper(rRenderContext.GetSettings().GetStyleSettings().GetFaceGradientColor()));
     DrawBorder(rRenderContext);
+    if (hasGrip())
+        DrawGrip(rRenderContext);
 }
 
 void ImplPopupFloatWin::MouseMove( const MouseEvent& rMEvt )
@@ -1110,15 +1085,7 @@ void ImplDockingWindowWrapper::StartPopupMode( ToolBox 
*pParentToolBox, FloatWin
         mpOldBorderWin = nullptr;  // no border window found
 
     // the new parent for popup mode
-    TearOffStyle eStyle = TearOffStyle::None;
-    if ( nFlags & FloatWinPopupFlags::AllowTearOff )
-    {
-        if ( dynamic_cast< ToolBox* >( GetWindow() ) )
-            eStyle = TearOffStyle::Grip;
-        else
-            eStyle = TearOffStyle::Title;
-    }
-    VclPtrInstance<ImplPopupFloatWin> pWin( mpParent, this, eStyle );
+    VclPtrInstance<ImplPopupFloatWin> pWin( mpParent, this, bool(nFlags & 
FloatWinPopupFlags::AllowTearOff) );
 
     pWin->SetPopupModeEndHdl( LINK( this, ImplDockingWindowWrapper, 
PopupModeEnd ) );
     pWin->SetText( GetWindow()->GetText() );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to