like in the other ports. Avoid setting foreground/background color for windows and let the toolkit use the natural color. As an intermediate step font is still explicitly set. Handle the cases where m_foregroundColour, m_backgroundColour ir m_font are not initialized. Set default (overridable) X resources to emulate the old look. Unify wxMOTIF_NEW_FONT_HANDLING with wxMOTIF_USE_RENDER_TABLE. Minor unrelated (sizing) fixes to wxCheckListBox, wxStaticText, wxTextCtrl. Tagged with MOTIF_BEFORE_COLOUR_FONT_INHERITANCE before the changes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45312 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
155 lines
3.9 KiB
C++
155 lines
3.9 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/motif/statbmp.cpp
|
|
// Purpose: wxStaticBitmap
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 17/09/98
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// For compilers that support precompilation, includes "wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#include "wx/statbmp.h"
|
|
|
|
#ifdef __VMS__
|
|
#pragma message disable nosimpint
|
|
#endif
|
|
#include <Xm/Xm.h>
|
|
#include <Xm/Label.h>
|
|
#include <Xm/LabelG.h>
|
|
#ifdef __VMS__
|
|
#pragma message enable nosimpint
|
|
#endif
|
|
|
|
#include "wx/motif/private.h"
|
|
|
|
IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl)
|
|
|
|
/*
|
|
* wxStaticBitmap
|
|
*/
|
|
|
|
bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
|
|
const wxBitmap& bitmap,
|
|
const wxPoint& pos,
|
|
const wxSize& size,
|
|
long style,
|
|
const wxString& name)
|
|
{
|
|
if( !CreateControl( parent, id, pos, size, style, wxDefaultValidator,
|
|
name ) )
|
|
return false;
|
|
PreCreation();
|
|
|
|
m_messageBitmap = bitmap;
|
|
m_messageBitmapOriginal = bitmap;
|
|
|
|
Widget parentWidget = (Widget) parent->GetClientWidget();
|
|
|
|
m_mainWidget = (WXWidget) XtVaCreateManagedWidget ("staticBitmap",
|
|
#if wxUSE_GADGETS
|
|
xmLabelGadgetClass, parentWidget,
|
|
#else
|
|
xmLabelWidgetClass, parentWidget,
|
|
#endif
|
|
XmNalignment, XmALIGNMENT_BEGINNING,
|
|
NULL);
|
|
|
|
wxSize actualSize(size);
|
|
// work around the cases where the bitmap is a wxNull(Icon/Bitmap)
|
|
if (actualSize.x == -1)
|
|
actualSize.x = bitmap.Ok() ? bitmap.GetWidth() : 1;
|
|
if (actualSize.y == -1)
|
|
actualSize.y = bitmap.Ok() ? bitmap.GetHeight() : 1;
|
|
|
|
PostCreation();
|
|
DoSetBitmap();
|
|
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
|
|
pos.x, pos.y, actualSize.x, actualSize.y);
|
|
|
|
return true;
|
|
}
|
|
|
|
wxStaticBitmap::~wxStaticBitmap()
|
|
{
|
|
SetBitmap(wxNullBitmap);
|
|
}
|
|
|
|
void wxStaticBitmap::DoSetBitmap()
|
|
{
|
|
Widget widget = (Widget) m_mainWidget;
|
|
int w2, h2;
|
|
|
|
if (m_messageBitmapOriginal.Ok())
|
|
{
|
|
w2 = m_messageBitmapOriginal.GetWidth();
|
|
h2 = m_messageBitmapOriginal.GetHeight();
|
|
|
|
Pixmap pixmap;
|
|
|
|
// Must re-make the bitmap to have its transparent areas drawn
|
|
// in the current widget background colour.
|
|
if (m_messageBitmapOriginal.GetMask())
|
|
{
|
|
WXPixel backgroundPixel;
|
|
XtVaGetValues( widget, XmNbackground, &backgroundPixel,
|
|
NULL);
|
|
|
|
wxColour col;
|
|
col.SetPixel(backgroundPixel);
|
|
|
|
wxBitmap newBitmap = wxCreateMaskedBitmap(m_messageBitmapOriginal, col);
|
|
m_messageBitmap = newBitmap;
|
|
|
|
pixmap = (Pixmap) m_messageBitmap.GetDrawable();
|
|
}
|
|
else
|
|
{
|
|
m_bitmapCache.SetBitmap( m_messageBitmap );
|
|
pixmap = (Pixmap)m_bitmapCache.GetLabelPixmap(widget);
|
|
}
|
|
|
|
XtVaSetValues (widget,
|
|
XmNlabelPixmap, pixmap,
|
|
XmNlabelType, XmPIXMAP,
|
|
NULL);
|
|
|
|
SetSize(w2, h2);
|
|
}
|
|
else
|
|
{
|
|
// Null bitmap: must not use current pixmap
|
|
// since it is no longer valid.
|
|
XtVaSetValues (widget,
|
|
XmNlabelType, XmSTRING,
|
|
XmNlabelPixmap, XmUNSPECIFIED_PIXMAP,
|
|
NULL);
|
|
}
|
|
}
|
|
|
|
void wxStaticBitmap::SetBitmap(const wxBitmap& bitmap)
|
|
{
|
|
m_messageBitmap = bitmap;
|
|
m_messageBitmapOriginal = bitmap;
|
|
|
|
DoSetBitmap();
|
|
}
|
|
|
|
void wxStaticBitmap::ChangeBackgroundColour()
|
|
{
|
|
wxWindow::ChangeBackgroundColour();
|
|
|
|
// must recalculate the background colour
|
|
m_bitmapCache.SetColoursChanged();
|
|
DoSetBitmap();
|
|
}
|
|
|
|
void wxStaticBitmap::ChangeForegroundColour()
|
|
{
|
|
m_bitmapCache.SetColoursChanged();
|
|
wxWindow::ChangeForegroundColour();
|
|
}
|