Uint32 WgMenubar::_getItemAtAbsPos( int x, int y ) { WgCoord pos = ToLocal( WgCoord(x, y) ); if( m_pSkin ) pos = m_pSkin->ContentRect( pos, WG_STATE_NORMAL ).Pos(); if( y > 0 && x > 0 && y < (int) Size().h ) { int bordersWidth = _getEntryBorder().Width(); WgMenuBarItem * pItem = m_items.First(); int item = 1; while( pItem ) { if(pItem->IsVisible()) { x -= pItem->m_width+bordersWidth; if( x < 0 ) return item; } pItem = pItem->Next(); item++; } } return 0; }
bool WgMenubar::_openMenu( int nb ) { WgMenuBarItem * pItem = m_items.Get(nb-1); if( pItem == 0 || !pItem->m_pMenu ) return false; WgCoord pos = ToLocal( WgCoord(0, 0) ); if( m_pSkin ) pos = m_pSkin->ContentRect( pos, WG_STATE_NORMAL ).Pos(); int bordersWidth = _getEntryBorder().Width(); WgMenuBarItem * pI = m_items.First(); while( pI != pItem ) { if( pI->IsVisible() ) pos.x += pI->m_width + bordersWidth; pI = pI->Next(); } WgRect r(pos, pI->m_width+bordersWidth, Size().h ); WgPopupLayer * pLayer = 0; if( Parent() ) pLayer = Parent()->_getPopupLayer(); if( !pLayer ) return false; pLayer->OpenPopup( pItem->m_pMenu, this, r - pLayer->GlobalPos(), WG_SOUTHWEST ); return true; }
Local<Value> ScriptEngine::ExecuteScript(const char * scripts) { Isolate::Scope isolate_scope(getIsoloate()); HandleScope handle_scope(getIsoloate()); Local<Context> context = Local<Context>::New(getIsoloate(), context_); Context::Scope context_scope(context); Local<Value> result; TryCatch try_catch(getIsoloate()); Local<Script> compiled_script; if (!Script::Compile(context, String::NewFromUtf8(getIsoloate(), scripts)).ToLocal(&compiled_script)) { String::Utf8Value error(try_catch.Exception()); return result; } // Run the script! auto val = compiled_script->Run(context); if (!val.ToLocal(&result)) { String::Utf8Value error(try_catch.Exception()); return result; } String::Utf8Value ret(result); KLOG(Info, "V8Script", "---- ExecuteScript %s", *ret); return result; }
void WgPackList::_onEvent( const WgEventPtr& _pEvent, WgEventHandler * pHandler ) { WgState oldState = m_state; switch( _pEvent->Type() ) { case WG_EVENT_MOUSE_MOVE: { WgMouseMoveEventPtr pEvent = WgMouseMoveEvent::Cast(_pEvent); WgCoord ofs = ToLocal(pEvent->PointerGlobalPos()); WgRect headerGeo = _headerGeo(); bool bHeaderHovered = headerGeo.Contains(ofs) && (!pHandler->IsAnyMouseButtonPressed() || (pHandler->IsMouseButtonPressed(WG_BUTTON_LEFT) && m_header.m_bPressed)); if( bHeaderHovered != m_header.m_state.IsHovered() ) { m_header.m_state.SetHovered(bHeaderHovered); _requestRender( headerGeo ); } WgList::_onEvent( _pEvent, pHandler ); break; } case WG_EVENT_MOUSE_LEAVE: { WgMouseLeaveEventPtr pEvent = WgMouseLeaveEvent::Cast(_pEvent); if( pEvent->Widget() == this && m_header.m_state.IsHovered() ) { m_header.m_state.SetPressed(false); m_header.m_state.SetHovered(false); _requestRender( _headerGeo() ); } WgList::_onEvent( _pEvent, pHandler ); break; } case WG_EVENT_MOUSE_PRESS: { WgMousePressEventPtr pEvent = WgMousePressEvent::Cast(_pEvent); WgCoord ofs = ToLocal(pEvent->PointerGlobalPos()); WgRect headerGeo = _headerGeo(); if(pEvent->Button() == WG_BUTTON_LEFT && headerGeo.Contains(ofs)) { m_header.m_bPressed = true; m_header.m_state.SetPressed(true); _requestRender( headerGeo ); pHandler->SwallowEvent( pEvent ); } else WgList::_onEvent( _pEvent, pHandler ); break; } case WG_EVENT_MOUSE_DRAG: { WgMouseDragEventPtr pEvent = WgMouseDragEvent::Cast(_pEvent); if( m_header.m_bPressed ) { WgCoord ofs = ToLocal(pEvent->PointerGlobalPos()); WgRect headerGeo = _headerGeo(); bool bHeaderHovered = headerGeo.Contains(ofs); if( bHeaderHovered != m_header.m_state.IsHovered() ) { m_header.m_state.SetHovered(bHeaderHovered); m_header.m_state.SetPressed(bHeaderHovered); _requestRender( headerGeo ); } pHandler->SwallowEvent(pEvent); } else WgList::_onEvent( _pEvent, pHandler ); break; } case WG_EVENT_MOUSE_RELEASE: { WgMouseReleaseEventPtr pEvent = WgMouseReleaseEvent::Cast(_pEvent); if(pEvent->Button() == WG_BUTTON_LEFT && m_header.m_bPressed ) { m_header.m_bPressed = false; m_header.m_state.SetPressed(false); WgRect headerGeo = _headerGeo(); _requestRender( headerGeo ); WgCoord ofs = ToLocal(pEvent->PointerGlobalPos()); if( headerGeo.Contains(ofs) ) { if( m_sortOrder == WG_SORT_ASCENDING ) m_sortOrder = WG_SORT_DESCENDING; else m_sortOrder = WG_SORT_ASCENDING; _sortEntries(); } pHandler->SwallowEvent(pEvent); } else WgList::_onEvent( _pEvent, pHandler ); break; } case WG_EVENT_KEY_PRESS: { if( m_selectMode == WG_SELECT_NONE ) break; int keyCode = WgKeyPressEvent::Cast(_pEvent)->TranslatedKeyCode(); WgModifierKeys modKeys = WgKeyPressEvent::Cast(_pEvent)->ModKeys(); if( (m_bHorizontal && (keyCode == WG_KEY_LEFT || keyCode == WG_KEY_RIGHT)) || (!m_bHorizontal && (keyCode == WG_KEY_UP || keyCode == WG_KEY_DOWN || keyCode == WG_KEY_PAGE_UP || keyCode == WG_KEY_PAGE_DOWN)) || keyCode == WG_KEY_HOME || keyCode == WG_KEY_END || (m_selectMode == WG_SELECT_FLIP && keyCode == WG_KEY_SPACE ) ) pHandler->SwallowEvent(_pEvent); WgList::_onEvent( _pEvent, pHandler ); break; } case WG_EVENT_KEY_REPEAT: case WG_EVENT_KEY_RELEASE: { if( m_selectMode == WG_SELECT_NONE ) break; int keyCode = WgKeyEvent::Cast(_pEvent)->TranslatedKeyCode(); WgModifierKeys modKeys = WgKeyEvent::Cast(_pEvent)->ModKeys(); if( (m_bHorizontal && (keyCode == WG_KEY_LEFT || keyCode == WG_KEY_RIGHT)) || (!m_bHorizontal && (keyCode == WG_KEY_UP || keyCode == WG_KEY_DOWN || keyCode == WG_KEY_PAGE_UP || keyCode == WG_KEY_PAGE_DOWN)) || keyCode == WG_KEY_HOME || keyCode == WG_KEY_END || (m_selectMode == WG_SELECT_FLIP && keyCode == WG_KEY_SPACE ) ) pHandler->SwallowEvent(_pEvent); WgList::_onEvent( _pEvent, pHandler ); break; } default: WgList::_onEvent(_pEvent, pHandler); return; } if( m_state != oldState ) _onStateChanged(oldState); }