From 4989904be21bf009db2fb580aa345d2fb8ea7bd0 Mon Sep 17 00:00:00 2001 From: Cyril Deguet Date: Tue, 17 Jun 2003 18:13:18 +0000 Subject: [PATCH] * tooltips are now updated during scrolling --- modules/gui/skins/src/window.cpp | 13 ++++++- modules/gui/skins/x11/x11_window.cpp | 52 +++++++++++++++++++++++++--- modules/gui/skins/x11/x11_window.h | 3 +- 3 files changed, 61 insertions(+), 7 deletions(-) diff --git a/modules/gui/skins/src/window.cpp b/modules/gui/skins/src/window.cpp index 4d6582f1c7..b731d12eb0 100644 --- a/modules/gui/skins/src/window.cpp +++ b/modules/gui/skins/src/window.cpp @@ -2,7 +2,7 @@ * window.cpp: Window class ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: window.cpp,v 1.29 2003/06/10 11:43:40 gbazin Exp $ + * $Id: window.cpp,v 1.30 2003/06/17 18:13:18 asmax Exp $ * * Authors: Olivier Teulière * Emmanuel Puig @@ -456,7 +456,18 @@ void SkinWindow::MouseScroll( int x, int y, int direction ) { break; } + } + + // Checking for change in Tool Tip + for( int i = ControlList.size() - 1; i >= 0; i-- ) + { + if( ControlList[i]->IsVisible() && + ControlList[i]->ToolTipTest( x, y ) ) + { + break; + } } + } //--------------------------------------------------------------------------- void SkinWindow::Init() diff --git a/modules/gui/skins/x11/x11_window.cpp b/modules/gui/skins/x11/x11_window.cpp index 5633bbe096..8c74dddb99 100644 --- a/modules/gui/skins/x11/x11_window.cpp +++ b/modules/gui/skins/x11/x11_window.cpp @@ -2,7 +2,7 @@ * x11_window.cpp: X11 implementation of the Window class ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: x11_window.cpp,v 1.23 2003/06/14 18:49:02 gbazin Exp $ + * $Id: x11_window.cpp,v 1.24 2003/06/17 18:13:18 asmax Exp $ * * Authors: Cyril Deguet * @@ -51,7 +51,8 @@ #include "x11_timer.h" -bool ToolTipCallback( void *data ); +static bool ToolTipCallback( void *data ); +static void DrawToolTipText( tooltip_t *tooltip ); //--------------------------------------------------------------------------- @@ -145,6 +146,7 @@ X11Window::X11Window( intf_thread_t *p_intf, Window wnd, int x, int y, X11Timer *timer = new X11Timer( p_intf, 500000, ToolTipCallback, &ToolTip ); ToolTip.p_intf = p_intf; ToolTip.timer = timer; + ToolTip.active = False; // Double-click handling ClickedX = 0; @@ -491,12 +493,42 @@ bool ToolTipCallback( void *data ) XDrawString( disp, win, gc, 4, overall.ascent+4, text.c_str(), text.size() ); XSync( disp, 0 ); + ((tooltip_t*)data)->active = True; XUNLOCK; return False; } + +void DrawToolTipText( tooltip_t *tooltip ) +{ + int direction, fontAscent, fontDescent; + + Display *disp = tooltip->display; + Window win = tooltip->window; + Font font = tooltip->font; + GC gc = tooltip->gc; + string text = tooltip->text; + int curX = tooltip->curX; + int curY = tooltip->curY; + + XLOCK; + XClearWindow( disp, win ); + XCharStruct overall; + XQueryTextExtents( disp, font, text.c_str(), text.size(), &direction, + &fontAscent, &fontDescent, &overall ); + int w = overall.rbearing - overall.lbearing; + int h = overall.ascent + overall.descent; + XMoveWindow( disp, win, curX - w/4, curY + 20 ); + XResizeWindow( disp, win, w+8, h+8 ); + XDrawString( disp, win, gc, 4, overall.ascent+4, text.c_str(), + text.size() ); + XSync( disp, 0 ); + XUNLOCK; +} + + void X11Window::ChangeToolTipText( string text ) { if( text == "none" ) @@ -511,6 +543,7 @@ void X11Window::ChangeToolTipText( string text ) XUnmapWindow( display, ToolTip.window ); XResizeWindow( display, ToolTip.window, 1, 1 ); XSync( display, 0 ); + ToolTip.active = False; XUNLOCK; } } @@ -520,9 +553,18 @@ void X11Window::ChangeToolTipText( string text ) { ToolTipText = text; ToolTip.text = text; - OSAPI_GetMousePos( ToolTip.curX, ToolTip.curY ); - X11TimerManager *timerManager = X11TimerManager::Instance( p_intf ); - timerManager->addTimer( ToolTip.timer ); + if( !ToolTip.active ) + { + // Create the tooltip + OSAPI_GetMousePos( ToolTip.curX, ToolTip.curY ); + X11TimerManager *timerManager = X11TimerManager::Instance( p_intf ); + timerManager->addTimer( ToolTip.timer ); + } + else + { + // Refresh the tooltip + DrawToolTipText( &ToolTip ); + } } } } diff --git a/modules/gui/skins/x11/x11_window.h b/modules/gui/skins/x11/x11_window.h index d9cfc8bd23..ec85fcb5a2 100644 --- a/modules/gui/skins/x11/x11_window.h +++ b/modules/gui/skins/x11/x11_window.h @@ -2,7 +2,7 @@ * x11_window.h: X11 implementation of the Window class ***************************************************************************** * Copyright (C) 2003 VideoLAN - * $Id: x11_window.h,v 1.5 2003/06/08 00:32:07 asmax Exp $ + * $Id: x11_window.h,v 1.6 2003/06/17 18:13:18 asmax Exp $ * * Authors: Cyril Deguet * @@ -47,6 +47,7 @@ typedef struct Font font; int curX; int curY; + bool active; } tooltip_t; -- 2.39.2