Mercurial > sdl-ios-xcode
comparison src/SDL_compat.c @ 1678:90bf530ced8e SDL-1.3
SDL_SetVideoMode() compiles now...
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 14 Jun 2006 06:14:26 +0000 |
parents | d33dcfc3fde7 |
children | 9488fca10677 |
comparison
equal
deleted
inserted
replaced
1677:5e4c5e095925 | 1678:90bf530ced8e |
---|---|
23 | 23 |
24 /* This file contains functions for backwards compatibility with SDL 1.2 */ | 24 /* This file contains functions for backwards compatibility with SDL 1.2 */ |
25 | 25 |
26 #include "SDL.h" | 26 #include "SDL.h" |
27 | 27 |
28 #include "video/SDL_sysvideo.h" | 28 #include "video/SDL_pixels_c.h" |
29 | 29 |
30 | 30 |
31 static SDL_WindowID window; | 31 static SDL_WindowID SDL_VideoWindow; |
32 static SDL_TextureID SDL_VideoTexture; | |
33 static SDL_Surface *SDL_VideoSurface; | |
34 static SDL_Surface *SDL_ShadowSurface; | |
35 static SDL_Surface *SDL_PublicSurface; | |
32 static char *wm_title; | 36 static char *wm_title; |
33 | 37 |
34 char * | 38 char * |
35 SDL_AudioDriverName(char *namebuf, int maxlen) | 39 SDL_AudioDriverName(char *namebuf, int maxlen) |
36 { | 40 { |
211 SDL_DisplayMode mode; | 215 SDL_DisplayMode mode; |
212 int i; | 216 int i; |
213 Uint32 window_flags; | 217 Uint32 window_flags; |
214 Uint32 desktop_format; | 218 Uint32 desktop_format; |
215 Uint32 desired_format; | 219 Uint32 desired_format; |
220 Uint32 texture_format; | |
216 | 221 |
217 if (!SDL_GetVideoDevice()) { | 222 if (!SDL_GetVideoDevice()) { |
218 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0) { | 223 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0) { |
219 return NULL; | 224 return NULL; |
220 } | 225 } |
221 } | 226 } |
222 | 227 |
223 /* Destroy existing window */ | 228 /* Destroy existing window */ |
224 SDL_DestroyWindow(window); | 229 SDL_PublicSurface = NULL; |
230 if (SDL_ShadowSurface) { | |
231 SDL_FreeSurface(SDL_ShadowSurface); | |
232 SDL_ShadowSurface = NULL; | |
233 } | |
234 if (SDL_VideoSurface) { | |
235 SDL_FreeSurface(SDL_ShadowSurface); | |
236 SDL_VideoSurface = NULL; | |
237 } | |
238 SDL_DestroyWindow(SDL_VideoWindow); | |
225 | 239 |
226 /* Set up the event filter */ | 240 /* Set up the event filter */ |
227 filter = SDL_GetEventFilter(); | 241 filter = SDL_GetEventFilter(); |
228 if (filter != SDL_CompatEventFilter) { | 242 if (filter != SDL_CompatEventFilter) { |
229 orig_eventfilter = filter; | 243 orig_eventfilter = filter; |
242 window_flags |= SDL_WINDOW_RESIZABLE; | 256 window_flags |= SDL_WINDOW_RESIZABLE; |
243 } | 257 } |
244 if (flags & SDL_NOFRAME) { | 258 if (flags & SDL_NOFRAME) { |
245 window_flags |= SDL_WINDOW_BORDERLESS; | 259 window_flags |= SDL_WINDOW_BORDERLESS; |
246 } | 260 } |
247 window = SDL_CreateWindow(wm_title, 0, 0, width, height, window_flags); | 261 SDL_VideoWindow = |
248 if (!window) { | 262 SDL_CreateWindow(wm_title, 0, 0, width, height, window_flags); |
263 if (!SDL_VideoWindow) { | |
249 return NULL; | 264 return NULL; |
250 } | 265 } |
251 | 266 |
252 /* Set up the desired display mode */ | 267 /* Set up the desired display mode */ |
253 desktop_mode = SDL_GetDesktopDisplayMode(); | 268 desktop_mode = SDL_GetDesktopDisplayMode(); |
306 } | 321 } |
307 if (SDL_SetDisplayMode(&mode) < 0) { | 322 if (SDL_SetDisplayMode(&mode) < 0) { |
308 return NULL; | 323 return NULL; |
309 } | 324 } |
310 | 325 |
311 /* Create the display surface */ | 326 /* Create a renderer for the window */ |
312 return SDL_CreateWindowSurface(window, desired_format, flags); | 327 if (SDL_CreateRenderer(SDL_VideoWindow, -1, 0) < 0) { |
313 } | |
314 | |
315 SDL_Surface * | |
316 SDL_CreateWindowSurface(SDL_WindowID windowID, Uint32 format, Uint32 flags) | |
317 { | |
318 SDL_Window *window = SDL_GetWindowFromID(windowID); | |
319 Uint32 black; | |
320 SDL_Surface *surface; | |
321 | |
322 if (!window) { | |
323 return NULL; | 328 return NULL; |
324 } | 329 } |
325 | 330 |
326 if (!_this->CreateWindowSurface) { | 331 /* Create a texture for the screen surface */ |
332 SDL_VideoTexture = | |
333 SDL_CreateTexture(desired_format, SDL_TextureAccess_Local, width, | |
334 height); | |
335 if (!SDL_VideoTexture) { | |
336 SDL_VideoTexture = | |
337 SDL_CreateTexture(0, SDL_TextureAccess_Local, width, height); | |
338 } | |
339 if (!SDL_VideoTexture) { | |
327 return NULL; | 340 return NULL; |
328 } | 341 } |
329 | 342 |
330 if (!window->surface) { | 343 /* Create the screen surface */ |
331 _this->CreateWindowSurface(_this, window, flags); | 344 SDL_VideoSurface = SDL_CreateRGBSurfaceFromTexture(SDL_VideoTexture); |
332 if (!window->surface) { | 345 if (!SDL_VideoSurface) { |
346 return NULL; | |
347 } | |
348 | |
349 /* Set a default screen palette */ | |
350 if (SDL_VideoSurface->format->palette) { | |
351 SDL_VideoSurface->flags |= SDL_HWPALETTE; | |
352 SDL_DitherColors(SDL_VideoSurface->format->palette->colors, | |
353 SDL_VideoSurface->format->BitsPerPixel); | |
354 SDL_SetTexturePalette(SDL_VideoTexture, | |
355 SDL_VideoSurface->format->palette->colors, 0, | |
356 SDL_VideoSurface->format->palette->ncolors); | |
357 } | |
358 | |
359 /* Create a shadow surface if necessary */ | |
360 if (((bpp != SDL_VideoSurface->format->BitsPerPixel) | |
361 && !(flags & SDL_ANYFORMAT)) | |
362 || ((SDL_VideoSurface->flags & SDL_HWSURFACE) | |
363 && !(flags & SDL_HWSURFACE))) { | |
364 if ((bpp == SDL_VideoSurface->format->BitsPerPixel) | |
365 || (flags & SDL_ANYFORMAT)) { | |
366 SDL_ShadowSurface = | |
367 SDL_CreateRGBSurface(0, width, height, | |
368 SDL_VideoSurface->format->BitsPerPixel, | |
369 SDL_VideoSurface->format->Rmask, | |
370 SDL_VideoSurface->format->Gmask, | |
371 SDL_VideoSurface->format->Bmask, | |
372 SDL_VideoSurface->format->Amask); | |
373 } else { | |
374 SDL_ShadowSurface = | |
375 SDL_CreateRGBSurface(0, width, height, bpp, 0, 0, 0, 0); | |
376 } | |
377 if (!SDL_ShadowSurface) { | |
333 return NULL; | 378 return NULL; |
334 } | 379 } |
335 window->surface->flags |= SDL_SCREEN_SURFACE; | 380 |
336 | 381 /* 8-bit SDL_ShadowSurface surfaces report that they have exclusive palette */ |
337 /* If we have a palettized surface, create a default palette */ | 382 if (SDL_ShadowSurface->format->palette) { |
338 if (window->surface->format->palette) { | 383 SDL_ShadowSurface->flags |= SDL_HWPALETTE; |
339 SDL_Color colors[256]; | 384 SDL_DitherColors(SDL_ShadowSurface->format->palette->colors, |
340 SDL_PixelFormat *vf = window->surface->format; | 385 SDL_ShadowSurface->format->BitsPerPixel); |
341 SDL_DitherColors(colors, vf->BitsPerPixel); | 386 } |
342 SDL_SetColors(window->surface, colors, 0, vf->palette->ncolors); | 387 } |
343 } | 388 SDL_PublicSurface = |
344 } | 389 (SDL_ShadowSurface ? SDL_ShadowSurface : SDL_VideoSurface); |
345 surface = window->surface; | |
346 | |
347 if (window->shadow) { | |
348 SDL_FreeSurface(window->shadow); | |
349 window->shadow = NULL; | |
350 } | |
351 | |
352 /* Create a shadow surface if necessary */ | |
353 if ((!(flags & SDL_ANYFORMAT) | |
354 && (format != SDL_GetCurrentDisplayMode()->format)) | |
355 || ((flags & SDL_HWPALETTE) | |
356 && !(window->surface->flags & SDL_HWPALETTE))) { | |
357 int bpp; | |
358 Uint32 Rmask, Gmask, Bmask, Amask; | |
359 | |
360 SDL_PixelFormatEnumToMasks(format, &bpp, &Amask, &Gmask, &Bmask, | |
361 &Amask); | |
362 window->shadow = | |
363 SDL_CreateRGBSurface(SDL_SWSURFACE, surface->w, surface->h, bpp, | |
364 Rmask, Gmask, Bmask, Amask); | |
365 if (window->shadow == NULL) { | |
366 return NULL; | |
367 } | |
368 window->shadow->flags |= SDL_SHADOW_SURFACE; | |
369 | |
370 surface = window->shadow; | |
371 | |
372 /* 8-bit shadow surfaces report that they have exclusive palette */ | |
373 if (surface->format->palette) { | |
374 surface->flags |= SDL_HWPALETTE; | |
375 if (format == SDL_GetCurrentDisplayMode()->format) { | |
376 SDL_memcpy(surface->format->palette->colors, | |
377 window->surface->format->palette->colors, | |
378 window->surface->format->palette->ncolors * | |
379 sizeof(SDL_Color)); | |
380 } else { | |
381 SDL_DitherColors(surface->format->palette->colors, bpp); | |
382 } | |
383 } | |
384 } | |
385 | 390 |
386 /* Clear the surface for display */ | 391 /* Clear the surface for display */ |
387 { | 392 SDL_FillRect(SDL_PublicSurface, NULL, 0); |
388 Uint32 black = SDL_MapRGB(surface->format, 0, 0, 0); | 393 |
389 SDL_FillRect(surface, NULL, black); | 394 /* We're finally done! */ |
390 if (surface->flags & SDL_DOUBLEBUF) { | 395 return SDL_PublicSurface; |
391 SDL_Flip(surface); | |
392 SDL_FillRect(surface, NULL, black); | |
393 } | |
394 SDL_Flip(surface); | |
395 } | |
396 | |
397 return surface; | |
398 } | 396 } |
399 | 397 |
400 SDL_Surface * | 398 SDL_Surface * |
401 SDL_GetVideoSurface(void) | 399 SDL_GetVideoSurface(void) |
402 { | 400 { |
403 SDL_VideoDevice *_this = SDL_GetVideoDevice(); | 401 return SDL_PublicSurface; |
404 | |
405 return SDL_VideoSurface; | |
406 } | 402 } |
407 | 403 |
408 SDL_Surface * | 404 SDL_Surface * |
409 SDL_DisplayFormat(SDL_Surface * surface) | 405 SDL_DisplayFormat(SDL_Surface * surface) |
410 { | 406 { |
411 Uint32 flags; | 407 Uint32 flags; |
412 | 408 |
413 if (!SDL_PublicSurface) { | 409 if (!SDL_PublicSurface) { |
414 SDL_SetError("No video mode has been set"); | 410 SDL_SetError("No video mode has been set"); |
415 return (NULL); | 411 return NULL; |
416 } | 412 } |
413 | |
417 /* Set the flags appropriate for copying to display surface */ | 414 /* Set the flags appropriate for copying to display surface */ |
418 if (((SDL_PublicSurface->flags & SDL_HWSURFACE) == SDL_HWSURFACE) | 415 flags = SDL_SWSURFACE; |
419 && _this->info.blit_hw) | |
420 flags = SDL_HWSURFACE; | |
421 else | |
422 flags = SDL_SWSURFACE; | |
423 #ifdef AUTORLE_DISPLAYFORMAT | 416 #ifdef AUTORLE_DISPLAYFORMAT |
424 flags |= (surface->flags & (SDL_SRCCOLORKEY | SDL_SRCALPHA)); | 417 flags |= (surface->flags & (SDL_SRCCOLORKEY | SDL_SRCALPHA)); |
425 flags |= SDL_RLEACCELOK; | 418 flags |= SDL_RLEACCELOK; |
426 #else | 419 #else |
427 flags |= | 420 flags |= |
428 surface->flags & (SDL_SRCCOLORKEY | SDL_SRCALPHA | SDL_RLEACCELOK); | 421 surface->flags & (SDL_SRCCOLORKEY | SDL_SRCALPHA | SDL_RLEACCELOK); |
429 #endif | 422 #endif |
430 return (SDL_ConvertSurface(surface, SDL_PublicSurface->format, flags)); | 423 return SDL_ConvertSurface(surface, SDL_PublicSurface->format, flags); |
431 } | 424 } |
432 | 425 |
433 SDL_Surface * | 426 SDL_Surface * |
434 SDL_DisplayFormatAlpha(SDL_Surface * surface) | 427 SDL_DisplayFormatAlpha(SDL_Surface * surface) |
435 { | 428 { |
443 Uint32 gmask = 0x0000ff00; | 436 Uint32 gmask = 0x0000ff00; |
444 Uint32 bmask = 0x000000ff; | 437 Uint32 bmask = 0x000000ff; |
445 | 438 |
446 if (!SDL_PublicSurface) { | 439 if (!SDL_PublicSurface) { |
447 SDL_SetError("No video mode has been set"); | 440 SDL_SetError("No video mode has been set"); |
448 return (NULL); | 441 return NULL; |
449 } | 442 } |
450 vf = SDL_PublicSurface->format; | 443 vf = SDL_PublicSurface->format; |
451 | 444 |
452 switch (vf->BytesPerPixel) { | 445 switch (vf->BytesPerPixel) { |
453 case 2: | 446 case 2: |
479 format = SDL_AllocFormat(32, rmask, gmask, bmask, amask); | 472 format = SDL_AllocFormat(32, rmask, gmask, bmask, amask); |
480 flags = SDL_PublicSurface->flags & SDL_HWSURFACE; | 473 flags = SDL_PublicSurface->flags & SDL_HWSURFACE; |
481 flags |= surface->flags & (SDL_SRCALPHA | SDL_RLEACCELOK); | 474 flags |= surface->flags & (SDL_SRCALPHA | SDL_RLEACCELOK); |
482 converted = SDL_ConvertSurface(surface, format, flags); | 475 converted = SDL_ConvertSurface(surface, format, flags); |
483 SDL_FreeFormat(format); | 476 SDL_FreeFormat(format); |
484 return (converted); | 477 return converted; |
478 } | |
479 | |
480 int | |
481 SDL_Flip(SDL_Surface * screen) | |
482 { | |
483 SDL_UpdateRect(screen, 0, 0, 0, 0); | |
484 return 0; | |
485 } | 485 } |
486 | 486 |
487 void | 487 void |
488 SDL_UpdateRect(SDL_Surface * screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h) | 488 SDL_UpdateRect(SDL_Surface * screen, Sint32 x, Sint32 y, Uint32 w, Uint32 h) |
489 { | 489 { |
510 } | 510 } |
511 void | 511 void |
512 SDL_UpdateRects(SDL_Surface * screen, int numrects, SDL_Rect * rects) | 512 SDL_UpdateRects(SDL_Surface * screen, int numrects, SDL_Rect * rects) |
513 { | 513 { |
514 int i; | 514 int i; |
515 SDL_Window *window; | 515 |
516 | 516 if (screen == SDL_ShadowSurface) { |
517 /* Find the window corresponding to this surface */ | 517 for (i = 0; i < numrects; ++i) { |
518 window = SDL_GetWindowFromSurface(screen); | 518 SDL_LowerBlit(SDL_ShadowSurface, &rects[i], SDL_VideoSurface, |
519 if (!window) { | 519 &rects[i]); |
520 SDL_SetError("Couldn't find window associated with surface"); | |
521 return; | |
522 } | |
523 | |
524 if (screen->flags & SDL_SHADOW_SURFACE) { | |
525 if (SHOULD_DRAWCURSOR(SDL_cursorstate)) { | |
526 SDL_LockCursor(); | |
527 SDL_DrawCursor(screen); | |
528 for (i = 0; i < numrects; ++i) { | |
529 SDL_LowerBlit(screen, &rects[i], window->surface, &rects[i]); | |
530 } | |
531 SDL_EraseCursor(screen); | |
532 SDL_UnlockCursor(); | |
533 } else { | |
534 for (i = 0; i < numrects; ++i) { | |
535 SDL_LowerBlit(screen, &rects[i], window->surface, &rects[i]); | |
536 } | |
537 } | 520 } |
538 | 521 |
539 /* Fall through to video surface update */ | 522 /* Fall through to video surface update */ |
540 screen = window->surface; | 523 screen = SDL_VideoSurface; |
541 } | 524 } |
542 if ((screen->flags & SDL_SCREEN_SURFACE) && _this->UpdateWindowSurface) { | 525 if (screen == SDL_VideoSurface) { |
543 /* Update the video surface */ | 526 for (i = 0; i < numrects; ++i) { |
544 if (screen->offset) { | 527 SDL_RenderCopy(SDL_VideoTexture, &rects[i], &rects[i], |
545 int offset_y = screen->offset / screen->pitch; | 528 SDL_TextureBlendMode_None, |
546 int offset_x = screen->offset % screen->pitch; | 529 SDL_TextureScaleMode_None); |
547 for (i = 0; i < numrects; ++i) { | 530 } |
548 rects[i].x += offset_x; | 531 SDL_RenderPresent(); |
549 rects[i].y += offset_y; | 532 } |
550 } | |
551 _this->UpdateWindowSurface(_this, window, numrects, rects); | |
552 for (i = 0; i < numrects; ++i) { | |
553 rects[i].x -= offset_x; | |
554 rects[i].y -= offset_y; | |
555 } | |
556 } else { | |
557 _this->UpdateWindowSurface(_this, window, numrects, rects); | |
558 } | |
559 } | |
560 } | |
561 | |
562 int | |
563 SDL_Flip(SDL_Surface * screen) | |
564 { | |
565 SDL_Window *window; | |
566 | |
567 /* Find the window corresponding to this surface */ | |
568 window = SDL_GetWindowFromSurface(screen); | |
569 if (!window) { | |
570 SDL_SetError("Couldn't find window associated with surface"); | |
571 return; | |
572 } | |
573 | |
574 /* Copy the shadow surface to the video surface */ | |
575 if (screen->flags & SDL_SHADOW_SURFACE) { | |
576 SDL_Rect rect; | |
577 | |
578 rect.x = 0; | |
579 rect.y = 0; | |
580 rect.w = screen->w; | |
581 rect.h = screen->h; | |
582 if (SHOULD_DRAWCURSOR(SDL_cursorstate)) { | |
583 SDL_LockCursor(); | |
584 SDL_DrawCursor(screen); | |
585 SDL_LowerBlit(screen, &rect, window->surface, &rect); | |
586 SDL_EraseCursor(screen); | |
587 SDL_UnlockCursor(); | |
588 } else { | |
589 SDL_LowerBlit(screen, &rect, window->surface, &rect); | |
590 } | |
591 | |
592 /* Fall through to video surface update */ | |
593 screen = window->surface; | |
594 } | |
595 if (screen->flags & SDL_DOUBLEBUF) { | |
596 _this->FlipWindowSurface(_this, window); | |
597 } else { | |
598 SDL_UpdateRect(screen, 0, 0, 0, 0); | |
599 } | |
600 return (0); | |
601 } | 533 } |
602 | 534 |
603 void | 535 void |
604 SDL_WM_SetCaption(const char *title, const char *icon) | 536 SDL_WM_SetCaption(const char *title, const char *icon) |
605 { | 537 { |
606 if (wm_title) { | 538 if (wm_title) { |
607 SDL_free(wm_title); | 539 SDL_free(wm_title); |
608 } else { | 540 } else { |
609 wm_title = SDL_strdup(title); | 541 wm_title = SDL_strdup(title); |
610 } | 542 } |
611 SDL_SetWindowTitle(window, wm_title); | 543 SDL_SetWindowTitle(SDL_VideoWindow, wm_title); |
612 } | 544 } |
613 | 545 |
614 void | 546 void |
615 SDL_WM_GetCaption(char **title, char **icon) | 547 SDL_WM_GetCaption(char **title, char **icon) |
616 { | 548 { |
629 } | 561 } |
630 | 562 |
631 int | 563 int |
632 SDL_WM_IconifyWindow(void) | 564 SDL_WM_IconifyWindow(void) |
633 { | 565 { |
634 SDL_MinimizeWindow(window); | 566 SDL_MinimizeWindow(SDL_VideoWindow); |
635 } | 567 } |
636 | 568 |
637 int | 569 int |
638 SDL_WM_ToggleFullScreen(SDL_Surface * surface) | 570 SDL_WM_ToggleFullScreen(SDL_Surface * surface) |
639 { | 571 { |
642 | 574 |
643 SDL_GrabMode | 575 SDL_GrabMode |
644 SDL_WM_GrabInput(SDL_GrabMode mode) | 576 SDL_WM_GrabInput(SDL_GrabMode mode) |
645 { | 577 { |
646 if (mode != SDL_GRAB_QUERY) { | 578 if (mode != SDL_GRAB_QUERY) { |
647 SDL_SetWindowGrab(window, mode); | 579 SDL_SetWindowGrab(SDL_VideoWindow, mode); |
648 } | 580 } |
649 return (SDL_GrabMode) SDL_GetWindowGrab(window); | 581 return (SDL_GrabMode) SDL_GetWindowGrab(SDL_VideoWindow); |
650 } | 582 } |
651 | 583 |
652 Uint8 | 584 Uint8 |
653 SDL_GetAppState(void) | 585 SDL_GetAppState(void) |
654 { | 586 { |
655 Uint8 state = 0; | 587 Uint8 state = 0; |
656 Uint32 flags = 0; | 588 Uint32 flags = 0; |
657 | 589 |
658 flags = SDL_GetWindowFlags(window); | 590 flags = SDL_GetWindowFlags(SDL_VideoWindow); |
659 if ((flags & SDL_WINDOW_SHOWN) && !(flags & SDL_WINDOW_MINIMIZED)) { | 591 if ((flags & SDL_WINDOW_SHOWN) && !(flags & SDL_WINDOW_MINIMIZED)) { |
660 state |= SDL_APPACTIVE; | 592 state |= SDL_APPACTIVE; |
661 } | 593 } |
662 if (flags & SDL_WINDOW_KEYBOARD_FOCUS) { | 594 if (flags & SDL_WINDOW_KEYBOARD_FOCUS) { |
663 state |= SDL_APPINPUTFOCUS; | 595 state |= SDL_APPINPUTFOCUS; |
685 | 617 |
686 int | 618 int |
687 SDL_SetScreenColors(SDL_Surface * screen, SDL_Color * colors, int firstcolor, | 619 SDL_SetScreenColors(SDL_Surface * screen, SDL_Color * colors, int firstcolor, |
688 int ncolors) | 620 int ncolors) |
689 { | 621 { |
690 SDL_Window *window = NULL; | |
691 SDL_Palette *pal; | 622 SDL_Palette *pal; |
692 int gotall; | 623 int gotall; |
693 int palsize; | 624 int palsize; |
694 | 625 |
695 /* Verify the parameters */ | 626 /* Verify the parameters */ |
702 if (ncolors > (palsize - firstcolor)) { | 633 if (ncolors > (palsize - firstcolor)) { |
703 ncolors = (palsize - firstcolor); | 634 ncolors = (palsize - firstcolor); |
704 gotall = 0; | 635 gotall = 0; |
705 } | 636 } |
706 | 637 |
707 if (screen->flags & (SDL_SHADOW_SURFACE | SDL_SCREEN_SURFACE)) { | 638 if (screen == SDL_ShadowSurface) { |
708 window = SDL_GetWindowFromSurface(screen); | |
709 if (!window) { | |
710 return 0; | |
711 } | |
712 } | |
713 | |
714 if (screen->flags & SDL_SHADOW_SURFACE) { | |
715 SDL_Palette *vidpal; | 639 SDL_Palette *vidpal; |
716 | 640 |
717 vidpal = window->surface->format->palette; | 641 vidpal = SDL_VideoSurface->format->palette; |
718 if (vidpal && vidpal->ncolors == pal->ncolors) { | 642 if (vidpal && vidpal->ncolors == pal->ncolors) { |
719 /* This is a shadow surface, and the physical | 643 /* This is a shadow surface, and the physical |
720 * framebuffer is also indexed. Propagate the | 644 * framebuffer is also indexed. Propagate the |
721 * changes to its logical palette so that | 645 * changes to its logical palette so that |
722 * updates are always identity blits | 646 * updates are always identity blits |
723 */ | 647 */ |
724 SDL_memcpy(vidpal->colors + firstcolor, colors, | 648 SDL_memcpy(vidpal->colors + firstcolor, colors, |
725 ncolors * sizeof(*colors)); | 649 ncolors * sizeof(*colors)); |
726 } | 650 } |
727 if (window->surface->flags & SDL_HWPALETTE) { | 651 if (SDL_VideoSurface->flags & SDL_HWPALETTE) { |
728 /* Set the physical palette */ | 652 /* Set the physical palette */ |
729 screen = window->surface; | 653 screen = SDL_VideoSurface; |
730 } else { | 654 } else { |
731 SDL_UpdateRect(screen, 0, 0, 0, 0); | 655 SDL_UpdateRect(screen, 0, 0, 0, 0); |
732 } | 656 } |
733 } | 657 } |
734 | 658 |
735 if (screen->flags & SDL_SCREEN_SURFACE) { | 659 if (screen == SDL_VideoSurface) { |
736 if (_this->SetWindowColors) { | 660 SDL_SetTexturePalette(SDL_VideoTexture, |
737 gotall = | 661 SDL_VideoSurface->format->palette->colors, 0, |
738 _this->SetWindowColors(_this, window, firstcolor, ncolors, | 662 SDL_VideoSurface->format->palette->ncolors); |
739 colors); | |
740 if (!gotall) { | |
741 /* The video flags shouldn't have SDL_HWPALETTE, and | |
742 the video driver is responsible for copying back the | |
743 correct colors into the video surface palette. | |
744 */ | |
745 ; | |
746 } | |
747 } | |
748 SDL_CursorPaletteChanged(); | |
749 } | 663 } |
750 | 664 |
751 return gotall; | 665 return gotall; |
752 } | 666 } |
753 | 667 |
754 int | 668 int |
755 SDL_GetWMInfo(SDL_SysWMinfo * info) | 669 SDL_GetWMInfo(SDL_SysWMinfo * info) |
756 { | 670 { |
757 return SDL_GetWindowWMInfo(window, info); | 671 return SDL_GetWindowWMInfo(SDL_VideoWindow, info); |
758 } | 672 } |
759 | 673 |
674 #if 0 | |
760 void | 675 void |
761 SDL_MoveCursor(int x, int y) | 676 SDL_MoveCursor(int x, int y) |
762 { | 677 { |
763 SDL_VideoDevice *_this = SDL_GetVideoDevice(); | 678 SDL_VideoDevice *_this = SDL_GetVideoDevice(); |
764 | 679 |
1347 overlay->hwfuncs->FreeHW(_this, overlay); | 1262 overlay->hwfuncs->FreeHW(_this, overlay); |
1348 } | 1263 } |
1349 SDL_free(overlay); | 1264 SDL_free(overlay); |
1350 } | 1265 } |
1351 } | 1266 } |
1267 #endif | |
1352 | 1268 |
1353 /* vi: set ts=4 sw=4 expandtab: */ | 1269 /* vi: set ts=4 sw=4 expandtab: */ |