Improvements for splitter sash hack. GTK2 look

good now, GTK1.2 jumps two pixels for some
    reason.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25673 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2004-02-08 23:00:53 +00:00
parent 0fe2cb22d5
commit 35468934e0
2 changed files with 82 additions and 46 deletions

View File

@@ -177,10 +177,10 @@ wxRendererGTK::DrawTreeItemButton(wxWindow* WXUNUSED(win),
static const wxCoord SASH_FULL_SIZE = 5; static const wxCoord SASH_FULL_SIZE = 5;
#else // GTK+ 1.x #else // GTK+ 1.x
// the full sash width (should be even) // the full sash width (should be even)
static const wxCoord SASH_SIZE = 10; static const wxCoord SASH_SIZE = 8;
// margin around the sash // margin around the sash
static const wxCoord SASH_MARGIN = 5; static const wxCoord SASH_MARGIN = 2;
// the full sash size // the full sash size
static const wxCoord SASH_FULL_SIZE = SASH_SIZE + SASH_MARGIN; static const wxCoord SASH_FULL_SIZE = SASH_SIZE + SASH_MARGIN;
@@ -229,21 +229,55 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win,
const bool isVert = orient == wxVERTICAL; const bool isVert = orient == wxVERTICAL;
GdkRectangle rect; GdkRectangle rect;
GdkRectangle erase_rect;
if ( isVert ) if ( isVert )
{ {
int h = win->GetClientSize().GetHeight();
rect.x = position; rect.x = position;
rect.y = 0; rect.y = h/2 - 14/2;
rect.width = SASH_FULL_SIZE; rect.width = SASH_FULL_SIZE;
rect.height = size.y; rect.height = 14;
erase_rect.x = position;
erase_rect.y = 0;
erase_rect.width = SASH_FULL_SIZE;
erase_rect.height = h;
} }
else // horz else // horz
{ {
rect.x = 0; int w = win->GetClientSize().GetWidth();
rect.x = w/2 - 14/2;
rect.y = position; rect.y = position;
rect.height = SASH_FULL_SIZE; rect.height = SASH_FULL_SIZE;
rect.width = size.x; rect.width = 14;
erase_rect.y = position;
erase_rect.x = 0;
erase_rect.height = SASH_FULL_SIZE;
erase_rect.width = w;
} }
// we must erase everything first, otherwise the garbage from the old sash
// is left when dragging it
//
// TODO: is this the right way to draw themed background?
gtk_paint_flat_box
(
win->m_wxwindow->style,
GTK_PIZZA(win->m_wxwindow)->bin_window,
GTK_STATE_NORMAL,
GTK_SHADOW_NONE,
NULL,
win->m_wxwindow,
(char *)"base", // const_cast
erase_rect.x,
erase_rect.y,
erase_rect.width,
erase_rect.height
);
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gtk_paint_handle gtk_paint_handle
( (
@@ -258,25 +292,9 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win,
rect.y, rect.y,
rect.width, rect.width,
rect.height, rect.height,
isVert ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL !isVert ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL
); );
#else // GTK+ 1.x #else // GTK+ 1.x
// we must erase everything first, otherwise the garbage from the old sash
// is left when dragging it
//
// TODO: is this the right way to draw themed background?
gtk_paint_flat_box
(
win->m_wxwindow->style,
GTK_PIZZA(win->m_wxwindow)->bin_window,
GTK_STATE_NORMAL,
GTK_SHADOW_NONE,
&rect,
win->m_wxwindow,
(char *)"base", // const_cast
0, 0, -1, -1
);
// leave some margin before sash itself // leave some margin before sash itself
position += SASH_MARGIN / 2; position += SASH_MARGIN / 2;

View File

@@ -177,10 +177,10 @@ wxRendererGTK::DrawTreeItemButton(wxWindow* WXUNUSED(win),
static const wxCoord SASH_FULL_SIZE = 5; static const wxCoord SASH_FULL_SIZE = 5;
#else // GTK+ 1.x #else // GTK+ 1.x
// the full sash width (should be even) // the full sash width (should be even)
static const wxCoord SASH_SIZE = 10; static const wxCoord SASH_SIZE = 8;
// margin around the sash // margin around the sash
static const wxCoord SASH_MARGIN = 5; static const wxCoord SASH_MARGIN = 2;
// the full sash size // the full sash size
static const wxCoord SASH_FULL_SIZE = SASH_SIZE + SASH_MARGIN; static const wxCoord SASH_FULL_SIZE = SASH_SIZE + SASH_MARGIN;
@@ -229,21 +229,55 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win,
const bool isVert = orient == wxVERTICAL; const bool isVert = orient == wxVERTICAL;
GdkRectangle rect; GdkRectangle rect;
GdkRectangle erase_rect;
if ( isVert ) if ( isVert )
{ {
int h = win->GetClientSize().GetHeight();
rect.x = position; rect.x = position;
rect.y = 0; rect.y = h/2 - 14/2;
rect.width = SASH_FULL_SIZE; rect.width = SASH_FULL_SIZE;
rect.height = size.y; rect.height = 14;
erase_rect.x = position;
erase_rect.y = 0;
erase_rect.width = SASH_FULL_SIZE;
erase_rect.height = h;
} }
else // horz else // horz
{ {
rect.x = 0; int w = win->GetClientSize().GetWidth();
rect.x = w/2 - 14/2;
rect.y = position; rect.y = position;
rect.height = SASH_FULL_SIZE; rect.height = SASH_FULL_SIZE;
rect.width = size.x; rect.width = 14;
erase_rect.y = position;
erase_rect.x = 0;
erase_rect.height = SASH_FULL_SIZE;
erase_rect.width = w;
} }
// we must erase everything first, otherwise the garbage from the old sash
// is left when dragging it
//
// TODO: is this the right way to draw themed background?
gtk_paint_flat_box
(
win->m_wxwindow->style,
GTK_PIZZA(win->m_wxwindow)->bin_window,
GTK_STATE_NORMAL,
GTK_SHADOW_NONE,
NULL,
win->m_wxwindow,
(char *)"base", // const_cast
erase_rect.x,
erase_rect.y,
erase_rect.width,
erase_rect.height
);
#ifdef __WXGTK20__ #ifdef __WXGTK20__
gtk_paint_handle gtk_paint_handle
( (
@@ -258,25 +292,9 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win,
rect.y, rect.y,
rect.width, rect.width,
rect.height, rect.height,
isVert ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL !isVert ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL
); );
#else // GTK+ 1.x #else // GTK+ 1.x
// we must erase everything first, otherwise the garbage from the old sash
// is left when dragging it
//
// TODO: is this the right way to draw themed background?
gtk_paint_flat_box
(
win->m_wxwindow->style,
GTK_PIZZA(win->m_wxwindow)->bin_window,
GTK_STATE_NORMAL,
GTK_SHADOW_NONE,
&rect,
win->m_wxwindow,
(char *)"base", // const_cast
0, 0, -1, -1
);
// leave some margin before sash itself // leave some margin before sash itself
position += SASH_MARGIN / 2; position += SASH_MARGIN / 2;