void CommonManage(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; /* We used to call the Win32 PeekMessage function here to read the window * messages. But since window can stay blocked into this function for a * long time (for example when you move your window on the screen), I * decided to isolate PeekMessage in another thread. */ /* If we do not control our window, we check for geometry changes * ourselves because the parent might not send us its events. */ if (sys->hparent) { RECT rect_parent; POINT point; GetClientRect(sys->hparent, &rect_parent); point.x = point.y = 0; ClientToScreen(sys->hparent, &point); OffsetRect(&rect_parent, point.x, point.y); if (!EqualRect(&rect_parent, &sys->rect_parent)) { sys->rect_parent = rect_parent; /* FIXME I find such #ifdef quite weirds. Are they really needed ? */ #if defined(MODULE_NAME_IS_direct3d) || defined(MODULE_NAME_IS_wingdi) || defined(MODULE_NAME_IS_wingapi) SetWindowPos(sys->hwnd, 0, 0, 0, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, SWP_NOZORDER); UpdateRects(vd, NULL, NULL, true); #else /* This one is to force the update even if only * the position has changed */ SetWindowPos(sys->hwnd, 0, 1, 1, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, 0); SetWindowPos(sys->hwnd, 0, 0, 0, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, 0); #endif } } /* */ if (EventThreadGetAndResetHasMoved(sys->event)) UpdateRects(vd, NULL, NULL, false); }
void CUISlider::SetRange(int nMin, int nMax) { m_nMin = nMin; m_nMax = __max(nMax,nMin); SetValue(m_nValue); UpdateRects(); }
/** * It reset the Direct3D9 device and its resources. */ static int Direct3DReset(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; LPDIRECT3DDEVICE9 d3ddev = sys->d3ddev; if (Direct3DFillPresentationParameters(vd)) return VLC_EGENERIC; /* release all D3D objects */ Direct3DDestroyResources(vd); /* */ HRESULT hr = IDirect3DDevice9_Reset(d3ddev, &sys->d3dpp); if (FAILED(hr)) { msg_Err(vd, "%s failed ! (hr=%08lX)", __FUNCTION__, hr); return VLC_EGENERIC; } UpdateRects(vd, NULL, NULL, true); /* re-create them */ if (Direct3DCreateResources(vd, &vd->fmt)) { msg_Dbg(vd, "%s failed !", __FUNCTION__); return VLC_EGENERIC; } return VLC_SUCCESS; }
void CommonManage(vout_display_t *vd) { vout_display_sys_t *sys = vd->sys; /* We used to call the Win32 PeekMessage function here to read the window * messages. But since window can stay blocked into this function for a * long time (for example when you move your window on the screen), I * decided to isolate PeekMessage in another thread. */ /* If we do not control our window, we check for geometry changes * ourselves because the parent might not send us its events. */ if (sys->hparent) { RECT rect_parent; POINT point; /* Check if the parent window has resized or moved */ GetClientRect(sys->hparent, &rect_parent); point.x = point.y = 0; ClientToScreen(sys->hparent, &point); OffsetRect(&rect_parent, point.x, point.y); if (!EqualRect(&rect_parent, &sys->rect_parent)) { sys->rect_parent = rect_parent; /* This code deals with both resize and move * * For most drivers(direct3d, gdi, opengl), move is never * an issue. The surface automatically gets moved together * with the associated window (hvideownd) * * For directx, it is still important to call UpdateRects * on a move of the parent window, even if no resize occurred */ SetWindowPos(sys->hwnd, 0, 0, 0, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, SWP_NOZORDER); UpdateRects(vd, NULL, NULL, true); } } /* HasMoved means here resize or move */ if (EventThreadGetAndResetHasMoved(sys->event)) UpdateRects(vd, NULL, NULL, false); }
//-------------------------------------------------------------------------------------- DXUTAPI void CDXUTIMEEditBox::Render(_In_ float fElapsedTime) { if (m_bVisible == false) return; // If we have not computed the indicator symbol width, // do it. if (!m_nIndicatorWidth) { RECT rc = { 0, 0, 0, 0 }; m_pDialog->CalcTextRect(L"En", m_Elements[9], &rc); m_nIndicatorWidth = rc.right - rc.left; // Update the rectangles now that we have the indicator's width UpdateRects(); } // Let the parent render first (edit control) CDXUTEditBox::Render(fElapsedTime); CDXUTElement* pElement = GetElement(1); if (pElement) { s_CompString.SetFontNode(m_pDialog->GetFont(pElement->iFont)); s_CandList.HoriCand.SetFontNode(m_pDialog->GetFont(pElement->iFont)); } // // Now render the IME elements // ImeUi_RenderUI(); if (m_bHasFocus) { // Render the input locale indicator RenderIndicator(fElapsedTime); // Display the composition string. // This method should also update s_ptCompString // for RenderCandidateReadingWindow. RenderComposition(); // Display the reading/candidate window. RenderCandidateReadingWindow() // uses s_ptCompString to position itself. s_ptCompString must have // been filled in by RenderComposition(). if (ImeUi_IsShowReadingWindow()) // Reading window RenderCandidateReadingWindow(true); else if (ImeUi_IsShowCandListWindow()) // Candidate list window RenderCandidateReadingWindow(false); } }
bool CUIProgress::SetValue(int nValue) { nValue = __max(m_nMin, nValue); nValue = __min(m_nMax, nValue); if(nValue == m_nValue) return false; m_nValue = nValue; UpdateRects(); return true; }
/** * It creates a Direct3D device and the associated resources. */ static int Direct3DOpen(vout_display_t *vd, video_format_t *fmt) { vout_display_sys_t *sys = vd->sys; LPDIRECT3D9 d3dobj = sys->d3dobj; if (Direct3DFillPresentationParameters(vd)) return VLC_EGENERIC; // Create the D3DDevice LPDIRECT3DDEVICE9 d3ddev; UINT AdapterToUse = D3DADAPTER_DEFAULT; D3DDEVTYPE DeviceType = D3DDEVTYPE_HAL; #ifndef NDEBUG // Look for 'NVIDIA PerfHUD' adapter // If it is present, override default settings for (UINT Adapter=0; Adapter< IDirect3D9_GetAdapterCount(d3dobj); ++Adapter) { D3DADAPTER_IDENTIFIER9 Identifier; HRESULT Res; Res = IDirect3D9_GetAdapterIdentifier(d3dobj,Adapter,0,&Identifier); if (strstr(Identifier.Description,"PerfHUD") != 0) { AdapterToUse = Adapter; DeviceType = D3DDEVTYPE_REF; break; } } #endif HRESULT hr = IDirect3D9_CreateDevice(d3dobj, AdapterToUse, DeviceType, sys->hvideownd, D3DCREATE_SOFTWARE_VERTEXPROCESSING| D3DCREATE_MULTITHREADED, &sys->d3dpp, &d3ddev); if (FAILED(hr)) { msg_Err(vd, "Could not create the D3D device! (hr=0x%lX)", hr); return VLC_EGENERIC; } sys->d3ddev = d3ddev; UpdateRects(vd, NULL, NULL, true); if (Direct3DCreateResources(vd, fmt)) { msg_Err(vd, "Failed to allocate resources"); return VLC_EGENERIC; } /* Change the window title bar text */ EventThreadUpdateTitle(sys->event, VOUT_TITLE " (Direct3D output)"); msg_Dbg(vd, "Direct3D device adapter successfully initialized"); return VLC_SUCCESS; }
//----------------------------------------------------------------------------- // Name : SetValueInternal() //----------------------------------------------------------------------------- void CSliderUI::SetValueInternal( int nValue, bool bFromInput ) { // Clamp to range nValue = __max( m_nMin, nValue ); nValue = __min( m_nMax, nValue ); if( nValue == m_nValue ) return; m_nValue = nValue; UpdateRects(); m_sliderChangedSig(this); //m_pDialog->SendEvent( EVENT_SLIDER_VALUE_CHANGED, bFromInput, this ); }
void CGM_Slider::SetValueInternal( int iValue, bool bFromInput ) { // Clamp to range iValue = iValue < m_iMin ? m_iMin : iValue; // max( m_iMin, iValue ); iValue = m_iMax < iValue ? m_iMax : iValue; // min( m_iMax, iValue ); if( iValue == m_iValue ) return; m_iValue = iValue; UpdateRects(); m_pDialog->SendEvent( CGM_Event::SLIDER_VALUE_CHANGED, bFromInput, this ); if( m_pRenderer ) m_pRenderer->OnSliderValueChanged( *this ); }
int CommonControl(vout_display_t *vd, int query, va_list args) { vout_display_sys_t *sys = vd->sys; switch (query) { case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE: /* const vout_display_cfg_t *p_cfg, int is_forced */ case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED: /* const vout_display_cfg_t *p_cfg */ case VOUT_DISPLAY_CHANGE_ZOOM: /* const vout_display_cfg_t *p_cfg */ case VOUT_DISPLAY_CHANGE_SOURCE_ASPECT: /* const video_format_t *p_source */ case VOUT_DISPLAY_CHANGE_SOURCE_CROP: { /* const video_format_t *p_source */ const vout_display_cfg_t *cfg; const video_format_t *source; bool is_forced = true; if (query == VOUT_DISPLAY_CHANGE_SOURCE_CROP || query == VOUT_DISPLAY_CHANGE_SOURCE_ASPECT) { cfg = vd->cfg; source = va_arg(args, const video_format_t *); } else { cfg = va_arg(args, const vout_display_cfg_t *); source = &vd->source; if (query == VOUT_DISPLAY_CHANGE_DISPLAY_SIZE) is_forced = va_arg(args, int); } if (query == VOUT_DISPLAY_CHANGE_DISPLAY_SIZE && is_forced) { /* Update dimensions */ if (sys->parent_window) { vout_window_SetSize(sys->parent_window, cfg->display.width, cfg->display.height); } else { RECT rect_window; rect_window.top = 0; rect_window.left = 0; rect_window.right = cfg->display.width; rect_window.bottom = cfg->display.height; AdjustWindowRect(&rect_window, EventThreadGetWindowStyle(sys->event), 0); SetWindowPos(sys->hwnd, 0, 0, 0, rect_window.right - rect_window.left, rect_window.bottom - rect_window.top, SWP_NOMOVE); } return VLC_EGENERIC; } UpdateRects(vd, cfg, source, is_forced); return VLC_SUCCESS; }
static int DirectXOpen(vout_display_t *vd, video_format_t *fmt) { vout_display_sys_t *sys = vd->sys; assert(!sys->ddobject); assert(!sys->display); assert(!sys->clipper); /* Initialise DirectDraw */ if (DirectXOpenDDraw(vd)) { msg_Err(vd, "cannot initialize DirectX DirectDraw"); return VLC_EGENERIC; } /* Create the directx display */ if (DirectXOpenDisplay(vd)) { msg_Err(vd, "cannot initialize DirectX DirectDraw"); return VLC_EGENERIC; } UpdateRects(vd, NULL, NULL, true); /* Create the picture pool */ if (DirectXCreatePool(vd, &sys->use_overlay, fmt)) { msg_Err(vd, "cannot create any DirectX surface"); return VLC_EGENERIC; } /* */ if (sys->use_overlay) DirectXUpdateOverlay(vd, NULL); EventThreadUseOverlay(sys->event, sys->use_overlay); /* Change the window title bar text */ const char *fallback; if (sys->use_overlay) fallback = VOUT_TITLE " (hardware YUV overlay DirectX output)"; else if (vlc_fourcc_IsYUV(fmt->i_chroma)) fallback = VOUT_TITLE " (hardware YUV DirectX output)"; else fallback = VOUT_TITLE " (software RGB DirectX output)"; EventThreadUpdateTitle(sys->event, fallback); return VLC_SUCCESS; }
CGM_Slider::CGM_Slider( CGM_Dialog *pDialog, CGM_SliderDesc *pDesc ) : CGM_Control( pDialog, pDesc ) { m_iMax = pDesc->iMax; m_iMin = pDesc->iMin; m_iValue = pDesc->iInitialValue; m_iShiftAmount = 1; UpdateRects(); m_aInputCode[ IC_INCREASE ] = CGM_Input::SHIFT_FOCUS_RIGHT; m_aInputCode[ IC_DECREASE ] = CGM_Input::SHIFT_FOCUS_LEFT; // Have to set up custom keybind because GIC_RIGHT & GIC_LEFT are used // as CGM_Input::SHIFT_FOCUS_RIGHT & CGM_Input::SHIFT_FOCUS_LEFT by default // Setting up this custom keybind also makes CGM_Slider dependent on Input module m_pKeybind.reset( new CGM_SmallKeybind ); m_pKeybind->Assign( GIC_RIGHT, CGM_Input::INCREASE_SLIDER_VALUE ); m_pKeybind->Assign( GIC_LEFT, CGM_Input::DECREASE_SLIDER_VALUE ); }
static int Init(vout_display_t *vd, video_format_t *fmt) { vout_display_sys_t *sys = vd->sys; /* */ RECT *display = &sys->sys.rect_display; display->left = 0; display->top = 0; display->right = GetSystemMetrics(SM_CXSCREEN);; display->bottom = GetSystemMetrics(SM_CYSCREEN);; /* Initialize an offscreen bitmap for direct buffer operations. */ /* */ HDC window_dc = GetDC(sys->sys.hvideownd); /* */ sys->i_depth = GetDeviceCaps(window_dc, PLANES) * GetDeviceCaps(window_dc, BITSPIXEL); /* */ msg_Dbg(vd, "GDI depth is %i", sys->i_depth); switch (sys->i_depth) { case 8: fmt->i_chroma = VLC_CODEC_RGB8; break; case 15: fmt->i_chroma = VLC_CODEC_RGB15; fmt->i_rmask = 0x7c00; fmt->i_gmask = 0x03e0; fmt->i_bmask = 0x001f; break; case 16: fmt->i_chroma = VLC_CODEC_RGB16; fmt->i_rmask = 0xf800; fmt->i_gmask = 0x07e0; fmt->i_bmask = 0x001f; break; case 24: fmt->i_chroma = VLC_CODEC_RGB24; fmt->i_rmask = 0x00ff0000; fmt->i_gmask = 0x0000ff00; fmt->i_bmask = 0x000000ff; break; case 32: fmt->i_chroma = VLC_CODEC_RGB32; fmt->i_rmask = 0x00ff0000; fmt->i_gmask = 0x0000ff00; fmt->i_bmask = 0x000000ff; break; default: msg_Err(vd, "screen depth %i not supported", sys->i_depth); return VLC_EGENERIC; } void *p_pic_buffer; int i_pic_pitch; /* Initialize offscreen bitmap */ BITMAPINFO *bi = &sys->bitmapinfo; memset(bi, 0, sizeof(BITMAPINFO) + 3 * sizeof(RGBQUAD)); if (sys->i_depth > 8) { ((DWORD*)bi->bmiColors)[0] = fmt->i_rmask; ((DWORD*)bi->bmiColors)[1] = fmt->i_gmask; ((DWORD*)bi->bmiColors)[2] = fmt->i_bmask;; } BITMAPINFOHEADER *bih = &sys->bitmapinfo.bmiHeader; bih->biSize = sizeof(BITMAPINFOHEADER); bih->biSizeImage = 0; bih->biPlanes = 1; bih->biCompression = (sys->i_depth == 15 || sys->i_depth == 16) ? BI_BITFIELDS : BI_RGB; bih->biBitCount = sys->i_depth; bih->biWidth = fmt->i_width; bih->biHeight = -fmt->i_height; bih->biClrImportant = 0; bih->biClrUsed = 0; bih->biXPelsPerMeter = 0; bih->biYPelsPerMeter = 0; i_pic_pitch = bih->biBitCount * bih->biWidth / 8; sys->off_bitmap = CreateDIBSection(window_dc, (BITMAPINFO *)bih, DIB_RGB_COLORS, &p_pic_buffer, NULL, 0); sys->off_dc = CreateCompatibleDC(window_dc); SelectObject(sys->off_dc, sys->off_bitmap); ReleaseDC(sys->sys.hvideownd, window_dc); if (!sys->sys.b_windowless) EventThreadUpdateTitle(sys->sys.event, VOUT_TITLE " (WinGDI output)"); /* */ picture_resource_t rsc; memset(&rsc, 0, sizeof(rsc)); rsc.p[0].p_pixels = p_pic_buffer; rsc.p[0].i_lines = fmt->i_height; rsc.p[0].i_pitch = i_pic_pitch;; picture_t *picture = picture_NewFromResource(fmt, &rsc); if (picture != NULL) sys->sys.pool = picture_pool_New(1, &picture); else sys->sys.pool = NULL; UpdateRects(vd, true); return VLC_SUCCESS; }
int CommonControl(vout_display_t *vd, int query, va_list args) { vout_display_sys_t *sys = vd->sys; switch (query) { case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE: /* const vout_display_cfg_t *p_cfg */ { /* Update dimensions */ const vout_display_cfg_t *cfg = va_arg(args, const vout_display_cfg_t *); RECT rect_window = { .top = 0, .left = 0, .right = cfg->display.width, .bottom = cfg->display.height, }; AdjustWindowRect(&rect_window, EventThreadGetWindowStyle(sys->event), 0); SetWindowPos(sys->hwnd, 0, 0, 0, rect_window.right - rect_window.left, rect_window.bottom - rect_window.top, SWP_NOMOVE); UpdateRects(vd, cfg, NULL, false); return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED: /* const vout_display_cfg_t *p_cfg */ case VOUT_DISPLAY_CHANGE_ZOOM: /* const vout_display_cfg_t *p_cfg */ case VOUT_DISPLAY_CHANGE_SOURCE_ASPECT: /* const video_format_t *p_source */ case VOUT_DISPLAY_CHANGE_SOURCE_CROP: { /* const video_format_t *p_source */ const vout_display_cfg_t *cfg; if (query == VOUT_DISPLAY_CHANGE_SOURCE_CROP || query == VOUT_DISPLAY_CHANGE_SOURCE_ASPECT) { const video_format_t *source = va_arg(args, const video_format_t *); cfg = vd->cfg; UpdateRects(vd, cfg, source, true); } else { cfg = va_arg(args, const vout_display_cfg_t *); UpdateRects(vd, cfg, NULL, false); } return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_WINDOW_STATE: { /* unsigned state */ const unsigned state = va_arg(args, unsigned); const bool is_on_top = (state & VOUT_WINDOW_STATE_ABOVE) != 0; #ifdef MODULE_NAME_IS_direct3d9 if (sys->use_desktop && is_on_top) return VLC_EGENERIC; #endif HMENU hMenu = GetSystemMenu(sys->hwnd, FALSE); if (is_on_top && !(GetWindowLong(sys->hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)) { CheckMenuItem(hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND | MFS_CHECKED); SetWindowPos(sys->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); } else if (!is_on_top && (GetWindowLong(sys->hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST)) { CheckMenuItem(hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND | MFS_UNCHECKED); SetWindowPos(sys->hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE); } sys->is_on_top = is_on_top; return VLC_SUCCESS; } case VOUT_DISPLAY_CHANGE_FULLSCREEN: { bool fs = va_arg(args, int); if (CommonControlSetFullscreen(vd, fs)) return VLC_EGENERIC; UpdateRects(vd, NULL, NULL, false); return VLC_SUCCESS; } case VOUT_DISPLAY_HIDE_MOUSE: EventThreadMouseHide(sys->event); return VLC_SUCCESS; case VOUT_DISPLAY_RESET_PICTURES: vlc_assert_unreachable(); default: return VLC_EGENERIC; } }
void CommonManage(vout_display_t *vd) { UpdateRects(vd, NULL, NULL, false); }
void CommonManage( vout_thread_t *p_vout ) { /* If we do not control our window, we check for geometry changes * ourselves because the parent might not send us its events. */ vlc_mutex_lock( &p_vout->p_sys->lock ); if( p_vout->p_sys->hparent && !p_vout->b_fullscreen ) { RECT rect_parent; POINT point; vlc_mutex_unlock( &p_vout->p_sys->lock ); GetClientRect( p_vout->p_sys->hparent, &rect_parent ); point.x = point.y = 0; ClientToScreen( p_vout->p_sys->hparent, &point ); OffsetRect( &rect_parent, point.x, point.y ); if( !EqualRect( &rect_parent, &p_vout->p_sys->rect_parent ) ) { p_vout->p_sys->rect_parent = rect_parent; /* FIXME I find such #ifdef quite weirds. Are they really needed ? */ #if defined(MODULE_NAME_IS_direct3d) SetWindowPos( p_vout->p_sys->hwnd, 0, 0, 0, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, SWP_NOZORDER ); UpdateRects( p_vout, true ); #else /* This one is to force the update even if only * the position has changed */ SetWindowPos( p_vout->p_sys->hwnd, 0, 1, 1, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, 0 ); SetWindowPos( p_vout->p_sys->hwnd, 0, 0, 0, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, 0 ); #if defined(MODULE_NAME_IS_wingdi) || defined(MODULE_NAME_IS_wingapi) unsigned int i_x, i_y, i_width, i_height; vout_PlacePicture( p_vout, rect_parent.right - rect_parent.left, rect_parent.bottom - rect_parent.top, &i_x, &i_y, &i_width, &i_height ); SetWindowPos( p_vout->p_sys->hvideownd, HWND_TOP, i_x, i_y, i_width, i_height, 0 ); #endif #endif } } else { vlc_mutex_unlock( &p_vout->p_sys->lock ); } /* autoscale toggle */ if( p_vout->i_changes & VOUT_SCALE_CHANGE ) { p_vout->i_changes &= ~VOUT_SCALE_CHANGE; p_vout->b_autoscale = var_GetBool( p_vout, "autoscale" ); p_vout->i_zoom = (int) ZOOM_FP_FACTOR; UpdateRects( p_vout, true ); } /* scaling factor */ if( p_vout->i_changes & VOUT_ZOOM_CHANGE ) { p_vout->i_changes &= ~VOUT_ZOOM_CHANGE; p_vout->b_autoscale = false; p_vout->i_zoom = (int)( ZOOM_FP_FACTOR * var_GetFloat( p_vout, "scale" ) ); UpdateRects( p_vout, true ); } /* Check for cropping / aspect changes */ if( p_vout->i_changes & VOUT_CROP_CHANGE || p_vout->i_changes & VOUT_ASPECT_CHANGE ) { p_vout->i_changes &= ~VOUT_CROP_CHANGE; p_vout->i_changes &= ~VOUT_ASPECT_CHANGE; p_vout->fmt_out.i_x_offset = p_vout->fmt_in.i_x_offset; p_vout->fmt_out.i_y_offset = p_vout->fmt_in.i_y_offset; p_vout->fmt_out.i_visible_width = p_vout->fmt_in.i_visible_width; p_vout->fmt_out.i_visible_height = p_vout->fmt_in.i_visible_height; p_vout->fmt_out.i_aspect = p_vout->fmt_in.i_aspect; p_vout->fmt_out.i_sar_num = p_vout->fmt_in.i_sar_num; p_vout->fmt_out.i_sar_den = p_vout->fmt_in.i_sar_den; p_vout->output.i_aspect = p_vout->fmt_in.i_aspect; UpdateRects( p_vout, true ); } /* We used to call the Win32 PeekMessage function here to read the window * messages. But since window can stay blocked into this function for a * long time (for example when you move your window on the screen), I * decided to isolate PeekMessage in another thread. */ /* * Fullscreen change */ if( p_vout->i_changes & VOUT_FULLSCREEN_CHANGE || p_vout->p_sys->i_changes & VOUT_FULLSCREEN_CHANGE ) { Win32ToggleFullscreen( p_vout ); p_vout->i_changes &= ~VOUT_FULLSCREEN_CHANGE; p_vout->p_sys->i_changes &= ~VOUT_FULLSCREEN_CHANGE; } /* * Pointer change */ EventThreadMouseAutoHide( p_vout->p_sys->p_event ); /* * "Always on top" status change */ if( p_vout->p_sys->b_on_top_change ) { HMENU hMenu = GetSystemMenu( p_vout->p_sys->hwnd, FALSE ); bool b = var_GetBool( p_vout, "video-on-top" ); /* Set the window on top if necessary */ if( b && !( GetWindowLong( p_vout->p_sys->hwnd, GWL_EXSTYLE ) & WS_EX_TOPMOST ) ) { CheckMenuItem( hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND | MFS_CHECKED ); SetWindowPos( p_vout->p_sys->hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE ); } else /* The window shouldn't be on top */ if( !b && ( GetWindowLong( p_vout->p_sys->hwnd, GWL_EXSTYLE ) & WS_EX_TOPMOST ) ) { CheckMenuItem( hMenu, IDM_TOGGLE_ON_TOP, MF_BYCOMMAND | MFS_UNCHECKED ); SetWindowPos( p_vout->p_sys->hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE ); } p_vout->p_sys->b_on_top_change = false; } }
void CD3DScrollBar::SetScrollStyle(int ScrollStyle) { m_ScrollStyle=ScrollStyle; UpdateRects(); }
static int Init(vout_display_t *vd, video_format_t *fmt, int width, int height) { vout_display_sys_t *sys = vd->sys; /* */ RECT *display = &sys->rect_display; display->left = 0; display->top = 0; #ifdef MODULE_NAME_IS_wingapi display->right = GXGetDisplayProperties().cxWidth; display->bottom = GXGetDisplayProperties().cyHeight; #else display->right = GetSystemMetrics(SM_CXSCREEN);; display->bottom = GetSystemMetrics(SM_CYSCREEN);; #endif /* Initialize an offscreen bitmap for direct buffer operations. */ /* */ HDC window_dc = GetDC(sys->hvideownd); /* */ #ifdef MODULE_NAME_IS_wingapi GXDisplayProperties gx_displayprop = GXGetDisplayProperties(); sys->i_depth = gx_displayprop.cBPP; #else sys->i_depth = GetDeviceCaps(window_dc, PLANES) * GetDeviceCaps(window_dc, BITSPIXEL); #endif /* */ msg_Dbg(vd, "GDI depth is %i", sys->i_depth); switch (sys->i_depth) { case 8: fmt->i_chroma = VLC_CODEC_RGB8; break; case 15: fmt->i_chroma = VLC_CODEC_RGB15; fmt->i_rmask = 0x7c00; fmt->i_gmask = 0x03e0; fmt->i_bmask = 0x001f; break; case 16: fmt->i_chroma = VLC_CODEC_RGB16; fmt->i_rmask = 0xf800; fmt->i_gmask = 0x07e0; fmt->i_bmask = 0x001f; break; case 24: fmt->i_chroma = VLC_CODEC_RGB24; fmt->i_rmask = 0x00ff0000; fmt->i_gmask = 0x0000ff00; fmt->i_bmask = 0x000000ff; break; case 32: fmt->i_chroma = VLC_CODEC_RGB32; fmt->i_rmask = 0x00ff0000; fmt->i_gmask = 0x0000ff00; fmt->i_bmask = 0x000000ff; break; default: msg_Err(vd, "screen depth %i not supported", sys->i_depth); return VLC_EGENERIC; } fmt->i_width = width; fmt->i_height = height; uint8_t *p_pic_buffer; int i_pic_pitch; #ifdef MODULE_NAME_IS_wingapi GXOpenDisplay(sys->hvideownd, GX_FULLSCREEN); EventThreadUpdateTitle(sys->event, VOUT_TITLE " (WinGAPI output)"); /* Filled by pool::lock() */ p_pic_buffer = NULL; i_pic_pitch = 0; #else /* Initialize offscreen bitmap */ BITMAPINFO *bi = &sys->bitmapinfo; memset(bi, 0, sizeof(BITMAPINFO) + 3 * sizeof(RGBQUAD)); if (sys->i_depth > 8) { ((DWORD*)bi->bmiColors)[0] = fmt->i_rmask; ((DWORD*)bi->bmiColors)[1] = fmt->i_gmask; ((DWORD*)bi->bmiColors)[2] = fmt->i_bmask;; } BITMAPINFOHEADER *bih = &sys->bitmapinfo.bmiHeader; bih->biSize = sizeof(BITMAPINFOHEADER); bih->biSizeImage = 0; bih->biPlanes = 1; bih->biCompression = (sys->i_depth == 15 || sys->i_depth == 16) ? BI_BITFIELDS : BI_RGB; bih->biBitCount = sys->i_depth; bih->biWidth = fmt->i_width; bih->biHeight = -fmt->i_height; bih->biClrImportant = 0; bih->biClrUsed = 0; bih->biXPelsPerMeter = 0; bih->biYPelsPerMeter = 0; i_pic_pitch = bih->biBitCount * bih->biWidth / 8; sys->off_bitmap = CreateDIBSection(window_dc, (BITMAPINFO *)bih, DIB_RGB_COLORS, &p_pic_buffer, NULL, 0); sys->off_dc = CreateCompatibleDC(window_dc); SelectObject(sys->off_dc, sys->off_bitmap); ReleaseDC(sys->hvideownd, window_dc); EventThreadUpdateTitle(sys->event, VOUT_TITLE " (WinGDI output)"); #endif /* */ picture_resource_t rsc; memset(&rsc, 0, sizeof(rsc)); #ifdef MODULE_NAME_IS_wingapi rsc.p_sys = malloc(sizeof(*rsc.p_sys)); if (!rsc.p_sys) return VLC_EGENERIC; rsc.p_sys->vd = vd; #endif rsc.p[0].p_pixels = p_pic_buffer; rsc.p[0].i_lines = fmt->i_height; rsc.p[0].i_pitch = i_pic_pitch;; picture_t *picture = picture_NewFromResource(fmt, &rsc); if (picture) { picture_pool_configuration_t cfg; memset(&cfg, 0, sizeof(cfg)); cfg.picture_count = 1; cfg.picture = &picture; #ifdef MODULE_NAME_IS_wingapi cfg.lock = Lock; cfg.unlock = Unlock; #endif sys->pool = picture_pool_NewExtended(&cfg); } else { free(rsc.p_sys); sys->pool = NULL; } UpdateRects(vd, NULL, NULL, true); return VLC_SUCCESS; }