diff options
Diffstat (limited to 'tdegtk/tqtcairopainter.cpp')
-rw-r--r-- | tdegtk/tqtcairopainter.cpp | 70 |
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; |