Gui - Tooltips can go off screen
Gui - Tooltips can go off screen
If you have a gui item with a tooltip on the far right of the screen, the tooltip text will be mostly off screen. It should reposition itself to always stay within the window.
-
- Posts: 126
- Joined: Wed Sep 29, 2010 8:23 pm
Is this really a bug? I mean it's only doing what it's designed to do.
You tell it to render text/other gui items starting at a certain 2d point on the screen, and render from there, it won't recognize whether it's out of bounds or anything.
I'm sure it wouldn't be that hard to modify that code so you can get it to do what you want it to do That's what's good about Irrlicht being open source.
You tell it to render text/other gui items starting at a certain 2d point on the screen, and render from there, it won't recognize whether it's out of bounds or anything.
I'm sure it wouldn't be that hard to modify that code so you can get it to do what you want it to do That's what's good about Irrlicht being open source.
No, that one on the bug-tracker was for menus. And it's basically fixed for those already, although not sure yet if that is sufficient (I only prevented it in automatic cases, but still did allow setting it manually outside - which when I think about it now sounds reasonable so we could close that bug probably (will look at it in the evening)).
So new bug, I'll take a look and thanks for reporting :-)
So new bug, I'll take a look and thanks for reporting :-)
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Just to answer this: I'd call this a bug because there is no way currently to reposition the tooltip, you have no control over where it appears so if its off screen, your stuffed and there's nothing you can do about it (besides change the irrlicht source). I'd also call this a bug because it's different to how tooltips usually work (at least on windows and I assume other OS's are the same). They always reposition themselves to stay on screen no matter where the element they belong to is.macron12388 wrote:Is this really a bug? I mean it's only doing what it's designed to do.
You tell it to render text/other gui items starting at a certain 2d point on the screen, and render from there, it won't recognize whether it's out of bounds or anything.
-
- Admin
- Posts: 14143
- Joined: Wed Apr 19, 2006 9:20 pm
- Location: Oldenburg(Oldb), Germany
- Contact:
Oh sorry, just remembered this problem with rendering outside the window. But didn't we fix this for tool-tips even earlier? I think bitplane worked on such a problem pretty early after tooltip introduction. Anyway, should be fixed. Either by finding a better default place, or adding an alignment option for the tooltip
-
- Posts: 126
- Joined: Wed Sep 29, 2010 8:23 pm
Ahh, I see. If the only way to fix it is changing the irrlicht source, I guess it is a bug.Mloren wrote:Just to answer this: I'd call this a bug because there is no way currently to reposition the tooltip, you have no control over where it appears so if its off screen, your stuffed and there's nothing you can do about it (besides change the irrlicht source). I'd also call this a bug because it's different to how tooltips usually work (at least on windows and I assume other OS's are the same). They always reposition themselves to stay on screen no matter where the element they belong to is.macron12388 wrote:Is this really a bug? I mean it's only doing what it's designed to do.
You tell it to render text/other gui items starting at a certain 2d point on the screen, and render from there, it won't recognize whether it's out of bounds or anything.
IIRC the one I fixed was to do with the tooltip appearing directly under or right next to the mouse position, so the hovered element would change when you next moved the mouse, which made the tooltips flicker on and off.
Any fix would have to watch out for that problem, the naive fix of just calling rect.constrainTo(screenRect) would probably reintroduce it.
Any fix would have to watch out for that problem, the naive fix of just calling rect.constrainTo(screenRect) would probably reintroduce it.
Hehe, I remember fixing that one also once in some situation :-) Guess it's one of those re-appearing bugs - I'll try to take care, thx.bitplane wrote:IIRC the one I fixed was to do with the tooltip appearing directly under or right next to the mouse position, so the hovered element would change when you next moved the mouse, which made the tooltips flicker on and off.
Any fix would have to watch out for that problem, the naive fix of just calling rect.constrainTo(screenRect) would probably reintroduce it.
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Hm, I can't reproduce it here (testing with Irrlicht 1.7.2 branch).
Seems to work already. Which version did you use?
Here's my test-code:
Seems to work already. Which version did you use?
Here's my test-code:
Code: Select all
#include <irrlicht.h>
#include <iostream>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#endif
struct SAppContext
{
IrrlichtDevice * device;
irr::gui::IGUIButton * buttonHide;
irr::gui::IGUIButton * buttonRemove;
};
class MyEventReceiver : public IEventReceiver
{
public:
MyEventReceiver(SAppContext & context) : Context(context) { }
virtual bool OnEvent(const SEvent& event)
{
if (event.EventType == EET_GUI_EVENT)
{
switch(event.GUIEvent.EventType)
{
case EGET_BUTTON_CLICKED:
if ( event.GUIEvent.Caller == Context.buttonHide )
{
Context.buttonHide->setVisible(false);
}
else if ( event.GUIEvent.Caller == Context.buttonRemove )
{
Context.buttonRemove->remove();
}
break;
default:
break;
}
}
return false;
}
private:
SAppContext & Context;
};
int main()
{
video::E_DRIVER_TYPE driverType = video::EDT_OPENGL;
IrrlichtDevice * device = createDevice(driverType, core::dimension2d<u32>(640, 480));
if (device == 0)
return 1; // could not create selected driver.
video::IVideoDriver* driver = device->getVideoDriver();
IGUIEnvironment* env = device->getGUIEnvironment();
SAppContext context;
context.device = device;
context.buttonHide = env->addButton( irr::core::rect<s32>(20,20, 100, 40), 0, -1, L"hide", L"tooltip_hide");
context.buttonRemove = env->addButton( irr::core::rect<s32>(20,50, 100, 70), 0, -1, L"remove", L"tooltip_remove");
context.buttonRemove = env->addButton( irr::core::rect<s32>(0,0, 100, 20), 0, -1, L"left-top", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(300,0, 400, 20), 0, -1, L"top", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(540,0, 640, 20), 0, -1, L"top-right", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(540,100, 640, 120), 0, -1, L"right", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(540,460, 640, 480), 0, -1, L"right-bottom", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(300,460, 400, 480), 0, -1, L"bottom", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(0,460, 100, 480), 0, -1, L"bottom left", L"tooltip_lefttop");
context.buttonRemove = env->addButton( irr::core::rect<s32>(0,200, 100, 220), 0, -1, L"left", L"tooltip_lefttop");
MyEventReceiver receiver(context);
device->setEventReceiver(&receiver);
while(device->run() && driver)
{
if (device->isWindowActive())
{
driver->beginScene(true, true, SColor(0,200,200,200));
env->drawAll();
driver->endScene();
}
}
device->drop();
return 0;
}
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
I'm using the 1.7.1 normal download (not SVN).
I'm also running Irrlicht in a win32 window. When the window is maximized, the tool tip is actually moving to stay on screen but not quite enough, a single character is still off screen.
When the window is not maximized, it doesn't reposition it at all and its mostly off screen.
Screenshot: (tool tip coming from the little icon that is half under the left edge of the tool tip)
I'm also running Irrlicht in a win32 window. When the window is maximized, the tool tip is actually moving to stay on screen but not quite enough, a single character is still off screen.
When the window is not maximized, it doesn't reposition it at all and its mostly off screen.
Screenshot: (tool tip coming from the little icon that is half under the left edge of the tool tip)
I just tried on Windows as well and at least my test-code works there also. I won't got back to Irrlicht 1.7.1 as 1.7.2 is already released, but I don't think anything changed since then in this code (last changes should have been for 1.7.1).
So maybe I just don't catch the right situation in my test-code. Could you try adapting it to reproduce the problem?
So maybe I just don't catch the right situation in my test-code. Could you try adapting it to reproduce the problem?
IRC: #irrlicht on irc.libera.chat
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
Code snippet repository: https://github.com/mzeilfelder/irr-playground-micha
Free racer made with Irrlicht: http://www.irrgheist.com/hcraftsource.htm
ok I've reproduced this using the Win32 irrlicht sample.
When running this I ran with the options:
"b" Direct3D 9.0c
"a" Window with button (via CreationParam)
It's to do with resizing the window:
I added an IGUIImage to the sample with the tool tip "this is a test".
I put the image on the far right so it was just going outside the edge of the irrlicht window.
When mousing over the right of the image, where it meats the edge of the window, the tool tip shows correctly, repositioning itself to stay on screen.
Now re-size the main window by clicking the right edge and dragging it in, make it smaller so that the image is now half off screen.
Mouse over it and see the tool tip is also off screen.
So I guess the issue is that while the tool tip stays within the irrlicht window, it doesn't move to stay within the parent window.
When running this I ran with the options:
"b" Direct3D 9.0c
"a" Window with button (via CreationParam)
It's to do with resizing the window:
I added an IGUIImage to the sample with the tool tip "this is a test".
I put the image on the far right so it was just going outside the edge of the irrlicht window.
When mousing over the right of the image, where it meats the edge of the window, the tool tip shows correctly, repositioning itself to stay on screen.
Now re-size the main window by clicking the right edge and dragging it in, make it smaller so that the image is now half off screen.
Mouse over it and see the tool tip is also off screen.
So I guess the issue is that while the tool tip stays within the irrlicht window, it doesn't move to stay within the parent window.