]> git.saurik.com Git - wxWidgets.git/blame - src/univ/bmpbuttn.cpp
Yielding from a non-gui thread needs to bail out, otherwise we end up
[wxWidgets.git] / src / univ / bmpbuttn.cpp
CommitLineData
1e6feb95 1/////////////////////////////////////////////////////////////////////////////
910b0053 2// Name: src/univ/bmpbuttn.cpp
1e6feb95
VZ
3// Purpose: wxBitmapButton implementation
4// Author: Vadim Zeitlin
5// Modified by:
6// Created: 25.08.00
7// RCS-ID: $Id$
442b35b5 8// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
65571936 9// Licence: wxWindows licence
1e6feb95
VZ
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
1e6feb95
VZ
20#include "wx/wxprec.h"
21
22#ifdef __BORLANDC__
23 #pragma hdrstop
24#endif
25
26#if wxUSE_BMPBUTTON
27
910b0053
WS
28#include "wx/bmpbuttn.h"
29
1e6feb95
VZ
30#ifndef WX_PRECOMP
31 #include "wx/dc.h"
1e6feb95
VZ
32 #include "wx/validate.h"
33#endif
34
35#include "wx/univ/renderer.h"
36
37// ============================================================================
38// implementation
39// ============================================================================
40
41IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
42
43BEGIN_EVENT_TABLE(wxBitmapButton, wxButton)
44 EVT_SET_FOCUS(wxBitmapButton::OnSetFocus)
45 EVT_KILL_FOCUS(wxBitmapButton::OnKillFocus)
46END_EVENT_TABLE()
47
48// ----------------------------------------------------------------------------
49// wxBitmapButton
50// ----------------------------------------------------------------------------
51
52bool wxBitmapButton::Create(wxWindow *parent,
53 wxWindowID id,
54 const wxBitmap& bitmap,
55 const wxPoint &pos,
56 const wxSize &size,
57 long style,
58 const wxValidator& validator,
59 const wxString &name)
60{
ef2f095a
VZ
61 // we add wxBU_EXACTFIT because the bitmap buttons are not the standard
62 // ones and so shouldn't be forced to be of the standard size which is
63 // typically too big for them
0966aee3 64 if ( !wxButton::Create(parent, id, bitmap, wxEmptyString,
ef2f095a 65 pos, size, style | wxBU_EXACTFIT, validator, name) )
a290fa5a 66 return false;
1e6feb95
VZ
67
68 m_bmpNormal = bitmap;
69
a290fa5a 70 return true;
1e6feb95
VZ
71}
72
73void wxBitmapButton::OnSetBitmap()
74{
75 wxBitmap bmp;
76 if ( !IsEnabled() )
77 {
78 bmp = m_bmpDisabled;
79 }
80 else if ( IsPressed() )
81 {
82 bmp = m_bmpSelected;
83 }
84 else if ( IsFocused() )
85 {
86 bmp = m_bmpFocus;
87 }
88 else
89 {
90 bmp = m_bmpNormal;
91 }
92
93 ChangeBitmap(bmp);
94}
95
96bool wxBitmapButton::ChangeBitmap(const wxBitmap& bmp)
97{
98 wxBitmap bitmap = bmp.Ok() ? bmp : m_bmpNormal;
d6dc5c6f
VZ
99 if ( bitmap.IsSameAs(m_bitmap) )
100 return false;
1e6feb95 101
d6dc5c6f 102 m_bitmap = bitmap;
1e6feb95 103
d6dc5c6f 104 return true;
1e6feb95
VZ
105}
106
107bool wxBitmapButton::Enable(bool enable)
108{
109 if ( !wxButton::Enable(enable) )
a290fa5a 110 return false;
1e6feb95
VZ
111
112 if ( !enable && ChangeBitmap(m_bmpDisabled) )
113 Refresh();
114
a290fa5a 115 return true;
1e6feb95
VZ
116}
117
118bool wxBitmapButton::SetCurrent(bool doit)
119{
120 ChangeBitmap(doit ? m_bmpFocus : m_bmpNormal);
121
122 return wxButton::SetCurrent(doit);
123}
124
125void wxBitmapButton::OnSetFocus(wxFocusEvent& event)
126{
127 if ( ChangeBitmap(m_bmpFocus) )
128 Refresh();
129
130 event.Skip();
131}
132
133void wxBitmapButton::OnKillFocus(wxFocusEvent& event)
134{
135 if ( ChangeBitmap(m_bmpNormal) )
136 Refresh();
137
138 event.Skip();
139}
140
141void wxBitmapButton::Press()
142{
143 ChangeBitmap(m_bmpSelected);
144
145 wxButton::Press();
146}
147
148void wxBitmapButton::Release()
149{
150 ChangeBitmap(IsFocused() ? m_bmpFocus : m_bmpNormal);
151
152 wxButton::Release();
153}
154
155#endif // wxUSE_BMPBUTTON