#include "wx/dcclient.h"
#ifndef WX_PRECOMP
+ #include "wx/window.h"
#include "wx/log.h"
#include "wx/dcmemory.h"
#include "wx/math.h" // for floating-point functions
#include "wx/image.h"
+ #include "wx/module.h"
#endif
-#include "wx/module.h"
#include "wx/fontutil.h"
#include "wx/gtk/win_gtk.h"
standard (as e.g. wxStatusBar) */
m_owner = window;
+
+ if (m_owner && m_owner->m_wxwindow && (m_owner->GetLayoutDirection() == wxLayout_RightToLeft))
+ {
+ m_signX = -1;
+ gint width;
+ gdk_window_get_geometry( GTK_PIZZA(m_owner->m_wxwindow)->bin_window,
+ NULL, NULL, &width, NULL, NULL );
+ m_deviceOriginX = width;;
+ }
}
wxWindowDC::~wxWindowDC()
int w = bitmap.GetWidth();
int h = bitmap.GetHeight();
-
+
+ if (m_owner && m_owner->GetLayoutDirection() == wxLayout_RightToLeft)
+ xx -= w;
+
CalcBoundingBox( x, y );
CalcBoundingBox( x + w, y + h );
if (!m_window) return false;
// transform the source DC coords to the device ones
- xsrc = source->XLOG2DEV(xsrc);
- ysrc = source->YLOG2DEV(ysrc);
+ xsrc = source->LogicalToDeviceX(xsrc);
+ ysrc = source->LogicalToDeviceY(ysrc);
wxClientDC *srcDC = (wxClientDC*)source;
wxMemoryDC *memDC = (wxMemoryDC*)source;
}
// Draw layout.
- gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
+ if (m_owner && m_owner->GetLayoutDirection() == wxLayout_RightToLeft)
+ gdk_draw_layout( m_window, m_textGC, x-w, y, m_layout );
+ else
+ gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
// reset unscaled size
pango_font_description_set_size( m_fontdesc, oldSize );
gdk_draw_rectangle(m_window, m_textGC, TRUE, x, y, w, h);
gdk_gc_set_foreground(m_textGC, m_textForegroundColour.GetColor());
}
+
// Draw layout.
- gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
+ if (m_owner && m_owner->GetLayoutDirection() == wxLayout_RightToLeft)
+ gdk_draw_layout( m_window, m_textGC, x-w, y, m_layout );
+ else
+ gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
}
if (underlined)
wxCoord wxWindowDC::GetCharHeight() const
{
- PangoFontMetrics *metrics = pango_context_get_metrics (m_context, m_fontdesc, NULL);
+ PangoFontMetrics *metrics = pango_context_get_metrics (m_context, m_fontdesc, pango_context_get_language(m_context));
return PANGO_PIXELS (pango_font_metrics_get_descent (metrics) + pango_font_metrics_get_ascent (metrics));
}
m_bgGC = (GdkGC*) NULL;
}
+void wxWindowDC::SetDeviceOrigin( wxCoord x, wxCoord y )
+{
+ m_deviceOriginX = x;
+ m_deviceOriginY = y;
+
+ ComputeScaleAndOrigin();
+}
+
+void wxWindowDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
+{
+ m_signX = (xLeftRight ? 1 : -1);
+ m_signY = (yBottomUp ? -1 : 1);
+
+ if (m_owner && m_owner->m_wxwindow && (m_owner->GetLayoutDirection() == wxLayout_RightToLeft))
+ m_signX = -m_signX;
+
+ ComputeScaleAndOrigin();
+}
+
void wxWindowDC::ComputeScaleAndOrigin()
{
const wxRealPoint origScale(m_scaleX, m_scaleY);