Page 1 of 1

Resizing SDL Ogre window without resizing CEGUI elements

Posted: Wed Nov 30, 2005 08:21
by Ben811
Hi there,

I'm not sure to ask this question here ore on the Ogre forum but I don't now if its related to CEGUI or Ogre so I'll ask both.

I've implemented a window resize function for the SDL so that I'm able to resize the Ogre window. Then I have two basic problems:

The view of my camera also gets resized. But I want to have the effect of only "making my window bigger and see more of the scene", not zooming in.
The second problem and I think its related to this one is the CEGUI elements change there size. But they should retain their current size no matter how the window around gets resized. There are special settings for CEGUI (like AutoScale= False) and so on but nothing changed this behavior and because of the view problem maybe I'm doing something wrong in Ogre.

I hope I described my problem so that it's understandable what I mean.

Thanks for you help!

Ben :D

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Wed Nov 30, 2005 09:18
by lindquist
remember to call setDisplaySize of your renderer module with your new "screen" resolution. If you do this and have auto scaling disabled for both your imagesets and fonts you should get the result you're looking for.

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Tue Dec 06, 2005 10:07
by Ben811
Hi there,

I finally added the setDisplaySize method to the Ogre renderer and then after calling it -> it works fine!

Thanks for your help...

Ben :D

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Wed Dec 21, 2005 11:38
by Ben811
Well, I found another problem when I define a window like this:

<Window Type="TaharezLook/FrameWindow" Name="MoveWindow">
<Property Name="AbsolutePosition" Value="x:100.0 y:100.0" />
<Property Name="AbsoluteMinSize" Value="w:400.0 h:300.0" />
<Property Name="AbsoluteMaxSize" Value="w:400.0 h:300.0" />
<Property Name="Text" Value="Move Window" />
</Window>

Everything seems to be fine, I can resize my render window and the CEGUI window is at position 100 x 100 with the size of 400 x 300 and I can't resize the CEGUI window. That's what I want.

But when I move the CEGUI window with the mouse and then resize the render window afterwards it seems that CEGUI forgot the above settings and the CEGUI window gets adjusted in size with the render window.

Any solutions to this or do I have to change somthing in the properties?

Thanks,

Ben

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Wed Dec 21, 2005 12:32
by lindquist
The window changes size and not just the imagery used to render it?

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Wed Dec 21, 2005 15:32
by Ben811
Well, I have buttons in the app and just added one to the child window. They don't get resized so it should not be the images.
As I said, everything is fine until I move the window. My sugestion is that the absolute position of the window gets changed and then it does not observe the min and max size hints?

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Tue Jan 10, 2006 10:36
by Ben811
Ok, I found the problem and a solution to it.

If you look at the CEGUIWindow source, you will find different variables for the Min/Max size property and the internal Min/Max size variables (ie. Window::d_absMinSizeProperty; for the property but d_maxSize as the window internal variable)

So if you set the property value the internal window value does not get affected.

At each resize the Window::setWindowArea_impl function is called and there the size is restricted to the internal values.

So if you add the following to your code it will work:

m_pkWin = (CEGUI::Window*) CEGUI::WindowManager::getSingleton().getWindow(
(CEGUI::utf8*) "TransformWindow" );

int nWidth = atoi(m_pkWin->getProperty("AbsoluteWidth" ).c_str());
int nHeight = atoi(m_pkWin->getProperty("AbsoluteHeight" ).c_str());

CEGUI::Size size(nWidth, nHeight);
m_pkWin->setMetricsMode(CEGUI::Absolute);
m_pkWin->setSize(size);
m_pkWin->setMinimumSize(size);
m_pkWin->setMaximumSize(size);

And your Window layout should look like:

<Window Type="RealTVLook/FrameWindow" Name="TransformWindow">
<Property Name="AbsolutePosition" Value="x:50.0 y:100.0" />
<Property Name="AbsoluteSize" Value="w:300.0 h:300.0" />
...

This ensures that if you resize your app window the CEGUI elements won't be resized.

To the CEGUI team: I haven't looked for the layout parsing routines but somehow the property "AbsoluteSize" has to affect the internal window values. Maybe you think of this in the next version (If I'm not wrong here and just doing something nasty)...

Cheers,

Ben :D

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Fri Jan 13, 2006 00:56
by baxissimo
I think it would be nice if the demos all used setDisplaySize().

That was one of the first things I noticed about CEGUI based on the demos -- that everthing looked horrible when the window was resized. It would be nice if at least one demo used setDisplaySize() with absolute sizing. Then first time users can see, ah ok it is possible to make my gui resize without everythign getting all blurry or distorted.

Is there an easy way to accomplish global absolute sizing? I mean without going and editing every single size property in the xml files.

Posted: Thu Nov 20, 2008 11:41
by leonardoalt
Ben811

How did you resized Ogre Window?
I am doing this too.
I did SDL resize, CEGUI resize, but I can not do Ogre resize.

How did you do it?

Thanks.

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Mon Jul 27, 2009 12:08
by raymccooney
Hello guys,

I have the same problem as Ben811 in the first post, but all your advises didn't work for me.
Whenever the SDL/OpenGL window is scaled, the CEGUI elements are being scaled as well, whereas I want them to stay fixed in size.

I already did:

// init section:
Imageset *imageset = ImagesetManager::getSingleton().getImageset("TaharezLook");
imageset->setAutoScalingEnabled(false);

// sdl resize part:
case SDL_VIDEORESIZE:
screen = SDL_SetVideoMode(e.resize.w, e.resize.h, colorDepth, SDL_OPENGL|SDL_RESIZABLE);
ceguiRenderer->setDisplaySize(CEGUI::Size(e.resize.w, e.resize.h));
break;


But still the window is scaled :(

Is there anything that I'm missing?

Thanks in advance!

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Mon Jul 27, 2009 18:15
by CrazyEddie
When the host viewport size changes and you notify this to CEGUI, there are two things at work which relate to 'resizing' of UI elements. The first concerns the resizing of the imagery elements that the CEGUI windows and widgets re made up of - this is what is controlled by the auto scaling setting. The second thing that happens is that CEGUI windows (and subsequently any attached child windows) may get resized according to the scale portion of their size - if you do not want this, just make sure your window sizes are all using only the 'offset' part of the size UDim dimensions; these act as absolute pixel sizes so do not change in response to the parent element (in this case the screen or host window) having changed size.

If you're uncertain about the unified dimension system employed by CEGUI, there are various posts on the forum, articles on the wiki and references in the docs that cover that subject.

CE.

Re: Resizing SDL Ogre window without resizing CEGUI elements

Posted: Tue Jul 28, 2009 12:08
by raymccooney
Thanks eddie, that was exactly the solution: Absolute positioning.

Ray McCooney