summaryrefslogtreecommitdiffstats
path: root/tdegtk/tqtcairopainter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdegtk/tqtcairopainter.cpp')
-rw-r--r--tdegtk/tqtcairopainter.cpp70
1 files changed, 52 insertions, 18 deletions
diff --git a/tdegtk/tqtcairopainter.cpp b/tdegtk/tqtcairopainter.cpp
index 0e8da20..95c86c4 100644
--- a/tdegtk/tqtcairopainter.cpp
+++ b/tdegtk/tqtcairopainter.cpp
@@ -676,6 +676,7 @@ void TQt3CairoPaintDevice::pangoSetupTextPath(PangoLayout *layout, const char* t
#endif
pango_layout_set_font_description(layout, desc);
+ pango_font_description_free(desc);
PangoAttrList* attr_list = pango_attr_list_new();
pango_attr_list_insert(attr_list, pango_attr_underline_new((underline)?PANGO_UNDERLINE_SINGLE:PANGO_UNDERLINE_NONE));
@@ -683,7 +684,15 @@ void TQt3CairoPaintDevice::pangoSetupTextPath(PangoLayout *layout, const char* t
pango_layout_set_attributes(layout, attr_list);
pango_attr_list_unref(attr_list);
- pango_font_description_free(desc);
+ if (m_tabStopArrayValid) {
+ pango_layout_set_tabs(layout, m_tabStopArray);
+ }
+ else if (m_tabStopsValid) {
+ pango_layout_set_tabs(layout, m_tabStops);
+ }
+ else {
+ pango_layout_set_tabs(layout, NULL);
+ }
}
void TQt3CairoPaintDevice::drawText(TQPainter *p, int x, int y, const TQString &str) {
@@ -844,10 +853,13 @@ void TQt3CairoPaintDevice::setCairoTransformations() {
*/
TQt3CairoPaintDevice::TQt3CairoPaintDevice( cairo_surface_t *cairosurface )
- : TQPaintDevice( TQInternal::Picture | TQInternal::ExternalDevice ), m_intermediateSurface(NULL), m_painter(NULL), m_devicePainter(NULL)
+ : TQPaintDevice( TQInternal::Picture | TQInternal::ExternalDevice ), m_intermediateSurface(NULL), m_painter(NULL), m_devicePainter(NULL), m_tabStops(NULL), m_tabStopArray(NULL)
{
m_surface = cairosurface;
m_worldMatrixStack.setAutoDelete(TRUE);
+
+ m_tabStops = pango_tab_array_new(0, false);
+ m_tabStopArray = pango_tab_array_new(0, false);
}
/*!
@@ -855,6 +867,13 @@ TQt3CairoPaintDevice::TQt3CairoPaintDevice( cairo_surface_t *cairosurface )
*/
TQt3CairoPaintDevice::~TQt3CairoPaintDevice()
{
+ if (m_tabStops) {
+ pango_tab_array_free(m_tabStops);
+ }
+ if (m_tabStopArray) {
+ pango_tab_array_free(m_tabStopArray);
+ }
+
if (m_painter) {
cairo_destroy(m_painter);
m_painter = NULL;
@@ -1176,6 +1195,8 @@ bool TQt3CairoPaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p )
m_clipRegion = TQImage();
m_clipRegionEnabled = false;
m_worldMatrixStack.clear();
+ m_tabStopsValid = false;
+ m_tabStopArrayValid = false;
}
break;
case PdcEnd:
@@ -1302,27 +1323,40 @@ bool TQt3CairoPaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p )
}
}
break;
-#if 0
case PdcSetTabStops:
- s >> i_16;
- painter->setTabStops( i_16 );
+ if (p) {
+ int tabspacing = p[0].ival;
+ if (tabspacing > 0) {
+ // Set up a repeating tab stop pattern
+ pango_tab_array_resize(m_tabStops, 2);
+ pango_tab_array_set_tab(m_tabStops, 0, PANGO_TAB_LEFT, (tabspacing*1)*PANGO_SCALE);
+ pango_tab_array_set_tab(m_tabStops, 1, PANGO_TAB_LEFT, (tabspacing*2)*PANGO_SCALE);
+ m_tabStopsValid = true;
+ }
+ else {
+ pango_tab_array_resize(m_tabStops, 0);
+ m_tabStopsValid = false;
+ }
+ }
break;
case PdcSetTabArray:
- s >> i_16;
- if ( i_16 == 0 ) {
- painter->setTabArray( 0 );
- } else {
- int *ta = new int[i_16];
- TQ_CHECK_PTR( ta );
- for ( int i=0; i<i_16; i++ ) {
- s >> i1_16;
- ta[i] = i1_16;
- }
- painter->setTabArray( ta );
- delete [] ta;
+ if (p) {
+ int tabcount = p[0].ival;
+ if (tabcount > 0) {
+ int* tabarray = p[1].ivec;
+ pango_tab_array_resize(m_tabStopArray, tabcount);
+ int i;
+ for (i=0;i<tabcount;i++) {
+ pango_tab_array_set_tab(m_tabStopArray, i, PANGO_TAB_LEFT, tabarray[i]*PANGO_SCALE);
+ }
+ m_tabStopArrayValid = true;
+ }
+ else {
+ pango_tab_array_resize(m_tabStopArray, 0);
+ m_tabStopArrayValid = false;
+ }
}
break;
-#endif
case PdcSetVXform:
if ((p) && (m_painter)) {
m_viewportMatrixEnabled = p[0].ival;