menuItem doesn't change correctly according to mouse cursor?
Posted: Tue Jun 20, 2006 03:52
hi folks, i want to implement a simple menu control with cegui, and the appearance of the menu items should change according to the mouse movement. for example, when the cursor is hovering on the menu item, the color of the menu item becomes dark.
but it seems that things do not go my way. and i have tested that the input is handled correctly. so the problem is most likely due to the wrong definition of the "Area" of the menu items. so could you please help me out?
thanks.
this is the screen shot:
and this is the look and feel definition:
and this is how i add menu in the code:
how i handle the input:
but it seems that things do not go my way. and i have tested that the input is handled correctly. so the problem is most likely due to the wrong definition of the "Area" of the menu items. so could you please help me out?
thanks.
this is the screen shot:
and this is the look and feel definition:
Code: Select all
<WidgetLook name="PolygonStudio/MenuItem">
<ImagerySection name="label">
<TextComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
<VertFormat type="CentreAligned" />
<HorzFormat type="LeftAligned" />
</TextComponent>
</ImagerySection>
<StateImagery name="EnabledNormal">
<Layer>
<Section section="label" >
</Section>
</Layer>
</StateImagery>
<StateImagery name="EnabledHover">
<Layer>
<Section section="label" >
<Colours topLeft="FF7F7F7F" topRight="FF7F7F7F" bottomLeft="FF7F7F7F" bottomRight="FF7F7F7F" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="EnabledPushed">
<Layer>
<Section section="label" >
</Section>
</Layer>
</StateImagery>
<StateImagery name="EnabledPopupOpen">
<Layer>
<Section section="label" />
</Layer>
</StateImagery>
<StateImagery name="DisabledNormal">
<Layer>
<Section section="label" />
</Layer>
</StateImagery>
<StateImagery name="DisabledHover">
<Layer>
<Section section="label" >
<Colours topLeft="FF7F7F7F" topRight="FF7F7F7F" bottomLeft="FF7F7F7F" bottomRight="FF7F7F7F" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="DisabledPushed">
<Layer>
<Section section="label">
<Colours topLeft="FF7F7F7F" topRight="FF7F7F7F" bottomLeft="FF7F7F7F" bottomRight="FF7F7F7F" />
</Section>
</Layer>
</StateImagery>
<StateImagery name="DisabledPopupOpen">
<Layer>
<Section section="label">
<Colours topLeft="FF7F7F7F" topRight="FF7F7F7F" bottomLeft="FF7F7F7F" bottomRight="FF7F7F7F" />
</Section>
</Layer>
</StateImagery>
</WidgetLook>
<WidgetLook name="PolygonStudio/Menubar">
<NamedArea name="ItemRenderArea">
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="120" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
</NamedArea>
<ImagerySection name="frame">
<FrameComponent>
<Area>
<Dim type="LeftEdge" ><AbsoluteDim value="120" /></Dim>
<Dim type="TopEdge" ><AbsoluteDim value="0" /></Dim>
<Dim type="Width" ><UnifiedDim scale="1" type="Width" /></Dim>
<Dim type="Height" ><UnifiedDim scale="1" type="Height" /></Dim>
</Area>
</FrameComponent>
</ImagerySection>
<StateImagery name="Enabled">
<Layer>
<Section section="frame" />
</Layer>
</StateImagery>
<StateImagery name="Disabled">
<Layer>
<Section section="frame" />
</Layer>
</StateImagery>
</WidgetLook>
</Falagard>
and this is how i add menu in the code:
Code: Select all
Menubar* menuBar = static_cast<Menubar*>(wmgr.createWindow("PolygonStudio/Menubar", "Menubar"));
theMainFrame->addChildWindow(menuBar);
menuBar->setText("menu");
menuBar->setPosition(Point(0, 0));
menuBar->setSize(Size(0.5f, 0.02f));
MenuItem* menuFile = static_cast<MenuItem*>(wmgr.createWindow("PolygonStudio/MenuItem", "File"));
menuBar->addItem(menuFile);
menuFile->setText("File");
menuFile->setSize(Size(0.5f, 0.02f));
MenuItem* menuCreate = static_cast<MenuItem*>(wmgr.createWindow("PolygonStudio/MenuItem", "Create"));
menuCreate->setText("Create");
menuBar->addItem(menuCreate);
how i handle the input:
Code: Select all
void inject_input(bool& must_quit)
{
SDL_Event e;
//printf("fuck\n");
// go through all available events
while (SDL_PollEvent(&e))
{
// we use a switch to determine the event type
switch (e.type)
{
// mouse motion handler
case SDL_MOUSEMOTION:
// we inject the mouse position directly.
// printf("fuck");
CEGUI::System::getSingleton().injectMousePosition(static_cast<float>(e.motion.x),static_cast<float>(e.motion.y));
break;
// mouse down handler
case SDL_MOUSEBUTTONDOWN:
// let a special function handle the mouse button down event
//handle_mouse_down(e.button.button);
break;
// mouse up handler
case SDL_MOUSEBUTTONUP:
// let a special function handle the mouse button up event
//handle_mouse_up(e.button.button);
break;
// key down
case SDL_KEYDOWN:
// to tell CEGUI that a key was pressed, we inject the scancode.
CEGUI::System::getSingleton().injectKeyDown(e.key.keysym.scancode);
//exit(0);
// as for the character it's a litte more complicated. we'll use for translated unicode value.
// this is described in more detail below.
printf("%x\n",e.key.keysym.scancode);
if(e.key.keysym.unicode==0x1b) exit(0);
if ((e.key.keysym.unicode & 0xFF80) == 0)
{
CEGUI::System::getSingleton().injectChar(e.key.keysym.unicode & 0x7F);
}
break;
// key up
case SDL_KEYUP:
// like before we inject the scancode directly.
CEGUI::System::getSingleton().injectKeyUp(e.key.keysym.scancode);
break;
case SDL_QUIT:
must_quit = true;
break;
}
}