#pragma hdrstop
#endif
-#include "wx/defs.h"
-
#if wxUSE_IMAGE
#include "wx/image.h"
-#include "wx/brush.h"
-#include "wx/pen.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/brush.h"
+#endif
// DoFloodFill
// Fills with the colour extracted from fillBrush, starting at x,y until either
}
#if wxUSE_IMAGE
+
wxCursor::wxCursor( const wxImage & image )
{
unsigned char * rgbBits = image.GetData();
- int w = image.GetWidth() ;
- int h = image.GetHeight() ;
- bool bHasMask = image.HasMask() ;
+ int w = image.GetWidth() ;
+ int h = image.GetHeight();
+ bool bHasMask = image.HasMask();
int imagebitcount = (w*h)/8;
- unsigned char r, g, b ;
unsigned char * bits = new unsigned char [imagebitcount];
unsigned char * maskBits = new unsigned char [imagebitcount];
- int i,j, i8; unsigned char c, cMask;
+ int i, j, i8; unsigned char c, cMask;
for (i=0; i<imagebitcount; i++)
- {
+ {
bits[i] = 0;
i8 = i * 8;
cMask = 1;
for (j=0; j<8; j++)
- {
- // possible overflow if we do the summation first ?
- c = rgbBits[(i8+j)*3]/3 + rgbBits[(i8+j)*3+1]/3 + rgbBits[(i8+j)*3+2]/3 ;
- //if average value is > mid grey
- if (c>127)
- bits[i] = bits[i] | cMask ;
- cMask = cMask * 2 ;
- }
+ {
+ // possible overflow if we do the summation first ?
+ c = rgbBits[(i8+j)*3]/3 + rgbBits[(i8+j)*3+1]/3 + rgbBits[(i8+j)*3+2]/3;
+ //if average value is > mid grey
+ if (c>127)
+ bits[i] = bits[i] | cMask;
+ cMask = cMask * 2;
}
+ }
+
+ unsigned long keyMaskColor;
if (bHasMask)
- {
- r = image.GetMaskRed() ;
- g = image.GetMaskGreen() ;
- b = image.GetMaskBlue() ;
+ {
+ unsigned char
+ r = image.GetMaskRed(),
+ g = image.GetMaskGreen(),
+ b = image.GetMaskBlue();
for (i=0; i<imagebitcount; i++)
{
- maskBits[i] = 0x0;
- i8 = i * 8;
+ maskBits[i] = 0x0;
+ i8 = i * 8;
- cMask = 1;
- for (j=0; j<8; j++)
- {
- if (rgbBits[(i8+j)*3] != r || rgbBits[(i8+j)*3+1] != g || rgbBits[(i8+j)*3+2] != b)
- maskBits[i] = maskBits[i] | cMask ;
- cMask = cMask * 2 ;
- }
- }
+ cMask = 1;
+ for (j=0; j<8; j++)
+ {
+ if (rgbBits[(i8+j)*3] != r || rgbBits[(i8+j)*3+1] != g || rgbBits[(i8+j)*3+2] != b)
+ maskBits[i] = maskBits[i] | cMask;
+ cMask = cMask * 2;
+ }
}
- else
- {
+
+ keyMaskColor = (r << 16) | (g << 8) | b;
+ }
+ else // no mask
+ {
for (i=0; i<imagebitcount; i++)
- maskBits[i]= 0xFF ;
- }
- //find the most frequent color(s)
- //it seems a waste of effort to copy the image
- //but otherwise we need to remove the const modifier ??
+ maskBits[i] = 0xFF;
+
+ // init it to avoid compiler warnings
+ keyMaskColor = 0;
+ }
+
+ // find the most frequent color(s) it seems a waste of effort to copy the
+ // image but otherwise we need to remove the const modifier ??
wxImage tmpImage = image.Copy();
wxImageHistogram histogram;
- //colors as rrggbb
+ // colors as rrggbb
unsigned long key;
unsigned long value;
- unsigned long keyMaskColor = 0;
- if (bHasMask)
- keyMaskColor = (r << 16) | (g << 8) | b;
tmpImage.ComputeHistogram(histogram);
wxColour fg = wxColour ( (unsigned char)(MostFreqCol >> 16),
(unsigned char)(MostFreqCol >> 8),
- (unsigned char)(MostFreqCol) ) ;
+ (unsigned char)(MostFreqCol) );
wxColour bg = wxColour ( (unsigned char)(NextFreqCol >> 16),
(unsigned char)(NextFreqCol >> 8),
- (unsigned char)(NextFreqCol) ) ;
+ (unsigned char)(NextFreqCol) );
int hotSpotX=0;
int hotSpotY=0;
gdk_bitmap_unref( data );
gdk_bitmap_unref( mask );
- delete [] bits ;
+ delete [] bits;
delete [] maskBits;
}
-#endif
+
+#endif // wxUSE_IMAGE
wxCursor::~wxCursor()
{
#include "wx/utils.h"
#include "wx/dialog.h"
#include "wx/msgdlg.h"
+#include "wx/module.h"
#if wxUSE_DRAG_AND_DROP
#include "wx/dnd.h"
#endif // wxUSE_CARET
#if wxUSE_TEXTCTRL
-#include "wx/textctrl.h"
+ #include "wx/textctrl.h"
#endif
#include "wx/menu.h"
#ifdef __WXGTK20__
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
-
-#endif
+
+#endif
return TRUE;
}
// Actual redrawing takes place in idle time.
win->Update();
-
+
#ifdef __WXGTK20__
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
-
-#endif
+
+#endif
return TRUE;
}
win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
// Actual redrawing takes place in idle time.
-
+
win->Update();
#ifndef __WXUNIVERSAL__
m_vAdjust = gtk_range_get_adjustment( GTK_RANGE(scrolledWindow->vscrollbar) );
m_wxwindow = gtk_pizza_new();
-
+
#ifndef __WXUNIVERSAL__
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
#ifndef __WXGTK20__
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
-
+
if (HasFlag(wxNO_FULL_REPAINT_ON_RESIZE))
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event",
{
// Update invalidated regions.
Update();
-
+
// Synthetize activate events.
if ( g_sendActivateEvent != -1 )
{
{
wxWindowDC dc( (wxWindow*)this );
dc.SetClippingRegion( m_clearRegion );
-
+
wxEraseEvent erase_event( GetId(), &dc );
erase_event.SetEventObject( this );
-
+
if (!GetEventHandler()->ProcessEvent(erase_event))
{
gdk_gc_set_foreground( g_eraseGC, m_backgroundColour.GetColor() );
-
+
wxRegionIterator upd( m_clearRegion );
while (upd)
{
// The following code will result in all window-less widgets
// being redrawn because the wxWindows class is allowed to
// paint over the window-less widgets.
-
+
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
-
+
GList *children = pizza->children;
while (children)
{
{
// Get intersection of widget area and update region
wxRegion region( m_updateRegion );
-
+
GdkEventExpose gdk_event;
gdk_event.type = GDK_EXPOSE;
gdk_event.window = pizza->bin_window;
gdk_event.count = 0;
-
+
wxRegionIterator upd( m_updateRegion );
while (upd)
{
rect.y = upd.GetY();
rect.width = upd.GetWidth();
rect.height = upd.GetHeight();
-
+
if (gtk_widget_intersect (child->widget, &rect, &gdk_event.area))
{
gtk_widget_event (child->widget, (GdkEvent*) &gdk_event);
}
-
+
upd ++;
}
}
// No scrolling requested.
if ((dx == 0) && (dy == 0)) return;
-
+
#ifndef __WXGTK20__
if (!m_updateRegion.IsEmpty())
{
m_updateRegion.Offset( dx, dy );
-
+
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
m_updateRegion.Intersect( 0, 0, cw, ch );
}
-
+
if (!m_clearRegion.IsEmpty())
{
m_clearRegion.Offset( dx, dy );
-
+
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
m_clearRegion.Intersect( 0, 0, cw, ch );
}
-
+
m_clipPaintRegion = TRUE;
-
+
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
-
+
m_clipPaintRegion = FALSE;
#else
gdk_window_scroll( GTK_PIZZA(m_wxwindow)->bin_window, dx, dy );
-
+
GTK_PIZZA(m_wxwindow)->xoffset += dx;
GTK_PIZZA(m_wxwindow)->yoffset += dy;
-
-#endif
-
+
+#endif
+
}
{
g_eraseGC = gdk_gc_new( GDK_ROOT_PARENT() );
gdk_gc_set_fill( g_eraseGC, GDK_SOLID );
-
+
return TRUE;
}
}
#if wxUSE_IMAGE
+
wxCursor::wxCursor( const wxImage & image )
{
unsigned char * rgbBits = image.GetData();
- int w = image.GetWidth() ;
- int h = image.GetHeight() ;
- bool bHasMask = image.HasMask() ;
+ int w = image.GetWidth() ;
+ int h = image.GetHeight();
+ bool bHasMask = image.HasMask();
int imagebitcount = (w*h)/8;
- unsigned char r, g, b ;
unsigned char * bits = new unsigned char [imagebitcount];
unsigned char * maskBits = new unsigned char [imagebitcount];
- int i,j, i8; unsigned char c, cMask;
+ int i, j, i8; unsigned char c, cMask;
for (i=0; i<imagebitcount; i++)
- {
+ {
bits[i] = 0;
i8 = i * 8;
cMask = 1;
for (j=0; j<8; j++)
- {
- // possible overflow if we do the summation first ?
- c = rgbBits[(i8+j)*3]/3 + rgbBits[(i8+j)*3+1]/3 + rgbBits[(i8+j)*3+2]/3 ;
- //if average value is > mid grey
- if (c>127)
- bits[i] = bits[i] | cMask ;
- cMask = cMask * 2 ;
- }
+ {
+ // possible overflow if we do the summation first ?
+ c = rgbBits[(i8+j)*3]/3 + rgbBits[(i8+j)*3+1]/3 + rgbBits[(i8+j)*3+2]/3;
+ //if average value is > mid grey
+ if (c>127)
+ bits[i] = bits[i] | cMask;
+ cMask = cMask * 2;
}
+ }
+
+ unsigned long keyMaskColor;
if (bHasMask)
- {
- r = image.GetMaskRed() ;
- g = image.GetMaskGreen() ;
- b = image.GetMaskBlue() ;
+ {
+ unsigned char
+ r = image.GetMaskRed(),
+ g = image.GetMaskGreen(),
+ b = image.GetMaskBlue();
for (i=0; i<imagebitcount; i++)
{
- maskBits[i] = 0x0;
- i8 = i * 8;
+ maskBits[i] = 0x0;
+ i8 = i * 8;
- cMask = 1;
- for (j=0; j<8; j++)
- {
- if (rgbBits[(i8+j)*3] != r || rgbBits[(i8+j)*3+1] != g || rgbBits[(i8+j)*3+2] != b)
- maskBits[i] = maskBits[i] | cMask ;
- cMask = cMask * 2 ;
- }
- }
+ cMask = 1;
+ for (j=0; j<8; j++)
+ {
+ if (rgbBits[(i8+j)*3] != r || rgbBits[(i8+j)*3+1] != g || rgbBits[(i8+j)*3+2] != b)
+ maskBits[i] = maskBits[i] | cMask;
+ cMask = cMask * 2;
+ }
}
- else
- {
+
+ keyMaskColor = (r << 16) | (g << 8) | b;
+ }
+ else // no mask
+ {
for (i=0; i<imagebitcount; i++)
- maskBits[i]= 0xFF ;
- }
- //find the most frequent color(s)
- //it seems a waste of effort to copy the image
- //but otherwise we need to remove the const modifier ??
+ maskBits[i] = 0xFF;
+
+ // init it to avoid compiler warnings
+ keyMaskColor = 0;
+ }
+
+ // find the most frequent color(s) it seems a waste of effort to copy the
+ // image but otherwise we need to remove the const modifier ??
wxImage tmpImage = image.Copy();
wxImageHistogram histogram;
- //colors as rrggbb
+ // colors as rrggbb
unsigned long key;
unsigned long value;
- unsigned long keyMaskColor = 0;
- if (bHasMask)
- keyMaskColor = (r << 16) | (g << 8) | b;
tmpImage.ComputeHistogram(histogram);
wxColour fg = wxColour ( (unsigned char)(MostFreqCol >> 16),
(unsigned char)(MostFreqCol >> 8),
- (unsigned char)(MostFreqCol) ) ;
+ (unsigned char)(MostFreqCol) );
wxColour bg = wxColour ( (unsigned char)(NextFreqCol >> 16),
(unsigned char)(NextFreqCol >> 8),
- (unsigned char)(NextFreqCol) ) ;
+ (unsigned char)(NextFreqCol) );
int hotSpotX=0;
int hotSpotY=0;
gdk_bitmap_unref( data );
gdk_bitmap_unref( mask );
- delete [] bits ;
+ delete [] bits;
delete [] maskBits;
}
-#endif
+
+#endif // wxUSE_IMAGE
wxCursor::~wxCursor()
{
#include "wx/utils.h"
#include "wx/dialog.h"
#include "wx/msgdlg.h"
+#include "wx/module.h"
#if wxUSE_DRAG_AND_DROP
#include "wx/dnd.h"
#endif // wxUSE_CARET
#if wxUSE_TEXTCTRL
-#include "wx/textctrl.h"
+ #include "wx/textctrl.h"
#endif
#include "wx/menu.h"
#ifdef __WXGTK20__
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
-
-#endif
+
+#endif
return TRUE;
}
// Actual redrawing takes place in idle time.
win->Update();
-
+
#ifdef __WXGTK20__
(* GTK_WIDGET_CLASS (pizza_parent_class)->expose_event) (widget, gdk_event);
-
-#endif
+
+#endif
return TRUE;
}
win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height );
// Actual redrawing takes place in idle time.
-
+
win->Update();
#ifndef __WXUNIVERSAL__
m_vAdjust = gtk_range_get_adjustment( GTK_RANGE(scrolledWindow->vscrollbar) );
m_wxwindow = gtk_pizza_new();
-
+
#ifndef __WXUNIVERSAL__
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
#ifndef __WXGTK20__
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw",
GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this );
-
+
if (HasFlag(wxNO_FULL_REPAINT_ON_RESIZE))
{
gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event",
{
// Update invalidated regions.
Update();
-
+
// Synthetize activate events.
if ( g_sendActivateEvent != -1 )
{
{
wxWindowDC dc( (wxWindow*)this );
dc.SetClippingRegion( m_clearRegion );
-
+
wxEraseEvent erase_event( GetId(), &dc );
erase_event.SetEventObject( this );
-
+
if (!GetEventHandler()->ProcessEvent(erase_event))
{
gdk_gc_set_foreground( g_eraseGC, m_backgroundColour.GetColor() );
-
+
wxRegionIterator upd( m_clearRegion );
while (upd)
{
// The following code will result in all window-less widgets
// being redrawn because the wxWindows class is allowed to
// paint over the window-less widgets.
-
+
GtkPizza *pizza = GTK_PIZZA(m_wxwindow);
-
+
GList *children = pizza->children;
while (children)
{
{
// Get intersection of widget area and update region
wxRegion region( m_updateRegion );
-
+
GdkEventExpose gdk_event;
gdk_event.type = GDK_EXPOSE;
gdk_event.window = pizza->bin_window;
gdk_event.count = 0;
-
+
wxRegionIterator upd( m_updateRegion );
while (upd)
{
rect.y = upd.GetY();
rect.width = upd.GetWidth();
rect.height = upd.GetHeight();
-
+
if (gtk_widget_intersect (child->widget, &rect, &gdk_event.area))
{
gtk_widget_event (child->widget, (GdkEvent*) &gdk_event);
}
-
+
upd ++;
}
}
// No scrolling requested.
if ((dx == 0) && (dy == 0)) return;
-
+
#ifndef __WXGTK20__
if (!m_updateRegion.IsEmpty())
{
m_updateRegion.Offset( dx, dy );
-
+
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
m_updateRegion.Intersect( 0, 0, cw, ch );
}
-
+
if (!m_clearRegion.IsEmpty())
{
m_clearRegion.Offset( dx, dy );
-
+
int cw = 0;
int ch = 0;
GetClientSize( &cw, &ch );
m_clearRegion.Intersect( 0, 0, cw, ch );
}
-
+
m_clipPaintRegion = TRUE;
-
+
gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy );
-
+
m_clipPaintRegion = FALSE;
#else
gdk_window_scroll( GTK_PIZZA(m_wxwindow)->bin_window, dx, dy );
-
+
GTK_PIZZA(m_wxwindow)->xoffset += dx;
GTK_PIZZA(m_wxwindow)->yoffset += dy;
-
-#endif
-
+
+#endif
+
}
{
g_eraseGC = gdk_gc_new( GDK_ROOT_PARENT() );
gdk_gc_set_fill( g_eraseGC, GDK_SOLID );
-
+
return TRUE;
}
gMask = image.GetMaskGreen();
bMask = image.GetMaskBlue();
}
+ else // no mask, but still init the variables to avoid warnings
+ {
+ rMask =
+ gMask =
+ bMask = 0;
+ }
*ptr++ = width;
*ptr++ = height;