From: Robert Roebling Date: Wed, 23 Jun 1999 15:25:23 +0000 (+0000) Subject: wxMotif compiles and links now. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/96f201da8b08391fd719ad74875b87afacc8fc97 wxMotif compiles and links now. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2878 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/configure.in b/configure.in index df29b962d2..b047a82156 100644 --- a/configure.in +++ b/configure.in @@ -1078,7 +1078,7 @@ if test "$wxUSE_MOTIF" = 1; then AC_MSG_WARN(library will be compiled without support for images in XPM format) fi - GUI_TK_LINK="-lXm $XPM_LINK -lXmu -lXt -lX11 -lm" + GUI_TK_LINK="-lXm $XPM_LINK -lXmu -lXt -lX11 -ldl -lm" GUI_TK_LIBRARY="$GUI_TK_LIBRARY $GUI_TK_LINK" TOOLKIT=MOTIF fi diff --git a/include/wx/motif/dc.h b/include/wx/motif/dc.h index aa4ffe8a57..393de86fff 100644 --- a/include/wx/motif/dc.h +++ b/include/wx/motif/dc.h @@ -58,12 +58,10 @@ public: virtual void SetMapMode(int mode); virtual void SetUserScale(double x, double y); - virtual void SetSystemScale(double x, double y); virtual void SetLogicalScale(double x, double y); virtual void SetLogicalOrigin(long x, long y); virtual void SetDeviceOrigin(long x, long y); virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); - virtual void SetLogicalFunction(int function); protected: virtual void DoDrawIcon(const wxIcon& icon, long x, long y); diff --git a/include/wx/motif/dcclient.h b/include/wx/motif/dcclient.h index c7d6c2c205..ddeee5fc41 100644 --- a/include/wx/motif/dcclient.h +++ b/include/wx/motif/dcclient.h @@ -122,9 +122,6 @@ protected: virtual void DoSetClippingRegion(long x, long y, long width, long height); - virtual void DoGetSize(int *width, int *height) const; - virtual void DoGetSizeMM(int* width, int* height) const; - virtual void DoDrawLines(int n, wxPoint points[], long xoffset, long yoffset); virtual void DoDrawPolygon(int n, wxPoint points[], diff --git a/include/wx/motif/dcmemory.h b/include/wx/motif/dcmemory.h index 40434bd5f4..51b16b19c9 100644 --- a/include/wx/motif/dcmemory.h +++ b/include/wx/motif/dcmemory.h @@ -29,7 +29,7 @@ public: virtual void SelectObject( const wxBitmap& bitmap ); - void GetSize( int *width, int *height ) const; + void DoGetSize( int *width, int *height ) const; wxBitmap& GetBitmap() const { return (wxBitmap&) m_bitmap; } diff --git a/src/motif/Makefile.am b/src/motif/Makefile.am index 22e1853393..f898f12162 100644 --- a/src/motif/Makefile.am +++ b/src/motif/Makefile.am @@ -12,7 +12,7 @@ SUFFIXES = .cpp .c DEFS = $(TOOLKIT_DEF) $(WXDEBUG_DEFINE) LIBS = $(GUILIBS) -VPATH = .:${srcdir}:${srcdir}/../common:${srcdir}/../generic:${EXTRA_VPATH} +VPATH = .:${srcdir}:${srcdir}/xmcombo:${srcdir}/../common:${srcdir}/../generic:${EXTRA_VPATH} EXTRA_DIST = "${srcdir}/../common ${srcdir}/../generic ${srcdir}" @@ -30,6 +30,7 @@ libwx_motif_la_SOURCES = \ \ extended.c \ parser.c \ + xmcombo.c \ \ cmndata.cpp \ dynarray.cpp \ @@ -165,6 +166,7 @@ libwx_motif_la_SOURCES = \ main.cpp \ mdi.cpp \ menu.cpp \ + menuitem.cpp \ minifram.cpp \ notebook.cpp \ palette.cpp \ diff --git a/src/motif/dc.cpp b/src/motif/dc.cpp index ef06e450a4..c60397ea6f 100644 --- a/src/motif/dc.cpp +++ b/src/motif/dc.cpp @@ -149,13 +149,17 @@ void wxDC::SetMapMode( int mode ) void wxDC::SetUserScale( double x, double y ) { - wxDCBase::SetUserScale(x, y); + // allow negative ? -> no + m_userScaleX = x; + m_userScaleY = y; ComputeScaleAndOrigin(); } void wxDC::SetLogicalScale( double x, double y ) { - wxDCBase::SetLogicalScale(x, y); + // allow negative ? + m_logicalScaleX = x; + m_logicalScaleY = y; ComputeScaleAndOrigin(); } diff --git a/src/motif/dcclient.cpp b/src/motif/dcclient.cpp index 8336c61a64..7e2c71d1c8 100644 --- a/src/motif/dcclient.cpp +++ b/src/motif/dcclient.cpp @@ -2075,6 +2075,178 @@ int wxWindowDC::GetDepth() const return 24; } +#if wxUSE_SPLINES +// ----------------------------------- spline code ---------------------------------------- + +void wx_quadratic_spline(double a1, double b1, double a2, double b2, + double a3, double b3, double a4, double b4); +void wx_clear_stack(); +int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, double *x3, + double *y3, double *x4, double *y4); +void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, + double x4, double y4); +static bool wx_spline_add_point(double x, double y); +static void wx_spline_draw_point_array(wxDC *dc); + +wxList wx_spline_point_list; + +#define half(z1, z2) ((z1+z2)/2.0) +#define THRESHOLD 5 + +/* iterative version */ + +void wx_quadratic_spline(double a1, double b1, double a2, double b2, double a3, double b3, double a4, + double b4) +{ + register double xmid, ymid; + double x1, y1, x2, y2, x3, y3, x4, y4; + + wx_clear_stack(); + wx_spline_push(a1, b1, a2, b2, a3, b3, a4, b4); + + while (wx_spline_pop(&x1, &y1, &x2, &y2, &x3, &y3, &x4, &y4)) { + xmid = (double)half(x2, x3); + ymid = (double)half(y2, y3); + if (fabs(x1 - xmid) < THRESHOLD && fabs(y1 - ymid) < THRESHOLD && + fabs(xmid - x4) < THRESHOLD && fabs(ymid - y4) < THRESHOLD) { + wx_spline_add_point( x1, y1 ); + wx_spline_add_point( xmid, ymid ); + } else { + wx_spline_push(xmid, ymid, (double)half(xmid, x3), (double)half(ymid, y3), + (double)half(x3, x4), (double)half(y3, y4), x4, y4); + wx_spline_push(x1, y1, (double)half(x1, x2), (double)half(y1, y2), + (double)half(x2, xmid), (double)half(y2, ymid), xmid, ymid); + } + } +} + +/* utilities used by spline drawing routines */ + +typedef struct wx_spline_stack_struct { + double x1, y1, x2, y2, x3, y3, x4, y4; +} Stack; + +#define SPLINE_STACK_DEPTH 20 +static Stack wx_spline_stack[SPLINE_STACK_DEPTH]; +static Stack *wx_stack_top; +static int wx_stack_count; + +void wx_clear_stack() +{ + wx_stack_top = wx_spline_stack; + wx_stack_count = 0; +} + +void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) +{ + wx_stack_top->x1 = x1; + wx_stack_top->y1 = y1; + wx_stack_top->x2 = x2; + wx_stack_top->y2 = y2; + wx_stack_top->x3 = x3; + wx_stack_top->y3 = y3; + wx_stack_top->x4 = x4; + wx_stack_top->y4 = y4; + wx_stack_top++; + wx_stack_count++; +} + +int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, + double *x3, double *y3, double *x4, double *y4) +{ + if (wx_stack_count == 0) + return (0); + wx_stack_top--; + wx_stack_count--; + *x1 = wx_stack_top->x1; + *y1 = wx_stack_top->y1; + *x2 = wx_stack_top->x2; + *y2 = wx_stack_top->y2; + *x3 = wx_stack_top->x3; + *y3 = wx_stack_top->y3; + *x4 = wx_stack_top->x4; + *y4 = wx_stack_top->y4; + return (1); +} + +static bool wx_spline_add_point(double x, double y) +{ + wxPoint *point = new wxPoint ; + point->x = (int) x; + point->y = (int) y; + wx_spline_point_list.Append((wxObject*)point); + return TRUE; +} + +static void wx_spline_draw_point_array(wxDC *dc) +{ + dc->DrawLines(&wx_spline_point_list, 0, 0 ); + wxNode *node = wx_spline_point_list.First(); + while (node) + { + wxPoint *point = (wxPoint *)node->Data(); + delete point; + delete node; + node = wx_spline_point_list.First(); + } +} + +void wxWindowDC::DoDrawSpline( wxList *points ) +{ + wxCHECK_RET( Ok(), _T("invalid window dc") ); + + wxPoint *p; + double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4; + double x1, y1, x2, y2; + + wxNode *node = points->First(); + p = (wxPoint *)node->Data(); + + x1 = p->x; + y1 = p->y; + + node = node->Next(); + p = (wxPoint *)node->Data(); + + x2 = p->x; + y2 = p->y; + cx1 = (double)((x1 + x2) / 2); + cy1 = (double)((y1 + y2) / 2); + cx2 = (double)((cx1 + x2) / 2); + cy2 = (double)((cy1 + y2) / 2); + + wx_spline_add_point(x1, y1); + + while ((node = node->Next()) != NULL) + { + p = (wxPoint *)node->Data(); + x1 = x2; + y1 = y2; + x2 = p->x; + y2 = p->y; + cx4 = (double)(x1 + x2) / 2; + cy4 = (double)(y1 + y2) / 2; + cx3 = (double)(x1 + cx4) / 2; + cy3 = (double)(y1 + cy4) / 2; + + wx_quadratic_spline(cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4); + + cx1 = cx4; + cy1 = cy4; + cx2 = (double)(cx1 + x2) / 2; + cy2 = (double)(cy1 + y2) / 2; + } + + wx_spline_add_point( cx1, cy1 ); + wx_spline_add_point( x2, y2 ); + + wx_spline_draw_point_array( this ); +} + +#endif // wxUSE_SPLINE + + + // ---------------------------------------------------------------------------- // wxPaintDC // ---------------------------------------------------------------------------- diff --git a/src/motif/dcmemory.cpp b/src/motif/dcmemory.cpp index 85291b7c62..9a6c4271c8 100644 --- a/src/motif/dcmemory.cpp +++ b/src/motif/dcmemory.cpp @@ -131,7 +131,7 @@ void wxMemoryDC::SelectObject( const wxBitmap& bitmap ) }; }; -void wxMemoryDC::GetSize( int *width, int *height ) const +void wxMemoryDC::DoGetSize( int *width, int *height ) const { if (m_bitmap.Ok()) {