diff options
author | Timothy Pearson <[email protected]> | 2012-11-01 17:03:43 -0500 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2012-11-01 17:03:43 -0500 |
commit | b2d6cebbfdb2db6aa250bb43c9e773e97bb96378 (patch) | |
tree | 29352a3127cf30da095649304f85612d5ad40528 /tdegtk/tdegtk-draw.cpp | |
parent | d53bb7334952ba33745413498b914948f1c5eb90 (diff) | |
download | gtk3-tqt-engine-b2d6cebbfdb2db6aa250bb43c9e773e97bb96378.tar.gz gtk3-tqt-engine-b2d6cebbfdb2db6aa250bb43c9e773e97bb96378.zip |
Quite a few widgets now work
Diffstat (limited to 'tdegtk/tdegtk-draw.cpp')
-rw-r--r-- | tdegtk/tdegtk-draw.cpp | 659 |
1 files changed, 497 insertions, 162 deletions
diff --git a/tdegtk/tdegtk-draw.cpp b/tdegtk/tdegtk-draw.cpp index ad8edd9..818b2c1 100644 --- a/tdegtk/tdegtk-draw.cpp +++ b/tdegtk/tdegtk-draw.cpp @@ -26,6 +26,7 @@ #include <tqpainter.h> #include <tqstyle.h> #include <tqpopupmenu.h> +#include <tqlistview.h> #include <kiconloader.h> #include <kicontheme.h> @@ -319,8 +320,6 @@ tdegtk_draw_arrow (GtkThemingEngine *engine, TQt3CairoPaintDevice pd(NULL, x, y, size, size, cr); TQPainter p(&pd); - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,128,0,255); - GtkStateFlags state; state = gtk_theming_engine_get_state(engine); @@ -427,54 +426,102 @@ static void tdegtk_draw_cell_background (DRAW_ARGS, GtkRegionFlags flags) { - GtkJunctionSides junction; - guint hidden_side; + TQRect boundingRect(0, 0, width, height); + TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); + TQPainter p(&pd); - junction = (GtkJunctionSides)(GTK_JUNCTION_RIGHT | GTK_JUNCTION_LEFT); + const GtkWidgetPath* path; + GtkStateFlags state; + GtkWidget* widget; - hidden_side = SIDE_RIGHT | SIDE_LEFT; + path = gtk_theming_engine_get_path(engine); + state = gtk_theming_engine_get_state(engine); + widget = m_widgetLookup.find(cr, path); - if ((flags & GTK_REGION_FIRST) != 0) - { - junction = (GtkJunctionSides)(junction & ~(GTK_JUNCTION_CORNER_TOPLEFT | GTK_JUNCTION_CORNER_BOTTOMLEFT)); - hidden_side &= ~(SIDE_LEFT); - } - if ((flags & GTK_REGION_LAST) != 0) - { - junction = (GtkJunctionSides)(junction & ~(GTK_JUNCTION_CORNER_TOPRIGHT | GTK_JUNCTION_CORNER_BOTTOMRIGHT)); - hidden_side &= ~(SIDE_RIGHT); - } + if (gtk_widget_path_is_type(path, GTK_TYPE_TREE_VIEW)) { + TQStringList objectTypes; + objectTypes.append(TQLISTVIEW_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); - tdegtk_cairo_draw_background (engine, cr, - x, y, width, height, - hidden_side, junction); + TQStyleControlElementData ceData; + TQStyle::ControlElementFlags elementFlags; + ceData.widgetObjectTypes = objectTypes; + ceData.rect = boundingRect; + if ((state & GTK_STATE_FLAG_SELECTED) != 0) { + ceData.viewportData.bgBrush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Highlight); + } + else { + ceData.viewportData.bgBrush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Base); + } + + TQListViewItem tqt3ListViewItem; + TQStyleOption listViewItemOpt(&tqt3ListViewItem); + + TQRect paintDeviceRect; + TQRect backgroundRect; + + // Draw item + tqApp->style().drawComplexControl(TQStyle::CC_ListView, &p, ceData, elementFlags, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE), TQStyle::SC_ListView, TQStyle::SC_All, listViewItemOpt); + } + + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,128,64); + printf("[WARNING] tdegtk_draw_cell_background() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } + + p.end(); } static void tdegtk_draw_cell_frame (DRAW_ARGS, GtkRegionFlags flags) { - GtkJunctionSides junction; - guint hidden_side; + TQRect boundingRect(0, 0, width, height); + TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); + TQPainter p(&pd); - junction = (GtkJunctionSides)(GTK_JUNCTION_RIGHT | GTK_JUNCTION_LEFT); + const GtkWidgetPath* path; + GtkStateFlags state; + GtkWidget* widget; - hidden_side = SIDE_RIGHT | SIDE_LEFT; + path = gtk_theming_engine_get_path(engine); + state = gtk_theming_engine_get_state(engine); + widget = m_widgetLookup.find(cr, path); - if ((flags & GTK_REGION_FIRST) != 0) - { - junction = (GtkJunctionSides)(junction & ~(GTK_JUNCTION_CORNER_TOPLEFT | GTK_JUNCTION_CORNER_BOTTOMLEFT)); - hidden_side &= ~(SIDE_LEFT); - } - if ((flags & GTK_REGION_LAST) != 0) - { - junction = (GtkJunctionSides)(junction & ~(GTK_JUNCTION_CORNER_TOPRIGHT | GTK_JUNCTION_CORNER_BOTTOMRIGHT)); - hidden_side &= ~(SIDE_RIGHT); - } +#if 0 + if (gtk_widget_path_is_type(path, GTK_TYPE_TREE_VIEW)) { + TQStringList objectTypes; + objectTypes.append(TQLISTVIEW_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); - tdegtk_cairo_draw_frame (engine, cr, - x, y, width, height, - hidden_side, junction); + TQStyleControlElementData ceData; + TQStyle::ControlElementFlags elementFlags; + ceData.widgetObjectTypes = objectTypes; + ceData.rect = boundingRect; + if ((state & GTK_STATE_FLAG_SELECTED) != 0) { + ceData.viewportData.bgBrush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Highlight); + } + else { + ceData.viewportData.bgBrush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Base); + } + + TQListViewItem tqt3ListViewItem; + TQStyleOption listViewItemOpt(&tqt3ListViewItem); + + TQRect paintDeviceRect; + TQRect backgroundRect; + + // Draw item + tqApp->style().drawComplexControl(TQStyle::CC_ListView, &p, ceData, elementFlags, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE), TQStyle::SC_ListView, TQStyle::SC_All, listViewItemOpt); + } + + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,64,64); + printf("[WARNING] tdegtk_draw_cell_background() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } +#endif + + p.end(); } static void @@ -484,8 +531,6 @@ tdegtk_draw_check (DRAW_ARGS) TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); TQPainter p(&pd); - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,0,0); - GtkStateFlags state; state = gtk_theming_engine_get_state(engine); const GtkWidgetPath* path(gtk_theming_engine_get_path(engine)); @@ -522,12 +567,20 @@ tdegtk_draw_common_background (DRAW_ARGS) TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); TQPainter p(&pd); - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,0,0,255); - + const GtkWidgetPath* path; GtkStateFlags state; + GtkWidget* widget; + + path = gtk_theming_engine_get_path(engine); state = gtk_theming_engine_get_state(engine); + widget = m_widgetLookup.find(cr, path); - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_ENTRY)) { + if ((gtk_widget_path_is_type(path, GTK_TYPE_ENTRY)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TEXT_VIEW)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TEXT_BUFFER)) + || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_ENTRY)) + || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_COMBOBOX_ENTRY)) + ) { TQStringList objectTypes; objectTypes.append(TQLINEEDIT_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); @@ -537,7 +590,7 @@ tdegtk_draw_common_background (DRAW_ARGS) DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) } - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SCROLLBAR)) { + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SCROLLBAR)) { TQStringList objectTypes; objectTypes.append(TQSCROLLBAR_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); @@ -552,7 +605,7 @@ tdegtk_draw_common_background (DRAW_ARGS) tqApp->style().drawPrimitive(TQStyle::PE_PanelLineEdit, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE) | ((ceData.orientation == TQt::Horizontal)?TQStyle::Style_Horizontal:TQStyle::Style_Default)); } - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON)) { + else if (gtk_widget_path_is_type(path, GTK_TYPE_BUTTON)) { TQStringList objectTypes; objectTypes.append(TQBUTTON_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); @@ -562,7 +615,27 @@ tdegtk_draw_common_background (DRAW_ARGS) DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) } - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TOOLTIP)) { + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TOOLBAR)) { + TQStringList objectTypes; + objectTypes.append(TQTOOLBAR_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // Draw background + TQBrush brush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Background); + DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) + } + + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUBAR)) { + TQStringList objectTypes; + objectTypes.append(TQMENUBAR_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // Draw background + TQBrush brush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Background); + DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) + } + + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_TOOLTIP)) { TQStringList objectTypes; objectTypes.append(TQTIPLABEL_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); @@ -572,56 +645,126 @@ tdegtk_draw_common_background (DRAW_ARGS) DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) } - if ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENU)) || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM))) { - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,128,255); + else if ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENU)) || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM))) { + GtkWidget* parent(widget?gtk_widget_get_parent(widget):0L); + if (!GTK_IS_MENU_BAR(parent)) { + + // FIXME + // Mouse movements in the popup menu should be tracked similarly to mouse movements in the tab bar + // Many TQt3 styles highlight inactive menu items on hover; not providing this visual feedback may cause users to briefly think their GTK application has frozen up + +// // Register menu item with animation engine +// m_animations.menuItemEngine().registerWidget(widget); +// +// // Check tab properties +// int tabIndex = Gtk::gtk_notebook_find_tab(widget, x+width/2, y+height/2); +// m_animations.tabWidgetEngine().updateTabRect(widget, tabIndex, x, y, width, height); +// bool prelight = (tabIndex == m_animations.tabWidgetEngine().hoveredTab(widget)); +// GtkMenuItem* menuitem = GTK_MENU_ITEM(widget); +// const int currentPage = gtk_notebook_get_current_page(notebook); +// const int numPages = gtk_notebook_get_n_pages(notebook); +// bool selectedTab = (tabIndex==currentPage); + + TQStringList objectTypes; + objectTypes.append(TQPOPUPMENU_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + bool pressed = false; + bool prelight = false; + + TQStyleControlElementData ceData; + TQStyle::ControlElementFlags elementFlags; + ceData.widgetObjectTypes = objectTypes; + ceData.rect = boundingRect; + + TQMenuItem tqt3MenuItem; + int maxAcceleratorTextWidth = 0; + int maxIconWidth = IconSize(KIcon::Small) + 4; + TQStyleOption menuOpt(&tqt3MenuItem, maxIconWidth, maxAcceleratorTextWidth); + +// if (???) elementFlags = elementFlags | TQStyle::TQStyle::CEF_IsCheckable; + + TQRect paintDeviceRect; + TQRect backgroundRect; + + // Draw item + tqApp->style().drawControl(TQStyle::CE_PopupMenuItem, &p, ceData, elementFlags, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQMenuItem) | ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM))?TQStyle::Style_Active:TQStyle::Style_Default) | ((pressed)?TQStyle::Style_Down:TQStyle::Style_Default) | ((prelight)?TQStyle::Style_MouseOver:TQStyle::Style_Default), menuOpt); + } + } + + else if (gtk_widget_path_is_type(path, GTK_TYPE_NOTEBOOK)) { + TQStringList objectTypes; + objectTypes.append(TQTABWIDGET_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); - // FIXME - // Mouse movements in the popup menu should be tracked similarly to mouse movements in the tab bar - // Many TQt3 styles highlight inactive menu items on hover; not providing this visual feedback may cause users to briefly think their GTK application has frozen up + // Draw background + TQBrush brush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Background); + DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) + } -// // Register menu item with animation engine -// m_animations.menuItemEngine().registerWidget(widget); -// -// // Check tab properties -// int tabIndex = Gtk::gtk_notebook_find_tab(widget, x+width/2, y+height/2); -// m_animations.tabWidgetEngine().updateTabRect(widget, tabIndex, x, y, width, height); -// bool prelight = (tabIndex == m_animations.tabWidgetEngine().hoveredTab(widget)); -// GtkMenuItem* menuitem = GTK_MENU_ITEM(widget); -// const int currentPage = gtk_notebook_get_current_page(notebook); -// const int numPages = gtk_notebook_get_n_pages(notebook); -// bool selectedTab = (tabIndex==currentPage); + else if (gtk_widget_path_is_type(path, GTK_TYPE_PROGRESS_BAR)) { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,64,64,255); + } + else if ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BACKGROUND)) + || (gtk_widget_path_is_type(path, GTK_TYPE_EXPANDER)) + || (gtk_widget_path_is_type(path, GTK_TYPE_BOX)) + || (gtk_widget_path_is_type(path, GTK_TYPE_VIEWPORT)) + || (gtk_widget_path_is_type(path, GTK_TYPE_SCROLLED_WINDOW)) + || (gtk_widget_path_is_type(path, GTK_TYPE_PANED)) + ) { TQStringList objectTypes; - objectTypes.append(TQPOPUPMENU_OBJECT_NAME_STRING); + objectTypes.append(TQWIDGET_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // Draw background + TQBrush brush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Background); + DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) + } + + else if (gtk_widget_path_is_type(path, GTK_TYPE_HANDLE_BOX)) { + TQStringList objectTypes; + objectTypes.append(TQDOCKWINDOWHANDLE_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // Draw background + TQBrush brush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Background); + DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) + } + + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_CELL)) { + TQStringList objectTypes; + objectTypes.append(TQLISTVIEW_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); TQStyleControlElementData ceData; TQStyle::ControlElementFlags elementFlags; ceData.widgetObjectTypes = objectTypes; ceData.rect = boundingRect; + if ((state & GTK_STATE_FLAG_SELECTED) != 0) { + ceData.viewportData.bgBrush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Highlight); + } + else { + ceData.viewportData.bgBrush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Base); + } - TQMenuItem tqt3MenuItem; - int maxAcceleratorTextWidth = 0; - int maxIconWidth = IconSize(KIcon::Small) + 4; - TQStyleOption menuOpt(&tqt3MenuItem, maxIconWidth, maxAcceleratorTextWidth); - -// if (???) elementFlags = elementFlags | TQStyle::TQStyle::CEF_IsCheckable; + TQListViewItem tqt3ListViewItem; + TQStyleOption listViewItemOpt(&tqt3ListViewItem); TQRect paintDeviceRect; TQRect backgroundRect; // Draw item - tqApp->style().drawControl(TQStyle::CE_PopupMenuItem, &p, ceData, elementFlags, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQMenuItem) | ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM))?TQStyle::Style_Active:TQStyle::Style_Default), menuOpt); + tqApp->style().drawComplexControl(TQStyle::CC_ListView, &p, ceData, elementFlags, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE), TQStyle::SC_ListView, TQStyle::SC_All, listViewItemOpt); } - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BACKGROUND)) { - TQStringList objectTypes; - objectTypes.append(TQWIDGET_OBJECT_NAME_STRING); - TQPalette objectPalette = tqApp->palette(objectTypes); + else if (gtk_widget_path_is_type(path, GTK_TYPE_IMAGE)) { + // Do nothing + } - // Draw background - TQBrush brush = objectPalette.brush(gtkToTQPaletteColorGroup(engine, state), TQColorGroup::Background); - DRAW_FILLED_RECTANGLE_OVER_ENTIRE_AREA(p, brush) + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,0,0,255); + printf("[WARNING] tdegtk_draw_common_background() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); } p.end(); @@ -630,12 +773,20 @@ tdegtk_draw_common_background (DRAW_ARGS) static void tdegtk_draw_common_frame (DRAW_ARGS) { + cairo_save(cr); + cairo_reset_clip(cr); + TQRect boundingRect(0, 0, width, height); TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); TQPainter p(&pd); + const GtkWidgetPath* path; GtkStateFlags state; + GtkWidget* widget; + + path = gtk_theming_engine_get_path(engine); state = gtk_theming_engine_get_state(engine); + widget = m_widgetLookup.find(cr, path); if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_SCROLLBAR)) { if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON)) { @@ -669,12 +820,12 @@ tdegtk_draw_common_frame (DRAW_ARGS) } } else { - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BUTTON)) { + if (gtk_widget_path_is_type(path, GTK_TYPE_BUTTON)) { // Draw frame tqApp->style().drawPrimitive(TQStyle::PE_ButtonBevel, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQPushButton)); } - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_ENTRY)) { + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_ENTRY)) { TQStringList objectTypes; objectTypes.append(TQLINEEDIT_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); @@ -683,23 +834,76 @@ tdegtk_draw_common_frame (DRAW_ARGS) tqApp->style().drawPrimitive(TQStyle::PE_PanelLineEdit, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE)); } - if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENU)) { + else if (gtk_widget_path_is_type(path, GTK_TYPE_SPIN_BUTTON)) { + // Draw frame + tqApp->style().drawPrimitive(TQStyle::PE_ButtonBevel, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQPushButton)); + } + + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENU)) { TQStringList objectTypes; objectTypes.append(TQPOPUPMENU_OBJECT_NAME_STRING); TQPalette objectPalette = tqApp->palette(objectTypes); - + TQStyleControlElementData ceData; TQStyle::ControlElementFlags elementFlags; ceData.widgetObjectTypes = objectTypes; ceData.rect = boundingRect; ceData.orientation = (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_VERTICAL))?TQt::Vertical:TQt::Horizontal; - + // Draw frame tqApp->style().drawPrimitive(TQStyle::PE_PanelPopup, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE) | ((ceData.orientation == TQt::Horizontal)?TQStyle::Style_Horizontal:TQStyle::Style_Default)); } + + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM)) { + GtkWidget* parent(widget?gtk_widget_get_parent(widget):0L); + if (GTK_IS_MENU_BAR(parent)) { + TQStringList objectTypes; + objectTypes.append(TQPOPUPMENU_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // See FIXME in tdegtk_draw_common_background + + bool pressed = true; + bool prelight = false; + + TQStyleControlElementData ceData; + TQStyle::ControlElementFlags elementFlags; + ceData.widgetObjectTypes = objectTypes; + ceData.rect = boundingRect; + ceData.orientation = (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_VERTICAL))?TQt::Vertical:TQt::Horizontal; + + // Draw frame + tqApp->style().drawPrimitive(TQStyle::PE_ButtonDropDown, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQMenuItem) | ((ceData.orientation == TQt::Horizontal)?TQStyle::Style_Horizontal:TQStyle::Style_Default) | ((pressed)?TQStyle::Style_Down:TQStyle::Style_Default) | ((prelight)?TQStyle::Style_MouseOver:TQStyle::Style_Default)); + } + } + + else if (gtk_widget_path_is_type(path, GTK_TYPE_PROGRESS_BAR)) { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,64,64,255); + } + + else if (gtk_widget_path_is_type(path, GTK_TYPE_IMAGE)) { + // Do nothing + } + + else if ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_BACKGROUND)) + || (gtk_widget_path_is_type(path, GTK_TYPE_EXPANDER)) + || (gtk_widget_path_is_type(path, GTK_TYPE_BOX)) + || (gtk_widget_path_is_type(path, GTK_TYPE_VIEWPORT)) + || (gtk_widget_path_is_type(path, GTK_TYPE_SCROLLED_WINDOW)) + || (gtk_widget_path_is_type(path, GTK_TYPE_PANED)) + ) { + // Do nothing + } + + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,128,64,255); + printf("[WARNING] tdegtk_draw_common_frame() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } } p.end(); + + cairo_restore(cr); } static void @@ -753,8 +957,6 @@ tdegtk_draw_extension (DRAW_ARGS, TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); TQPainter p(&pd); - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,255,0); - const GtkWidgetPath* path; GtkStateFlags state; GtkWidget* widget; @@ -809,7 +1011,7 @@ tdegtk_draw_extension (DRAW_ARGS, ceData.tabBarData.shape = TQTabBar::RoundedBelow; paintDeviceRect = TQRect(x-tab_overlap, y-tab_to_frame_gap_height, width+(tab_overlap*2), height+tab_to_frame_gap_height); - boundingRect = TQRect(0, 0, width+(tab_overlap*2)-tab_overlap, height+tab_to_frame_gap_height); + boundingRect = TQRect(0, 0, width+tab_overlap, height+tab_to_frame_gap_height); backgroundRect = TQRect(tab_overlap, 0, width, height+2); break; case GTK_POS_LEFT: @@ -822,15 +1024,15 @@ tdegtk_draw_extension (DRAW_ARGS, tqt3Tab.setIdentifier(tabIndex); ceData.tabBarData.identIndexMap[tqt3Tab.identifier()] = tabIndex; - paintDeviceRect = TQRect(x-tab_overlap, y, width+(tab_overlap*2), height); - boundingRect = TQRect(0, 0, width+(tab_overlap*2)-tab_overlap, height); + paintDeviceRect = TQRect(x-tab_to_frame_gap_height, y, width+tab_to_frame_gap_height, height); + boundingRect = TQRect(0, 0, width, height); backgroundRect = TQRect(0, 0, width, height); break; case GTK_POS_BOTTOM: ceData.tabBarData.shape = TQTabBar::RoundedAbove; paintDeviceRect = TQRect(x-tab_overlap, y, width+(tab_overlap*2), height+tab_to_frame_gap_height); - boundingRect = TQRect(0, 0, width+(tab_overlap*2)-tab_overlap, height+tab_to_frame_gap_height); + boundingRect = TQRect(0, 0, width+tab_overlap, height+tab_to_frame_gap_height); backgroundRect = TQRect(tab_overlap, 0, width, height+2); break; case GTK_POS_RIGHT: @@ -843,8 +1045,8 @@ tdegtk_draw_extension (DRAW_ARGS, tqt3Tab.setIdentifier(tabIndex); ceData.tabBarData.identIndexMap[tqt3Tab.identifier()] = tabIndex; - paintDeviceRect = TQRect(x-tab_overlap, y, width+(tab_overlap*2), height); - boundingRect = TQRect(0, 0, width+(tab_overlap*2)-tab_overlap, height); + paintDeviceRect = TQRect(x, y, width+tab_to_frame_gap_height, height); + boundingRect = TQRect(0, 0, width, height); backgroundRect = TQRect(0, 0, width, height); break; } @@ -865,17 +1067,82 @@ tdegtk_draw_extension (DRAW_ARGS, cairo_restore(cr); } + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,255,0); + printf("[WARNING] tdegtk_draw_extension() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } + p.end(); } static void tdegtk_draw_focus (DRAW_ARGS) { + TQRect boundingRect(0, 0, width, height); + TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); + TQPainter p(&pd); + + const GtkWidgetPath* path; GtkStateFlags state; + GtkWidget* widget; + + path = gtk_theming_engine_get_path(engine); + state = gtk_theming_engine_get_state(engine); + widget = m_widgetLookup.find(cr, path); + + if ((gtk_widget_path_is_type(path, GTK_TYPE_ENTRY)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TEXT_VIEW)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TEXT_BUFFER)) + || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_ENTRY)) + || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_COMBOBOX_ENTRY)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TREE_VIEW)) + || (gtk_widget_path_is_type(path, GTK_TYPE_BUTTON)) + || (gtk_widget_path_is_type(path, GTK_TYPE_EXPANDER)) + ) { + TQStyle::SFlags sflags = TQStyle::Style_Default; + + TQStringList objectTypes; + if ((gtk_widget_path_is_type(path, GTK_TYPE_ENTRY)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TEXT_VIEW)) + || (gtk_widget_path_is_type(path, GTK_TYPE_TEXT_BUFFER)) + || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_ENTRY)) + || (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_COMBOBOX_ENTRY)) + ) { + objectTypes.append(TQLINEEDIT_OBJECT_NAME_STRING); + } + else if (gtk_widget_path_is_type(path, GTK_TYPE_TREE_VIEW)) { + objectTypes.append(TQLISTVIEW_OBJECT_NAME_STRING); + } + else { + objectTypes.append(TQWIDGET_OBJECT_NAME_STRING); + } + + TQPalette objectPalette = tqApp->palette(objectTypes); + TQColor bgColor; - state = gtk_theming_engine_get_state (engine); - - return; + if (state & GTK_STATE_FLAG_INSENSITIVE) { + bgColor = objectPalette.color(TQPalette::Disabled, TQColorGroup::Background); + } + else { + bgColor = objectPalette.color(TQPalette::Active, TQColorGroup::Background); + } + + TQStyleOption opt(bgColor); + tqApp->style().drawPrimitive(TQStyle::PE_FocusRect, &p, boundingRect, gtkToTQtColorGroup(engine, state), sflags, opt); + } + + else if ((gtk_widget_path_is_type(path, GTK_TYPE_ENTRY)) + || (gtk_widget_path_is_type(path, GTK_TYPE_NOTEBOOK)) + ) { + // Draw nothing + } + + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,128,255,64); + printf("[WARNING] tdegtk_draw_focus() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } + + p.end(); } static void @@ -997,59 +1264,38 @@ tdegtk_draw_handle (DRAW_ARGS) TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); TQPainter p(&pd); - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,0,128,255); - - p.end(); - - return; - - gdouble line_width; - gint i, bar_y, num_bars, bar_spacing, bar_width, bar_height; - - tdegtk_cairo_draw_background (engine, cr, - x, y, width, height, - 0, gtk_theming_engine_get_junction_sides (engine)); - - if (draw_centroid_texture (engine, cr, x, y, width, height)) - return; - - tdegtk_get_line_width (engine, &line_width); - - bar_y = 1; - num_bars = 3; - bar_spacing = 3; - bar_width = 3; - bar_height = num_bars * bar_spacing * line_width; - - cairo_save (cr); - - cairo_translate (cr, x + (gint) (width / 2), y + (gint) (height / 2)); + const GtkWidgetPath* path; + GtkStateFlags state; + //GtkWidget* widget; - if (height > width) - cairo_translate (cr, - bar_width / 2 - 0.5, - bar_height / 2 + 0.5); - else - { - cairo_translate (cr, - bar_height / 2 + 0.5, bar_width / 2 + 0.5); - cairo_rotate (cr, - G_PI / 2); - } + path = gtk_theming_engine_get_path(engine); + state = gtk_theming_engine_get_state(engine); + //widget = m_widgetLookup.find(cr, path); - for (i = 0; i < num_bars; i++) - { - /* draw bars */ - cairo_move_to (cr, 0, bar_y); - cairo_line_to (cr, bar_width, bar_y); - tdegtk_cairo_set_source_border (engine, cr, bar_width, 3); - cairo_stroke (cr); + if (gtk_widget_path_is_type(path, GTK_TYPE_HANDLE_BOX)) { + TQStringList objectTypes; + objectTypes.append(TQDOCKWINDOWHANDLE_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // Draw handle + tqApp->style().drawPrimitive(TQStyle::PE_DockWindowHandle, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE) | ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_VERTICAL))?TQStyle::Style_Default:TQStyle::Style_Horizontal)); + } - cairo_move_to (cr, 0, bar_y + line_width); - cairo_line_to (cr, bar_width, bar_y + line_width); - tdegtk_cairo_set_source_inner_stroke (engine, cr, bar_width, line_width); - cairo_stroke (cr); + else if (gtk_widget_path_is_type(path, GTK_TYPE_PANED)) { + TQStringList objectTypes; + objectTypes.append(TQSPLITTER_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + // Draw handle + tqApp->style().drawPrimitive(TQStyle::PE_Splitter, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE) | ((gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_VERTICAL))?TQStyle::Style_Default:TQStyle::Style_Horizontal)); + } - bar_y += bar_spacing; - } + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,0,128,255); + printf("[WARNING] tdegtk_draw_handle() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } - cairo_restore (cr); + p.end(); } static void @@ -1060,26 +1306,24 @@ tdegtk_draw_line (GtkThemingEngine *engine, gdouble x1, gdouble y1) { - /* line endings */ - if (y0 == y1) - { - y0 += 0.5; - y1 += 0.5; - x0 += 0.5; - x1 -= 0.5; - } - else if (x0 == x1) - { - x0 += 0.5; - x1 += 0.5; - y0 += 0.5; - y1 -= 0.5; - } - - cairo_move_to (cr, x0, y0); - cairo_line_to (cr, x1, y1); - tdegtk_cairo_set_source_border (engine, cr, MAX (x1 - x0, 1), MAX (y1 - y0, 1)); - cairo_stroke (cr); + // line endings + if (y0 == y1) { + y0 += 0.5; + y1 += 0.5; + x0 += 0.5; + x1 -= 0.5; + } + else if (x0 == x1) { + x0 += 0.5; + x1 += 0.5; + y0 += 0.5; + y1 -= 0.5; + } + + cairo_move_to (cr, x0, y0); + cairo_line_to (cr, x1, y1); + tdegtk_cairo_set_source_border (engine, cr, MAX (x1 - x0, 1), MAX (y1 - y0, 1)); + cairo_stroke (cr); } static void @@ -1118,15 +1362,47 @@ tdegtk_draw_radio (DRAW_ARGS) TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); TQPainter p(&pd); - DEBUG_FILL_BACKGROUND_WITH_COLOR(p,255,0,0); - + const GtkWidgetPath* path; GtkStateFlags state; + GtkWidget* widget; + + path = gtk_theming_engine_get_path(engine); state = gtk_theming_engine_get_state(engine); - const GtkWidgetPath* path(gtk_theming_engine_get_path(engine)); + widget = m_widgetLookup.find(cr, path); if (gtk_widget_path_is_type(path, GTK_TYPE_TREE_VIEW)) { tqApp->style().drawPrimitive(TQStyle::PE_ExclusiveIndicator, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_GTKTreeViewCell)); } + else if (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_MENUITEM)) { + const GtkAllocation allocation = Gtk::gtk_widget_get_allocation(widget); + + boundingRect = TQRect(0, 0, allocation.width, allocation.height); + TQt3CairoPaintDevice pd2(NULL, 0, 0, allocation.width, allocation.height, cr); + TQPainter p2(&pd2); + + bool checked = ((state & GTK_STATE_FLAG_ACTIVE) != 0); + int maxAcceleratorTextWidth = 0; + int maxIconWidth = IconSize(KIcon::Small) + 4; + + TQStringList objectTypes; + objectTypes.append(TQPOPUPMENU_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + TQStyleControlElementData ceData; + TQStyle::ControlElementFlags elementFlags; + ceData.widgetObjectTypes = objectTypes; + ceData.rect = boundingRect; + + TQMenuItem tqt3MenuItem; + tqt3MenuItem.setChecked(checked); + TQStyleOption menuOpt(&tqt3MenuItem, maxIconWidth, maxAcceleratorTextWidth); + elementFlags = elementFlags | TQStyle::TQStyle::CEF_IsCheckable; + + if (checked) { + tqApp->style().drawPrimitive(TQStyle::PE_MenuItemIndicatorFrame, &p2, ceData, elementFlags, ceData.rect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQRadioButton), menuOpt); + tqApp->style().drawPrimitive(TQStyle::PE_MenuItemIndicatorCheck, &p2, ceData, elementFlags, ceData.rect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQRadioButton), menuOpt); + } + } else { tqApp->style().drawPrimitive(TQStyle::PE_ExclusiveIndicator, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQRadioButton)); } @@ -1137,6 +1413,65 @@ tdegtk_draw_radio (DRAW_ARGS) static void tdegtk_draw_separator (DRAW_ARGS) { + TQRect boundingRect(0, 0, width, height); + TQt3CairoPaintDevice pd(NULL, x, y, width, height, cr); + TQPainter p(&pd); + + const GtkWidgetPath* path; + GtkStateFlags state; + GtkWidget* widget; + + path = gtk_theming_engine_get_path(engine); + state = gtk_theming_engine_get_state(engine); + widget = m_widgetLookup.find(cr, path); + + if (gtk_widget_path_is_type(path, GTK_TYPE_SEPARATOR_MENU_ITEM)) { + TQStringList objectTypes; + objectTypes.append(TQPOPUPMENU_OBJECT_NAME_STRING); + TQPalette objectPalette = tqApp->palette(objectTypes); + + bool pressed = false; + bool prelight = false; + + TQStyleControlElementData ceData; + TQStyle::ControlElementFlags elementFlags; + ceData.widgetObjectTypes = objectTypes; + ceData.rect = boundingRect; + + TQMenuItem tqt3MenuItem; + tqt3MenuItem.setSeparator(true); + int maxAcceleratorTextWidth = 0; + int maxIconWidth = IconSize(KIcon::Small) + 4; + TQStyleOption menuOpt(&tqt3MenuItem, maxIconWidth, maxAcceleratorTextWidth); + +// if (???) elementFlags = elementFlags | TQStyle::TQStyle::CEF_IsCheckable; + + TQRect paintDeviceRect; + TQRect backgroundRect; + + // Draw item + tqApp->style().drawControl(TQStyle::CE_PopupMenuItem, &p, ceData, elementFlags, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_TQMenuItem), menuOpt); + } + + else if (gtk_widget_path_is_type(path, GTK_TYPE_SEPARATOR)) { + TQt::Orientation orientation = (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_VERTICAL))?TQt::Vertical:TQt::Horizontal; + tqApp->style().drawPrimitive(TQStyle::PE_Separator, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE) | ((orientation == TQt::Horizontal)?TQStyle::Style_Horizontal:TQStyle::Style_Default)); + } + + else if (gtk_widget_path_is_type(path, GTK_TYPE_SEPARATOR_TOOL_ITEM)) { + TQt::Orientation orientation = (gtk_theming_engine_has_class(engine, GTK_STYLE_CLASS_VERTICAL))?TQt::Vertical:TQt::Horizontal; + tqApp->style().drawPrimitive(TQStyle::PE_Separator, &p, boundingRect, gtkToTQtColorGroup(engine, state), gtkToTQtStyleFlags(engine, state, TQT3WT_NONE) | ((orientation == TQt::Horizontal)?TQStyle::Style_Horizontal:TQStyle::Style_Default)); + } + + else { + DEBUG_FILL_BACKGROUND_WITH_COLOR(p,128,128,255); + printf("[WARNING] tdegtk_draw_separator() nonfunctional for widget with path '%s'\n\r", gtk_widget_path_to_string (gtk_theming_engine_get_path(engine))); fflush(stdout); + } + + p.end(); + + return; + gdouble line_width; tdegtk_get_line_width (engine, &line_width); |