예제 #1
0
void VLCHolderWnd::DestroyWindow()
{
    LibVlcDetach();

    if( hWnd() )
        ::DestroyWindow( hWnd() );
};
예제 #2
0
void VLCControlsWnd::NeedShowControls()
{
    if( !(GetWindowLong(hWnd(), GWL_STYLE) & WS_VISIBLE) ) {
        if(WM().IsFullScreen() || (PO() && PO()->get_show_toolbar() ) )
            ShowWindow( hWnd(), SW_SHOW );
    }
    //hide controls after 2 seconds
    SetTimer(hWnd(), 1, 2*1000, NULL);
}
예제 #3
0
void VLCControlsWnd::CreateToolTip()
{
    hToolTipWnd = CreateWindowEx(WS_EX_TOPMOST,
            TOOLTIPS_CLASS,
            NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            hWnd(),
            NULL,
            hInstance(),
            NULL);

    SetWindowPos(hToolTipWnd,
            HWND_TOPMOST,
            0, 0, 0, 0,
            SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);


    TOOLINFO ti;
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS|TTF_IDISHWND;
    ti.hwnd   = hWnd();
    ti.hinst  = hInstance();

    TCHAR HintText[100];
    RECT ActivateTTRect;

    //end fullscreen button tooltip
    GetWindowRect(hFSButton, &ActivateTTRect);
    GetWindowText(hFSButton, HintText, sizeof(HintText));
    ti.uId = (UINT_PTR)hFSButton;
    ti.rect = ActivateTTRect;
    ti.lpszText = HintText;
    SendMessage(hToolTipWnd, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);

    //play/pause button tooltip
    GetWindowRect(hPlayPauseButton, &ActivateTTRect);
    GetWindowText(hPlayPauseButton, HintText, sizeof(HintText));
    ti.uId = (UINT_PTR)hPlayPauseButton;
    ti.rect = ActivateTTRect;
    ti.lpszText = HintText;
    SendMessage(hToolTipWnd, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);

    //mute button tooltip
    GetWindowRect(hMuteButton, &ActivateTTRect);
    GetWindowText(hMuteButton, HintText, sizeof(HintText));
    ti.uId = (UINT_PTR)hMuteButton;
    ti.rect = ActivateTTRect;
    ti.lpszText = HintText;
    SendMessage(hToolTipWnd, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
}
예제 #4
0
void VLCControlsWnd::NeedShowControls()
{
    if( PO() &&
        ( ( !WM().IsFullScreen() && PO()->get_show_toolbar() ) ||
          ( WM().IsFullScreen() && PO()->get_show_fs_toolbar() ) ) )
    {
        if( !(GetWindowLong(hWnd(), GWL_STYLE) & WS_VISIBLE) )
            ShowWindow( hWnd(), SW_SHOW );

        //hide controls after 2 seconds
        //and restart timer if it already counting
        SetTimer(hWnd(), 1, 2*1000, NULL);
    }
}
예제 #5
0
LRESULT VLCHolderWnd::WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch( uMsg )
    {
    case WM_CREATE: {
        CREATESTRUCT* CreateStruct = (CREATESTRUCT*) lParam;

        RECT ParentClientRect;
        GetClientRect( CreateStruct->hwndParent, &ParentClientRect );
        MoveWindow( hWnd(), 0, 0,
                    ( ParentClientRect.right-ParentClientRect.left ),
                    ( ParentClientRect.bottom-ParentClientRect.top ), FALSE );
        break;
    }
    case WM_PAINT: {
        PAINTSTRUCT PaintStruct;
        HDC hDC = BeginPaint( hWnd(), &PaintStruct );
        RECT rect;
        GetClientRect( hWnd(), &rect );
        int IconX = ( ( rect.right - rect.left ) - GetSystemMetrics( SM_CXICON ) ) / 2 ;
        int IconY = ( ( rect.bottom - rect.top ) - GetSystemMetrics( SM_CYICON ) ) / 2;
        DrawIcon( hDC, IconX, IconY, RC().hBackgroundIcon );
        EndPaint( hWnd(), &PaintStruct );
        break;
    }
    case WM_SHOWWINDOW: {
        break;
    }
    case WM_TRY_SET_MOUSE_HOOK: {
        MouseHook( true );
        break;
    }
    case WM_SIZE:
        break;
    case WM_MOUSEMOVE:
    case WM_LBUTTONDBLCLK:
        WM().OnMouseEvent( uMsg );
        break;
    case WM_MOUSE_EVENT_NOTIFY: {
        WM().OnMouseEvent( wParam );
        return WM_MOUSE_EVENT_NOTIFY_SUCCESS;
    }
    default:
        return VLCWnd::WindowProc( uMsg, wParam, lParam );
    }
    return 0;
}
예제 #6
0
LRESULT ControlMediaPlayer::Evento_Mouse_Movimiento(const int cX, const int cY, const UINT wParam) {
	UltimoMovimiento = GetTickCount();
	if (EstaEnPantallaCompleta() == true) {
		DWL::SO::DWLMouse::Visible(TRUE);
		RECT  Recta;
		POINT MousePos;
		DWL::SO::DWLMouse::ObtenerPosicion(&MousePos);
		HRGN RMP = CreateRectRgn(0, 0, 0, 0);
		GetWindowRgn(Sistema.App.ControlesMP.hWnd(), RMP);
		
		GetWindowRect(_hWnd, &Recta);
		int x;
		if (Recta.left > 0) x = ((Recta.right - Recta.left) - CONTROLESMP_ANCHO) / 2;
		else				x = (((Recta.right + Recta.left) + CONTROLESMP_ANCHO) / 2) - CONTROLESMP_ANCHO;
		if (ControlesMP_Abajo == true) {
			int y = (Recta.bottom - Recta.top) - CONTROLESMP_ALTO;
			int r = OffsetRgn(RMP, x, y);
			if (PtInRegion(RMP, MousePos.x, MousePos.y) == TRUE) {
				Sistema.App.ControlesMP.Mostrar(_hWnd, ControlesMP_Abajo);
			}
			else {
				Sistema.App.ControlesMP.Ocultar(hWnd());
			}
		}
		else {
			OffsetRgn(RMP, x, 0);
			if (PtInRegion(RMP, MousePos.x, MousePos.y) == TRUE) {
				Sistema.App.ControlesMP.Mostrar(_hWnd, ControlesMP_Abajo);
			}
			else {
				Sistema.App.ControlesMP.Ocultar(hWnd());
			}
		}
		DeleteObject(RMP);
	}
	return 0;
}
예제 #7
0
//libvlc events arrives from separate thread
void VLCHolderWnd::OnLibVlcEvent( const libvlc_event_t* event )
{
    //We need set hook to catch doubleclicking (to switch to fullscreen and vice versa).
    //But libvlc media window may not exist yet,
    //and we don't know when it will be created, nor ThreadId of it.
    //So we try catch events,
    //(suppose wnd will be ever created),
    //and then try set mouse hook.
    HWND hMPWnd = FindMP_hWnd();
    const DWORD WndThreadID =
        hMPWnd ? GetWindowThreadProcessId( hMPWnd, NULL ) : 0;
    //if no hook, or window thread has changed
    if(!_hMouseHook || ( hMPWnd && WndThreadID != _MouseHookThreadId ) ) {
        DWORD s = GetWindowLong( hMPWnd, GWL_STYLE );
        s |= WS_CLIPSIBLINGS;
        SetWindowLong( hMPWnd, GWL_STYLE, s );

        //libvlc events arrives from separate thread,
        //so we need post message to main thread, to notify it.
        PostMessage( hWnd(), WM_TRY_SET_MOUSE_HOOK, 0, 0 );
    }
}
예제 #8
0
void VLCHolderWnd::LibVlcAttach()
{
    if( VP() )
        libvlc_media_player_set_hwnd( VP()->get_mp(), hWnd() );
}
예제 #9
0
HWND VLCHolderWnd::FindMP_hWnd()
{
    return GetWindow( hWnd(), GW_CHILD );
}
예제 #10
0
bool MyApp::initialise(HINSTANCE hInstance, int cmdShow) 
{
	if (!DxApp::initialise(hInstance, cmdShow, 1024, 768))
		return false;

	// Build FXs
	if (FAILED(buildFX())) {
		MessageBox(hWnd(), L"Cannot create effects", L"Error", MB_OK|MB_ICONERROR);
		return false;
	}

	// Build Geometry
	if (FAILED(buildGeometry())) {
		MessageBox(hWnd(), L"Cannot create geometry", L"Error", MB_OK|MB_ICONERROR);
		return false;
	}

	// Textures
	HRESULT hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("noise_texture.jpg")).c_str(), 0, 0, &m_srvRandom, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading random texture", 0, 0);
		return false;
	}


	// flags for heightmap texture
	D3DX11_IMAGE_LOAD_INFO loadInfo;
	loadInfo.Width = D3DX11_DEFAULT;
	loadInfo.Height = D3DX11_DEFAULT;
	loadInfo.Depth = D3DX11_DEFAULT;
	loadInfo.FirstMipLevel = D3DX11_DEFAULT;
	loadInfo.MipLevels = D3DX11_DEFAULT;
	loadInfo.Usage = (D3D11_USAGE)D3DX11_DEFAULT;
	loadInfo.BindFlags =  D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; //D3DX11_DEFAULT;
	loadInfo.CpuAccessFlags = loadInfo.MiscFlags = D3DX11_DEFAULT;
	loadInfo.Format = DXGI_FORMAT_R32G32B32A32_FLOAT           ;
	loadInfo.Filter = D3DX11_DEFAULT;
	loadInfo.MipFilter = D3DX11_DEFAULT;
	loadInfo.pSrcInfo = NULL;

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("heightmap.jpg")).c_str(), &loadInfo, 0, &m_srvTerrainHmap, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading terrain heightmap", 0, 0);
		return false;
	}

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("normalmap.bmp")).c_str(), 0, 0, &m_srvTerrainNmap, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading terrain normalmap", 0, 0);
		return false;
	}

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("space_ship.jpg")).c_str(), 0, 0, &m_srvSpaceship, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading spaceship texture", 0, 0);
		return false;
	}
	

	// Dynamic terrain
	ID3D11Resource* resHmap = 0;
	m_srvTerrainHmap->GetResource(&resHmap);

	D3D11_RENDER_TARGET_VIEW_DESC rtd;
	rtd.Format = DXGI_FORMAT_R32G32B32A32_FLOAT           ;
	rtd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
	rtd.Texture2D.MipSlice = 0;
	hr = _dxDev->CreateRenderTargetView(resHmap, &rtd, &m_rtvDynamicHmap);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error creating hmap rtv", 0, 0);
		return false;
	}
	////////////////////////////////////

	//rs_Wireframe
	D3D11_RASTERIZER_DESC rsd;
	ZeroMemory(&rsd, sizeof(rsd));
	rsd.FillMode = D3D11_FILL_WIREFRAME;
	rsd.CullMode = D3D11_CULL_BACK;
	rsd.DepthClipEnable = true;
	hr = _dxDev->CreateRasterizerState(&rsd, &rs_Wireframe);
	if (FAILED(hr))
		MessageBoxA(0, "error creating rs Wireframe", 0, 0);


	// Camera
	m_camera.setProjection(0.7f, width()/(float)height(), 1.0f, 500.0f);
	m_camera.setPosVector(0.0f, 30.0f, 0.0f);
	m_camera.setRightVector(1.0f, 0.0f, 0.0f);
	m_camera.setUpVector(0.0f,   1.0f, 0.0f);
	m_camera.setLookVector(0.0f, 0.0f, 1.0f);
	

	// myAlien
	myAlien.setPos(0,5,0);
	myAlien.type = AlienTypes::GS_ALIEN;
	myAlien.mesh = alienMesh;

	// Textures/Views for Implicit surfaces
	if (!createImplicitResources())
		return false;

	// Tessellation - control point(s) buffer

		
	//____ check for DX11 support__ 
	if (dx11Support())
	{
		// Single control point vertex buffer
		D3D11_BUFFER_DESC bdsc;
		bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		bdsc.CPUAccessFlags = 0;
		bdsc.MiscFlags = 0;
		bdsc.StructureByteStride = 0;
		bdsc.Usage = D3D11_USAGE_IMMUTABLE;


#ifdef _TESS_INDEX_BUFFER
		// Version 2 : 6 vertices - W/ Index Buffer
		const int numVertices = 6;
		Vertex ctrl_point[numVertices];
		bdsc.ByteWidth = sizeof(Vertex)*numVertices;
		ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); 

		ctrl_point[0].position = XMFLOAT3( 0.0f,  1.0f,  0.0f); // top
		ctrl_point[1].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);	//       1 ------> 2 (+,+)
		ctrl_point[2].position = XMFLOAT3( 1.0f,  0.0f,  1.0f); //      
		ctrl_point[3].position = XMFLOAT3(-1.0f,  0.0f, -1.0f); // 
		ctrl_point[4].position = XMFLOAT3( 1.0f,  0.0f, -1.0f); // (-,-) 3 ------> 4
		ctrl_point[5].position = XMFLOAT3( 0.0f, -1.0f,  0.0f); // bottom

		UINT indices[24];
		//			top-front
		indices[0] = 0; indices[1] = 4; indices[2] = 3;
		//			top-right
		indices[3] = 0; indices[4] = 2; indices[5] = 4;
		//			top-left
		indices[6] = 0; indices[7] = 3; indices[8] = 1;
		//			top-back
		indices[9] = 0; indices[10] = 1; indices[11] = 2;
		//			bottom-front
		indices[12] = 5; indices[13] = 3; indices[14] = 4;
		//			bottom-right
		indices[15] = 5; indices[16] = 4; indices[17] = 2;
		//			bottom-left
		indices[18] = 5; indices[19] = 1; indices[20] = 3;
		//			bottom-back
		indices[21] = 5; indices[22] = 2; indices[23] = 1;

		D3D11_BUFFER_DESC idsc;
		idsc.BindFlags = D3D11_BIND_INDEX_BUFFER;
		idsc.CPUAccessFlags = 0;
		idsc.MiscFlags = 0;
		idsc.StructureByteStride = 0;
		idsc.Usage = D3D11_USAGE_IMMUTABLE;
		idsc.ByteWidth = sizeof(UINT) * 24;
		
		D3D11_SUBRESOURCE_DATA ibdata;
		ibdata.pSysMem = indices;
		ibdata.SysMemPitch = ibdata.SysMemSlicePitch = 0;

		// create index buffer
		hr = _dxDev->CreateBuffer(&idsc, &ibdata, &m_ibControlPoints);
		

#else
		// Version 1 : 24 vertices - No Index Buffer
		const int numVertices = 3*8;  // triangle list - 8 triangles
		Vertex ctrl_point[numVertices];
		bdsc.ByteWidth = sizeof(Vertex) * numVertices; // three control points
		ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); // octahedron
		// CW
		// top - front
		ctrl_point[0].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[1].position = XMFLOAT3( 1.0f, 0.0f, -1.0f);
		ctrl_point[2].position = XMFLOAT3(-1.0f, 0.0f, -1.0f);
		// top - right
		ctrl_point[3].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[4].position = XMFLOAT3( 1.0f, 0.0f,  1.0f);
		ctrl_point[5].position = XMFLOAT3( 1.0f, 0.0f, -1.0f);
		// top - left
		ctrl_point[6].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[7].position = XMFLOAT3(-1.0f, 0.0f, -1.0f);
		ctrl_point[8].position = XMFLOAT3( -1.0f, 0.0f, 1.0f);
		// top - back
		ctrl_point[9].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[10].position = XMFLOAT3(-1.0f, 0.0f,  1.0f);
		ctrl_point[11].position = XMFLOAT3( 1.0f, 0.0f,  1.0f);
		
		// bottom - front
		ctrl_point[12].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[13].position = XMFLOAT3(-1.0f,  0.0f, -1.0f);
		ctrl_point[14].position = XMFLOAT3( 1.0f,  0.0f, -1.0f);
		// bottom - right
		ctrl_point[15].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[16].position = XMFLOAT3( 1.0f,  0.0f, -1.0f);
		ctrl_point[17].position = XMFLOAT3( 1.0f,  0.0f,  1.0f);
		// bottom - left
		ctrl_point[18].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[19].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);
		ctrl_point[20].position = XMFLOAT3(-1.0f,  0.0f, -1.0f);
		// bottom - back
		ctrl_point[21].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[22].position = XMFLOAT3( 1.0f,  0.0f,  1.0f);
		ctrl_point[23].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);
#endif
	
		D3D11_SUBRESOURCE_DATA bdata;
		bdata.pSysMem = ctrl_point;
		bdata.SysMemPitch = bdata.SysMemSlicePitch = 0;

		hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbControlPoints);
		if (FAILED(hr)) {
			MessageBoxA(0, "Error creating control points buffer", 0, 0);
			return false;
		}

		// Bezier surface effect
		if (!createEffect((PATH_SHADERS+string("tessBezierSurface.fxo")).c_str(), &m_fxTessBezierSurface))
			MessageBoxA(0, "Error creating bezSurface effect", 0, 0);




		
		// PSP surface effect
		if (!createEffect((PATH_SHADERS+string("tessPSPSurface.fxo")).c_str(), &m_fxTessPSPSurface))
			MessageBoxA(0, "Error creating pspSurface effect", 0, 0);

		// Sphere effect
		if (!createEffect((PATH_SHADERS+string("tessSphere.fxo")).c_str(), &m_fxTessSphere))
			MessageBoxA(0, "Error creating tessSphere effect", 0, 0);

		// Mesh effect
		if (!createEffect((PATH_SHADERS+string("tessMesh.fxo")).c_str(), &m_fxTessMesh))
			MessageBoxA(0, "Error creating tessMesh effect", 0, 0);

		// Terrain effect
		if (!createEffect((PATH_SHADERS+string("tessTerrain.fxo")).c_str(), &m_fxTessTerrain))
			MessageBoxA(0, "Error creating tessMesh effect", 0, 0);
		
		

		///____SINGLE_________

		ZeroMemory(&bdsc, sizeof(bdsc));
		bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		bdsc.ByteWidth = sizeof(Vertex);
		bdsc.Usage = D3D11_USAGE_IMMUTABLE;
		Vertex vSingle[1];
		ZeroMemory(&vSingle, sizeof(vSingle));
		ZeroMemory(&bdata, sizeof(bdata));
		bdata.pSysMem = vSingle;
		hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbSingle);
		if (FAILED(hr)) MessageBoxA(0, "Error creating single VB", 0, 0);

		if (!createEffect((PATH_SHADERS+string("tessSingle.fxo")).c_str(), &m_fxTessSingle))
			MessageBoxA(0, "Error creating tessSingle effect", 0, 0);
		//_____________________
		
	}

	

	mySphere.tessFactor = 5;
	mySphere.radius = 10.0f;

	setupScene();

	// GUI
	TwInit(TW_DIRECT3D11, _dxDev);

	TwWindowSize(width(), height());
	TwBar* myBar;
	myBar = TwNewBar("myBar");
	

	TwAddButton(myBar, "Play", callback_Play, (void*)this, 0);
	TwAddButton(myBar, "Explode", callback_Explode, (void*)this, 0);


	



	// __________GS Alien
	TwAddVarRW(myBar, "Thorn length", TW_TYPE_FLOAT, &glb_fThornLength, "group=GS_Alien min=0.0 max=1.0 step=0.05");


	// __________Selected Tessellated Object
	
	// Partitioning
	TwEnumVal  twTessPartitioning[] = { { TessPartitioning::FRAC_EVEN, "Frac. Even" }, { TessPartitioning::FRAC_ODD, "Frac. Odd" }, 
										{ TessPartitioning::INTEGER, "Integer" }, { TessPartitioning::POW2 , "Pow2" } };

	TwType twTessPartition;
	twTessPartition = TwDefineEnum("TessPartitioning", twTessPartitioning, 4);
	TwAddVarRW(myBar, "Partitioning Method", twTessPartition, &glb_selectedTessPartitioning, "group=Tessellated_Objects");
	
	// Wireframe
	TwAddVarRW(myBar, "Wireframe", TW_TYPE_BOOL8, &glb_tessWireframe, "group=Tessellated_Objects");
	// Inside Factor
	TwAddVarRW(myBar, "Inside Factor", TW_TYPE_FLOAT, &glb_insideTess, "group=Tessellated_Objects min=1 max=64 step=1");
	// Edge Factor
	TwAddVarRW(myBar, "Edge Factor", TW_TYPE_FLOAT, &glb_edgeTess, "group=Tessellated_Objects min=1 max=64 step=1");
	// Common inside/edge factor
	TwAddVarRW(myBar, "Common Factor", TW_TYPE_FLOAT, &glb_SingleTessFactor, "group=Tessellated_Objects min=1 max=64 step=1");
	TwAddVarRW(myBar, "Single Factor", TW_TYPE_BOOL8, &glb_bSingleTessFactor, "");
	/////////////////////
	
	TwAddVarRW(myBar, "Terrain Height", TW_TYPE_FLOAT, &glb_terrainHeight, "group=Terrain min=0.0 max=1.0 step=0.05");
	TwAddVarRW(myBar, "Patches Dimension", TW_TYPE_INT32, &glb_terrainPatchDim, "group=Terrain min=1 max=10 step=1");

	TwAddVarRW(myBar, "Min Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMinTessFactor, "group=Terrain min=1 max=63 step=1");
	TwAddVarRW(myBar, "Max Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMaxTessFactor, "group=Terrain min=1 max=63 step=1");

	TwAddVarRW(myBar, "Min View Dist", TW_TYPE_FLOAT, &glb_terrainMinViewDist, "group=Terrain min=0.0 max=300.0 step=1.05");
	TwAddVarRW(myBar, "Max View Dist", TW_TYPE_FLOAT, &glb_terrainMaxViewDist, "group=Terrain min=0.0 max=300.0 step=1.05");

	TwAddVarRW(myBar, "Debug View", TW_TYPE_BOOL8, &glb_bTerrainDebugView, "group=Terrain");

	// Terrain Editing
	TwAddVarRW(myBar, "Power", TW_TYPE_BOOL8, &glb_bOn, "group=Terrain_Edit");
	TwAddVarRW(myBar, "Additive", TW_TYPE_BOOL8, &glb_bAdditive, "group=Terrain_Edit");
	TwAddVarRW(myBar, "Range", TW_TYPE_FLOAT, &glb_Range, "group=Terrain_Edit min=0.0 max=1.0 step=0.05");

	// Light
	TwAddVarRW(myBar, "Light Direction", TW_TYPE_DIR3F, &glb_lightDir, "");
	TwAddVarRW(myBar, "Light Color", TW_TYPE_COLOR4F, &glb_lightColor, "");

	// Implicit Depth
	TwAddVarRW(myBar, "Implicit Depth", TW_TYPE_INT32, &glb_iImplicitDepth, "group=Implicit min=1 max=3");

	TwAddVarRW(myBar, "Wireframe Mode", TW_TYPE_BOOL8, &glb_bWireframe, "");
	
	TwAddVarRW(myBar, "Sphere From Mesh", TW_TYPE_BOOL8, &glb_bSphereMesh, "");


	return true;
}
예제 #11
0
void VLCControlsWnd::NeedHideControls()
{
    KillTimer( hWnd(), 1 );
    ShowWindow( hWnd(), SW_HIDE );
}
예제 #12
0
LRESULT VLCControlsWnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg){
        case WM_CREATE:{
            const int ControlsHeight = 21+3;
            const int ButtonsWidth = ControlsHeight;

            int HorizontalOffset = xControlsSpace;
            int ControlWidth = ButtonsWidth;
            hPlayPauseButton =
                CreateWindow(TEXT("BUTTON"), TEXT("Play/Pause"),
                             WS_CHILD|WS_VISIBLE|BS_BITMAP|BS_FLAT,
                             HorizontalOffset, xControlsSpace,
                             ControlWidth, ControlsHeight, hWnd(),
                             (HMENU)ID_FS_PLAY_PAUSE, 0, 0);
            SendMessage(hPlayPauseButton, BM_SETIMAGE,
                        (WPARAM)IMAGE_BITMAP, (LPARAM)RC().hPauseBitmap);
            HorizontalOffset+=ControlWidth+xControlsSpace;

            ControlWidth = 200;
            int VideoPosControlHeight = 10;
            hVideoPosScroll =
                CreateWindow(PROGRESS_CLASS, TEXT("Video Position"),
                             WS_CHILD|WS_DISABLED|WS_VISIBLE|SBS_HORZ|SBS_TOPALIGN|PBS_SMOOTH,
                             HorizontalOffset, xControlsSpace+(ControlsHeight-VideoPosControlHeight)/2,
                             ControlWidth, VideoPosControlHeight, hWnd(),
                             (HMENU)ID_FS_VIDEO_POS_SCROLL, 0, 0);
            HMODULE hThModule = LoadLibrary(TEXT("UxTheme.dll"));
            if(hThModule){
                FARPROC proc = GetProcAddress(hThModule, "SetWindowTheme");
                typedef HRESULT (WINAPI* SetWindowThemeProc)(HWND, LPCWSTR, LPCWSTR);
                if(proc){
                    ((SetWindowThemeProc)proc)(hVideoPosScroll, L"", L"");
                }
                FreeLibrary(hThModule);
            }
            HorizontalOffset+=ControlWidth+xControlsSpace;

            ControlWidth = ButtonsWidth;
            hMuteButton =
                CreateWindow(TEXT("BUTTON"), TEXT("Mute"),
                             WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_PUSHLIKE|BS_BITMAP, //BS_FLAT
                             HorizontalOffset, xControlsSpace,
                             ControlWidth, ControlsHeight,
                             hWnd(), (HMENU)ID_FS_MUTE, 0, 0);
            SendMessage(hMuteButton, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
                        (LPARAM)RC().hVolumeBitmap);
            HorizontalOffset+=ControlWidth+xControlsSpace;

            ControlWidth = 100;
            hVolumeSlider =
                CreateWindow(TRACKBAR_CLASS, TEXT("Volume"),
                             WS_CHILD|WS_VISIBLE|TBS_HORZ|TBS_BOTTOM|TBS_AUTOTICKS,
                             HorizontalOffset, xControlsSpace,
                             ControlWidth, ControlsHeight - 4, hWnd(),
                             (HMENU)ID_FS_VOLUME, 0, 0);
            HorizontalOffset+=ControlWidth+xControlsSpace;
            SendMessage(hVolumeSlider, TBM_SETRANGE, FALSE, (LPARAM) MAKELONG (0, 100));
            SendMessage(hVolumeSlider, TBM_SETTICFREQ, (WPARAM) 10, 0);

            ControlWidth = ButtonsWidth;
            DWORD dwFSBtnStyle = WS_CHILD|BS_BITMAP|BS_FLAT;
            if( !PO() || PO()->get_enable_fs() ){
                dwFSBtnStyle |= WS_VISIBLE;
            }
            hFSButton =
                CreateWindow(TEXT("BUTTON"), TEXT("Toggle fullscreen"),
                             dwFSBtnStyle,
                             HorizontalOffset, xControlsSpace,
                             ControlWidth, ControlsHeight, hWnd(),
                             (HMENU)ID_FS_SWITCH_FS, 0, 0);
            SendMessage(hFSButton, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
                        (LPARAM)RC().hDeFullscreenBitmap);
            HorizontalOffset+=ControlWidth+xControlsSpace;

            RECT rect;
            GetClientRect(GetParent(hWnd()), &rect);

            int ControlWndWidth = HorizontalOffset;
            int ControlWndHeight = xControlsSpace+ControlsHeight+xControlsSpace;
            SetWindowPos(hWnd(), 0,
                         0, (rect.bottom - rect.top) - ControlWndWidth,
                         rect.right-rect.left, ControlWndHeight,
                         SWP_NOZORDER|SWP_NOOWNERZORDER|SWP_NOACTIVATE);

            //new message blinking timer
            SetTimer(hWnd(), 2, 500, NULL);

            CreateToolTip();

            break;
        }
        case WM_SHOWWINDOW:{
            if(FALSE!=wParam){ //showing
                UpdateButtons();
            }
            break;
        }
        case WM_LBUTTONUP:{
            POINT BtnUpPoint = {LOWORD(lParam), HIWORD(lParam)};
            RECT VideoPosRect;
            GetWindowRect(hVideoPosScroll, &VideoPosRect);
            ClientToScreen(hWnd(), &BtnUpPoint);
            if(PtInRect(&VideoPosRect, BtnUpPoint)){
                SetVideoPos(float(BtnUpPoint.x-VideoPosRect.left)/(VideoPosRect.right-VideoPosRect.left));
            }
            break;
        }
        case WM_TIMER:{
            switch(wParam){
                case 1:{
                    POINT MousePoint;
                    GetCursorPos(&MousePoint);
                    RECT ControlWndRect;
                    GetWindowRect(hWnd(), &ControlWndRect);
                    if(PtInRect(&ControlWndRect, MousePoint)||GetCapture()==hVolumeSlider){
                        //do not allow control window to close while mouse is within
                        NeedShowControls();
                    }
                    else{
                        NeedHideControls();
                    }
                    break;
                }
                case 2:{
                    UpdateButtons();
                    break;
                }
            }
            break;
        }
        case WM_SETCURSOR:{
            RECT VideoPosRect;
            GetWindowRect(hVideoPosScroll, &VideoPosRect);
            DWORD dwMsgPos = GetMessagePos();
            POINT MsgPosPoint = {LOWORD(dwMsgPos), HIWORD(dwMsgPos)};
            if(PtInRect(&VideoPosRect, MsgPosPoint)){
                SetCursor(LoadCursor(NULL, IDC_HAND));
                return TRUE;
            }
            else{
                return VLCWnd::WindowProc(uMsg, wParam, lParam);
            }
            break;
        }
        case WM_NCDESTROY:
            break;
        case WM_COMMAND:{
            WORD NCode = HIWORD(wParam);
            WORD Control = LOWORD(wParam);
            switch(NCode){
                case BN_CLICKED:{
                    switch(Control){
                        case ID_FS_SWITCH_FS:
                            WM().ToggleFullScreen();
                            break;
                        case ID_FS_PLAY_PAUSE:{
                            if( VP() ){
                                if( IsPlaying() )
                                    VP()->pause();
                                else
                                    VP()->play();
                            }
                            break;
                        }
                        case ID_FS_MUTE:{
                            if( VP() ){
                                VP()->audio().set_mute( IsDlgButtonChecked(hWnd(), ID_FS_MUTE) != FALSE );
                                SyncVolumeSliderWithVLCVolume();
                            }
                            break;
                        }
                    }
                    break;
                }
            }
            break;
        }
        case WM_SIZE:{
            if( (GetWindowLong(hWnd(), GWL_STYLE) & WS_VISIBLE) &&
                ( !PO() ||
                  ( !WM().IsFullScreen() && !PO()->get_show_toolbar() ) ||
                  ( WM().IsFullScreen() && !PO()->get_show_fs_toolbar() ) ) )
            {
                //hide controls when they are not allowed
                NeedHideControls();
            }

            const int new_client_width = LOWORD(lParam);

            bool isFSBtnVisible =
                (GetWindowLong(hFSButton, GWL_STYLE) & WS_VISIBLE) != 0;

            HDWP hDwp = BeginDeferWindowPos(4);

            int VideoScrollWidth = new_client_width;

            POINT pt = {0, 0};
            RECT rect;
            GetWindowRect(hPlayPauseButton, &rect);
            pt.x = rect.right;
            ScreenToClient(hWnd(), &pt);
            VideoScrollWidth -= pt.x;
            VideoScrollWidth -= xControlsSpace;

            RECT VideoSrcollRect;
            GetWindowRect(hVideoPosScroll, &VideoSrcollRect);

            RECT MuteRect;
            GetWindowRect(hMuteButton, &MuteRect);
            VideoScrollWidth -= xControlsSpace;
            VideoScrollWidth -= (MuteRect.right - MuteRect.left);

            RECT VolumeRect;
            GetWindowRect(hVolumeSlider, &VolumeRect);
            VideoScrollWidth -= xControlsSpace;
            VideoScrollWidth -= (VolumeRect.right - VolumeRect.left);

            RECT FSRect = {0, 0, 0, 0};
            if( isFSBtnVisible ) {
                GetWindowRect(hFSButton, &FSRect);
                VideoScrollWidth -= xControlsSpace;
                VideoScrollWidth -= (FSRect.right - FSRect.left);
                VideoScrollWidth -= xControlsSpace;
            }

            pt.x = VideoSrcollRect.left;
            pt.y = VideoSrcollRect.top;
            ScreenToClient(hWnd(), &pt);
            hDwp = DeferWindowPos(hDwp, hVideoPosScroll, 0, pt.x, pt.y,
                                  VideoScrollWidth,
                                  VideoSrcollRect.bottom - VideoSrcollRect.top,
                                  SWP_NOACTIVATE|SWP_NOOWNERZORDER);

            int HorizontalOffset =
                pt.x + VideoScrollWidth + xControlsSpace;
            pt.x = 0;
            pt.y = MuteRect.top;
            ScreenToClient(hWnd(), &pt);
            hDwp = DeferWindowPos(hDwp, hMuteButton, 0,
                                  HorizontalOffset, pt.y, 0, 0,
                                  SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOOWNERZORDER);
            HorizontalOffset +=
                MuteRect.right - MuteRect.left + xControlsSpace;

            pt.x = 0;
            pt.y = VolumeRect.top;
            ScreenToClient(hWnd(), &pt);
            hDwp = DeferWindowPos(hDwp, hVolumeSlider, 0,
                                  HorizontalOffset, pt.y, 0, 0,
                                  SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOOWNERZORDER);
            HorizontalOffset +=
                VolumeRect.right - VolumeRect.left + xControlsSpace;

            if( isFSBtnVisible ) {
                pt.x = 0;
                pt.y = FSRect.top;
                ScreenToClient(hWnd(), &pt);
                hDwp = DeferWindowPos(hDwp, hFSButton, 0,
                                      HorizontalOffset, pt.y, 0, 0,
                                      SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOOWNERZORDER);
            }

            EndDeferWindowPos(hDwp);
            break;
        }
        case WM_HSCROLL:
        case WM_VSCROLL: {
            if( VP() ){
                if(hVolumeSlider==(HWND)lParam){
                    LRESULT SliderPos = SendMessage(hVolumeSlider, (UINT) TBM_GETPOS, 0, 0);
                    SetVLCVolumeBySliderPos(SliderPos);
                }
            }
            break;
        }
        default:
            return VLCWnd::WindowProc(uMsg, wParam, lParam);
    }
    return 0L;
}