corrections to size calculations for state images (see #9591)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58407 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-01-25 18:20:26 +00:00
parent 0a03dc7a13
commit 136b7e61f5

View File

@@ -853,33 +853,27 @@ wxGenericTreeItem::DoCalculateSize(wxGenericTreeCtrl* control,
int text_h = m_heightText + 2; int text_h = m_heightText + 2;
int image_h = 0; int image_h = 0, image_w = 0;
int image_w = 0;
int image = GetCurrentImage(); int image = GetCurrentImage();
if ( image != NO_IMAGE ) if ( image != NO_IMAGE && control->m_imageListNormal )
{ {
if ( control->m_imageListNormal ) control->m_imageListNormal->GetSize(image, image_w, image_h);
{ image_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
control->m_imageListNormal->GetSize( image, image_w, image_h );
image_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
}
} }
int state_h = 0, state_w = 0; int state_h = 0, state_w = 0;
int state = GetState(); int state = GetState();
if ( state != wxTREE_ITEMSTATE_NONE ) if ( state != wxTREE_ITEMSTATE_NONE && control->m_imageListState )
{ {
if ( control->m_imageListState ) control->m_imageListState->GetSize(state, state_w, state_h);
{ if ( image_w != 0 )
control->m_imageListState->GetSize( state, state_w, state_h ); state_w += MARGIN_BETWEEN_STATE_AND_IMAGE;
if ( image != NO_IMAGE ) else
state_w += MARGIN_BETWEEN_STATE_AND_IMAGE; state_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
else
state_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
}
} }
m_height = (image_h > text_h) ? image_h : text_h; int img_h = wxMax(state_h, image_h);
m_height = wxMax(img_h, text_h);
if (m_height < 30) if (m_height < 30)
m_height += 2; // at least 2 pixels m_height += 2; // at least 2 pixels
@@ -2474,7 +2468,7 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
{ {
if ( m_imageListNormal ) if ( m_imageListNormal )
{ {
m_imageListNormal->GetSize( image, image_w, image_h ); m_imageListNormal->GetSize(image, image_w, image_h);
image_w += MARGIN_BETWEEN_IMAGE_AND_TEXT; image_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
} }
else else
@@ -2489,8 +2483,8 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
{ {
if ( m_imageListState ) if ( m_imageListState )
{ {
m_imageListState->GetSize( state, state_w, state_h ); m_imageListState->GetSize(state, state_w, state_h);
if ( image != NO_IMAGE ) if ( image_w != 0 )
state_w += MARGIN_BETWEEN_STATE_AND_IMAGE; state_w += MARGIN_BETWEEN_STATE_AND_IMAGE;
else else
state_w += MARGIN_BETWEEN_IMAGE_AND_TEXT; state_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
@@ -2587,8 +2581,10 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
// except for custom item backgrounds, works for both kinds of theme. // except for custom item backgrounds, works for both kinds of theme.
else if (drawItemBackground) else if (drawItemBackground)
{ {
wxRect rect( item->GetX()-2, item->GetY()+offset, wxRect rect( item->GetX() + state_w + image_w - 2,
item->GetWidth()+2, total_h-offset ); item->GetY() + offset,
item->GetWidth() - state_w - image_w + 2,
total_h - offset );
if ( hasBgColour ) if ( hasBgColour )
{ {
dc.DrawRectangle( rect ); dc.DrawRectangle( rect );
@@ -3336,15 +3332,28 @@ bool wxGenericTreeCtrl::GetBoundingRect(const wxTreeItemId& item,
if ( textOnly ) if ( textOnly )
{ {
rect.x = i->GetX(); int image_h = 0, image_w = 0;
rect.width = i->GetWidth(); int image = ((wxGenericTreeItem*) item.m_pItem)->GetCurrentImage();
if ( image != NO_IMAGE && m_imageListNormal )
if ( m_imageListNormal )
{ {
int image_w, image_h; m_imageListNormal->GetSize( image, image_w, image_h );
m_imageListNormal->GetSize( 0, image_w, image_h ); image_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
rect.width += image_w + MARGIN_BETWEEN_IMAGE_AND_TEXT;
} }
int state_h = 0, state_w = 0;
int state = ((wxGenericTreeItem*) item.m_pItem)->GetState();
if ( state != wxTREE_ITEMSTATE_NONE && m_imageListState )
{
m_imageListState->GetSize( state, state_w, state_h );
if ( image_w != 0 )
state_w += MARGIN_BETWEEN_STATE_AND_IMAGE;
else
state_w += MARGIN_BETWEEN_IMAGE_AND_TEXT;
}
rect.x = i->GetX() + state_w + image_w;
rect.width = i->GetWidth() - state_w - image_w;
} }
else // the entire line else // the entire line
{ {