Files
wxWidgets/src/univ/button.cpp
Maarten Bent 462f2a4686 Add optional wxWindow parameter to wxButtonBase::GetDefaultSize()
When per-monitor DPI is used, the default button size depends on the DPI of the
display. Use the window to determine this DPI.
2019-09-06 20:59:59 +02:00

181 lines
4.9 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/univ/button.cpp
// Purpose: wxButton
// Author: Vadim Zeitlin
// Modified by:
// Created: 14.08.00
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_BUTTON
#ifndef WX_PRECOMP
#include "wx/dcclient.h"
#include "wx/dcscreen.h"
#include "wx/button.h"
#include "wx/validate.h"
#include "wx/settings.h"
#endif
#include "wx/stockitem.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
// default margins around the image
static const wxCoord DEFAULT_BTN_MARGIN_X = 0; // We should give space for the border, at least.
static const wxCoord DEFAULT_BTN_MARGIN_Y = 0;
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// creation
// ----------------------------------------------------------------------------
void wxButton::Init()
{
m_isPressed =
m_isDefault = false;
}
bool wxButton::Create(wxWindow *parent,
wxWindowID id,
const wxBitmap& bitmap,
const wxString &lbl,
const wxPoint &pos,
const wxSize &size,
long style,
const wxValidator& validator,
const wxString &name)
{
wxString label(lbl);
if (label.empty() && wxIsStockID(id))
label = wxGetStockLabel(id);
long ctrl_style = style & ~wxBU_ALIGN_MASK;
ctrl_style = ctrl_style & ~wxALIGN_MASK;
if((style & wxBU_RIGHT) == wxBU_RIGHT)
ctrl_style |= wxALIGN_RIGHT;
else if((style & wxBU_LEFT) == wxBU_LEFT)
ctrl_style |= wxALIGN_LEFT;
else
ctrl_style |= wxALIGN_CENTRE_HORIZONTAL;
if((style & wxBU_TOP) == wxBU_TOP)
ctrl_style |= wxALIGN_TOP;
else if((style & wxBU_BOTTOM) == wxBU_BOTTOM)
ctrl_style |= wxALIGN_BOTTOM;
else
ctrl_style |= wxALIGN_CENTRE_VERTICAL;
if ( !wxControl::Create(parent, id, pos, size, ctrl_style, validator, name) )
return false;
SetLabel(label);
if (bitmap.IsOk())
SetBitmap(bitmap); // SetInitialSize called by SetBitmap()
else
SetInitialSize(size);
CreateInputHandler(wxINP_HANDLER_BUTTON);
return true;
}
wxButton::~wxButton()
{
}
// ----------------------------------------------------------------------------
// size management
// ----------------------------------------------------------------------------
/* static */
wxSize wxButtonBase::GetDefaultSize(wxWindow* WXUNUSED(win))
{
static wxSize s_sizeBtn;
if ( s_sizeBtn.x == 0 )
{
wxScreenDC dc;
// this corresponds more or less to wxMSW standard in Win32 theme (see
// wxWin32Renderer::AdjustSize())
// s_sizeBtn.x = 8*dc.GetCharWidth();
// s_sizeBtn.y = (11*dc.GetCharHeight())/10 + 2;
// Otto Wyss, Patch 664399
s_sizeBtn.x = dc.GetCharWidth()*10 + 2;
s_sizeBtn.y = dc.GetCharHeight()*11/10 + 2;
}
return s_sizeBtn;
}
// ----------------------------------------------------------------------------
// input processing
// ----------------------------------------------------------------------------
void wxButton::Click()
{
wxCommandEvent event(wxEVT_BUTTON, GetId());
InitCommandEvent(event);
Command(event);
}
// ----------------------------------------------------------------------------
// misc
// ----------------------------------------------------------------------------
wxBitmap wxButton::DoGetBitmap(State WXUNUSED(which)) const
{
return m_bitmap;
}
void wxButton::DoSetBitmap(const wxBitmap& bitmap, State which)
{
// we support only one bitmap right now, although this wouldn't be
// difficult to change
if ( which == State_Normal )
m_bitmap = bitmap;
SetBitmapMargins(DEFAULT_BTN_MARGIN_X, DEFAULT_BTN_MARGIN_Y);
}
void wxButton::DoSetBitmapMargins(wxCoord x, wxCoord y)
{
m_marginBmpX = x + 2;
m_marginBmpY = y + 2;
SetInitialSize(wxDefaultSize);
}
wxWindow *wxButton::SetDefault()
{
m_isDefault = true;
return wxButtonBase::SetDefault();
}
#endif // wxUSE_BUTTON