Kirix Support Forums

Improvements to wxDockArt

Please post any wxAUI patches or modifications you've created here. Thanks!

Improvements to wxDockArt

Postby astigsen on Thu Jan 26, 2006 9:21 am

Just added a few more metrics to wxDockArt to enable more detailed customizations.

Code: Select all
--- wxaui-0.9.1/include/manager.h
57c57,59
<     wxAUI_ART_GRADIENT_TYPE = 16
---
>     wxAUI_ART_GRADIENT_TYPE = 16,
>     wxAUI_ART_CAPTION_TEXT_INDENT = 17,
>     wxAUI_ART_PANE_BUTTON_BORDER_SIZE = 18
619c621
<     void DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active);
---
>     virtual void DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active);
642c644,645
<     int m_caption_size;
---
>     int m_caption_size;
>    int m_caption_text_indent;
644c647,648
<     int m_button_size;
---
>     int m_button_size;
>     int m_button_border_size;


Code: Select all
--- wxaui-0.9.1/src/manager.cpp
155c155,156
<     m_caption_size = 17;
---
>     m_caption_size = 17;
>     m_caption_text_indent = 3;
157c158,159
<     m_button_size = 14;
---
>     m_button_size = 14;
>     m_button_border_size = 0;
166,171c168,175
<         case wxAUI_ART_SASH_SIZE:          return m_sash_size;
<         case wxAUI_ART_CAPTION_SIZE:       return m_caption_size;
<         case wxAUI_ART_GRIPPER_SIZE:       return m_gripper_size;
<         case wxAUI_ART_PANE_BORDER_SIZE:   return m_border_size;
<         case wxAUI_ART_PANE_BUTTON_SIZE:   return m_button_size;
<         case wxAUI_ART_GRADIENT_TYPE:      return m_gradient_type;
---
>         case wxAUI_ART_SASH_SIZE:               return m_sash_size;
>         case wxAUI_ART_CAPTION_SIZE:            return m_caption_size;
>         case wxAUI_ART_CAPTION_TEXT_INDENT:     return m_caption_size;
>         case wxAUI_ART_GRIPPER_SIZE:            return m_gripper_size;
>         case wxAUI_ART_PANE_BORDER_SIZE:        return m_border_size;
>         case wxAUI_ART_PANE_BUTTON_SIZE:        return m_button_size;
>         case wxAUI_ART_PANE_BUTTON_BORDER_SIZE: return m_button_border_size;
>         case wxAUI_ART_GRADIENT_TYPE:           return m_gradient_type;
182,187c186,193
<         case wxAUI_ART_SASH_SIZE:          m_sash_size = new_val; break;
<         case wxAUI_ART_CAPTION_SIZE:       m_caption_size = new_val; break;
<         case wxAUI_ART_GRIPPER_SIZE:       m_gripper_size = new_val; break;
<         case wxAUI_ART_PANE_BORDER_SIZE:   m_border_size = new_val; break;
<         case wxAUI_ART_PANE_BUTTON_SIZE:   m_button_size = new_val; break;
<         case wxAUI_ART_GRADIENT_TYPE:      m_gradient_type = new_val; break;
---
>         case wxAUI_ART_SASH_SIZE:               m_sash_size = new_val; break;
>         case wxAUI_ART_CAPTION_SIZE:            m_caption_size = new_val; break;
>         case wxAUI_ART_CAPTION_TEXT_INDENT:     m_caption_text_indent = new_val; break;
>         case wxAUI_ART_GRIPPER_SIZE:            m_gripper_size = new_val; break;
>         case wxAUI_ART_PANE_BORDER_SIZE:        m_border_size = new_val; break;
>         case wxAUI_ART_PANE_BUTTON_SIZE:        m_button_size = new_val; break;
>         case wxAUI_ART_PANE_BUTTON_BORDER_SIZE: m_button_border_size = new_val; break;
>         case wxAUI_ART_GRADIENT_TYPE:           m_gradient_type = new_val; break;
341,345c347,350
<      else
<         dc.SetTextForeground(m_inactive_caption_text_colour);
<
<
<     wxCoord w,h;
---
>     else
>         dc.SetTextForeground(m_inactive_caption_text_colour);
>
>     wxCoord w,h;
349c354
<     dc.DrawText(text, rect.x+3, rect.y+(rect.height/2)-(h/2)-1);
---
>     dc.DrawText(text, rect.x+m_caption_text_indent, rect.y+(rect.height/2)-(h/2)-1);
387c392,393
<     wxRect rect = _rect;
---
>     wxRect rect = _rect;
>     rect.y += m_button_border_size; // sizer return rect including borders
1609c1615,1616
<     int pane_button_size = m_art->GetMetric(wxAUI_ART_PANE_BUTTON_SIZE);
---
>     int pane_button_size = m_art->GetMetric(wxAUI_ART_PANE_BUTTON_SIZE);
>     int pane_button_border_size = m_art->GetMetric(wxAUI_ART_PANE_BUTTON_BORDER_SIZE);
1665,1666c1672,1675
<                                             caption_size,
<                                             0, wxEXPAND);
---
>                                             pane_button_size,
>                                             0,
>                                             wxALIGN_TOP|wxTOP|wxRIGHT|wxBOTTOM,
>                                             pane_button_border_size);


If there is interest I can later post my custom wxDockArt class.
astigsen
Registered User
 
Posts: 8
Joined: Thu Jan 26, 2006 9:06 am

Postby Ben on Thu Jan 26, 2006 11:55 am

This is cool stuff. I'm really happy that someone has made a custom dock art class.

Can you post a patch made with "diff -u" to the patch formus? It's a lot easier to read.

Also, I'd love to see a screenshot. :-)

Thanks,
Ben
User avatar
Ben
Kirix Support Team
 
Posts: 525
Joined: Mon Dec 19, 2005 6:29 am

Postby astigsen on Thu Jan 26, 2006 1:51 pm

Here are some more readable patches:

Code: Select all
--- wxaui-0.9.1/include/manager.h   2006-01-10 18:37:04.000000000 +0100
+++ manager.h   2006-01-26 19:42:52.437500000 +0100
@@ -54,7 +54,9 @@
     wxAUI_ART_BORDER_COLOUR = 13,
     wxAUI_ART_GRIPPER_COLOUR = 14,
     wxAUI_ART_CAPTION_FONT = 15,
-    wxAUI_ART_GRADIENT_TYPE = 16
+    wxAUI_ART_GRADIENT_TYPE = 16,
+    wxAUI_ART_CAPTION_TEXT_INDENT = 17,
+    wxAUI_ART_PANE_BUTTON_BORDER_SIZE = 18
};

enum wxPaneDockArtGradients
@@ -616,7 +618,7 @@

protected:

-    void DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active);
+    virtual void DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active);

protected:

@@ -640,8 +642,10 @@
     wxColour m_inactive_caption_text_colour;
     int m_border_size;
     int m_caption_size;
+    int m_caption_text_indent;
     int m_sash_size;
     int m_button_size;
+    int m_button_border_size;
     int m_gripper_size;
     int m_gradient_type;
};


Code: Select all
--- wxaui-0.9.1/src/manager.cpp   2006-01-10 18:37:06.000000000 +0100
+++ manager.cpp   2006-01-26 19:55:02.390625000 +0100
@@ -153,8 +153,10 @@
     // default metric values
     m_sash_size = 4;
     m_caption_size = 17;
+    m_caption_text_indent = 3;
     m_border_size = 1;
     m_button_size = 14;
+    m_button_border_size = 0;
     m_gripper_size = 9;
     m_gradient_type = wxAUI_GRADIENT_VERTICAL;
}
@@ -163,12 +165,14 @@
{
     switch (id)
     {
-        case wxAUI_ART_SASH_SIZE:          return m_sash_size;
-        case wxAUI_ART_CAPTION_SIZE:       return m_caption_size;
-        case wxAUI_ART_GRIPPER_SIZE:       return m_gripper_size;
-        case wxAUI_ART_PANE_BORDER_SIZE:   return m_border_size;
-        case wxAUI_ART_PANE_BUTTON_SIZE:   return m_button_size;
-        case wxAUI_ART_GRADIENT_TYPE:      return m_gradient_type;
+        case wxAUI_ART_SASH_SIZE:               return m_sash_size;
+        case wxAUI_ART_CAPTION_SIZE:            return m_caption_size;
+        case wxAUI_ART_CAPTION_TEXT_INDENT:     return m_caption_size;
+        case wxAUI_ART_GRIPPER_SIZE:            return m_gripper_size;
+        case wxAUI_ART_PANE_BORDER_SIZE:        return m_border_size;
+        case wxAUI_ART_PANE_BUTTON_SIZE:        return m_button_size;
+        case wxAUI_ART_PANE_BUTTON_BORDER_SIZE: return m_button_border_size;
+        case wxAUI_ART_GRADIENT_TYPE:           return m_gradient_type;
         default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
     }

@@ -179,12 +183,14 @@
{
     switch (id)
     {
-        case wxAUI_ART_SASH_SIZE:          m_sash_size = new_val; break;
-        case wxAUI_ART_CAPTION_SIZE:       m_caption_size = new_val; break;
-        case wxAUI_ART_GRIPPER_SIZE:       m_gripper_size = new_val; break;
-        case wxAUI_ART_PANE_BORDER_SIZE:   m_border_size = new_val; break;
-        case wxAUI_ART_PANE_BUTTON_SIZE:   m_button_size = new_val; break;
-        case wxAUI_ART_GRADIENT_TYPE:      m_gradient_type = new_val; break;
+        case wxAUI_ART_SASH_SIZE:               m_sash_size = new_val; break;
+        case wxAUI_ART_CAPTION_SIZE:            m_caption_size = new_val; break;
+        case wxAUI_ART_CAPTION_TEXT_INDENT:     m_caption_text_indent = new_val; break;
+        case wxAUI_ART_GRIPPER_SIZE:            m_gripper_size = new_val; break;
+        case wxAUI_ART_PANE_BORDER_SIZE:        m_border_size = new_val; break;
+        case wxAUI_ART_PANE_BUTTON_SIZE:        m_button_size = new_val; break;
+        case wxAUI_ART_PANE_BUTTON_BORDER_SIZE: m_button_border_size = new_val; break;
+        case wxAUI_ART_GRADIENT_TYPE:           m_gradient_type = new_val; break;
         default: wxFAIL_MSG(wxT("Invalid Metric Ordinal")); break;
     }
}
@@ -346,7 +352,7 @@
     dc.GetTextExtent(wxT("ABCDEFHXfgkj"), &w, &h);

     dc.SetClippingRegion(rect);
-    dc.DrawText(text, rect.x+3, rect.y+(rect.height/2)-(h/2)-1);
+    dc.DrawText(text, rect.x+m_caption_text_indent, rect.y+(rect.height/2)-(h/2)-1);
     dc.DestroyClippingRegion();
}

@@ -385,6 +391,7 @@
                                       wxPaneInfo& pane)
{
     wxRect rect = _rect;
+    rect.y += m_button_border_size; // sizer return rect including borders

     if (button_state == wxAUI_BUTTON_STATE_PRESSED)
     {
@@ -1607,6 +1614,7 @@
     int gripper_size = m_art->GetMetric(wxAUI_ART_GRIPPER_SIZE);
     int pane_border_size = m_art->GetMetric(wxAUI_ART_PANE_BORDER_SIZE);
     int pane_button_size = m_art->GetMetric(wxAUI_ART_PANE_BUTTON_SIZE);
+    int pane_button_border_size = m_art->GetMetric(wxAUI_ART_PANE_BUTTON_BORDER_SIZE);

     // find out the orientation of the item (orientation for panes
     // is the same as the dock's orientation)
@@ -1662,8 +1670,10 @@
             wxPaneButton& button = pane.buttons.Item(i);

             sizer_item = caption_sizer->Add(pane_button_size,
-                                            caption_size,
-                                            0, wxEXPAND);
+                                            pane_button_size,
+                                            0,
+                                            wxALIGN_TOP|wxTOP|wxRIGHT|wxBOTTOM,
+                                            pane_button_border_size);

             part.type = wxDockUIPart::typePaneButton;
             part.dock = &dock;


I'll post some screenshots later.
astigsen
Registered User
 
Posts: 8
Joined: Thu Jan 26, 2006 9:06 am

Return to wxAUI Patches & Modifications