WonXDisplay.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /*****************************************************************************/
  2. /* ここから */
  3. /*****************************************************************************/
  4. #include "WonXDisplayP.h"
  5. #include "WonX.h"
  6. /*****************************************************************************/
  7. /* メンバ関数の定義 */
  8. /*****************************************************************************/
  9. XDisplay WonXDisplay_GetXDisplay(WonXDisplay wonx_display)
  10. { return (wonx_display->x_display); }
  11. WWDisplay WonXDisplay_GetWWDisplay(WonXDisplay wonx_display)
  12. { return (wonx_display->ww_display); }
  13. static XDisplay WonXDisplay_SetXDisplay(WonXDisplay wonx_d, XDisplay xd)
  14. { return (wonx_d->x_display = xd); }
  15. static WWDisplay WonXDisplay_SetWWDisplay(WonXDisplay wonx_d, WWDisplay wd)
  16. { return (wonx_d->ww_display = wd); }
  17. WonXDisplay WonXDisplay_Create(int x_width, int x_height,
  18. int ww_lcd_panel_width, int ww_lcd_panel_height,
  19. int ww_screen_width, int ww_screen_height)
  20. {
  21. WonXDisplay wonx_display;
  22. WWDisplay ww_display;
  23. XDisplay x_display;
  24. wonx_display = (WonXDisplay)malloc(sizeof(_WonXDisplay));
  25. if (wonx_display == NULL)
  26. WonX_Error("WonXDisplay_Create", "Cannot allocate memory.");
  27. ww_display = WWDisplay_Create(ww_lcd_panel_width, ww_lcd_panel_height,
  28. ww_screen_width, ww_screen_height);
  29. if (ww_display == NULL)
  30. WonX_Error("WonXDisplay_Create", "Cannot create WonderWitch display.");
  31. WonXDisplay_SetWWDisplay(wonx_display, ww_display);
  32. x_display = XDisplay_Create(x_width, x_height);
  33. if (x_display == NULL)
  34. WonX_Error("WonXDisplay_Create", "Cannot create X display.");
  35. WonXDisplay_SetXDisplay(wonx_display, x_display);
  36. return (wonx_display);
  37. }
  38. WonXDisplay WonXDisplay_Destroy(WonXDisplay wonx_display)
  39. {
  40. XDisplay x_display;
  41. WWDisplay ww_display;
  42. if (wonx_display == NULL)
  43. WonX_Error("WonXDisplay_Destroy", "Object is not created.");
  44. x_display = WonXDisplay_GetXDisplay(wonx_display);
  45. if (x_display)
  46. WonXDisplay_SetXDisplay(wonx_display, XDisplay_Destroy(x_display));
  47. ww_display = WonXDisplay_GetWWDisplay(wonx_display);
  48. if (ww_display)
  49. WonXDisplay_SetWWDisplay(wonx_display, WWDisplay_Destroy(ww_display));
  50. free(wonx_display);
  51. return (NULL);
  52. }
  53. int WonXDisplay_PrintData(WonXDisplay wonx_display)
  54. {
  55. int i;
  56. XDisplay x_display;
  57. WWDisplay ww_display;
  58. x_display = WonXDisplay_GetXDisplay(wonx_display);
  59. ww_display = WonXDisplay_GetWWDisplay(wonx_display);
  60. if (XDisplay_GetColorMapPrint(x_display)) {
  61. WWColorMap_PrintData(WWDisplay_GetColorMap(ww_display), stdout);
  62. fflush(stdout);
  63. XDisplay_SetColorMapPrint(x_display, 0);
  64. }
  65. if (XDisplay_GetPalettePrint(x_display)) {
  66. for (i = 0; i < 16; i++) {
  67. WWPalette_PrintData(WWDisplay_GetPalette(ww_display, i),
  68. ww_display, stdout);
  69. fflush(stdout);
  70. }
  71. XDisplay_SetPalettePrint(x_display, 0);
  72. }
  73. if (XDisplay_GetCharacterPrint(x_display)) {
  74. for (i = 0; i < 512; i++) {
  75. WWCharacter_PrintData(WWDisplay_GetCharacter(ww_display, i),
  76. ww_display, stdout);
  77. fflush(stdout);
  78. }
  79. XDisplay_SetCharacterPrint(x_display, 0);
  80. }
  81. if (XDisplay_GetSpritePrint(x_display)) {
  82. for (i = 0; i < 128; i++) {
  83. WWSprite_PrintData(WWDisplay_GetSprite(ww_display, i), stdout);
  84. fflush(stdout);
  85. }
  86. XDisplay_SetSpritePrint(x_display, 0);
  87. }
  88. return (0);
  89. }
  90. int WonXDisplay_DrawLCDWindow(WonXDisplay wonx_display)
  91. {
  92. XDisplay x_display;
  93. WWDisplay ww_display;
  94. WWLCDPanel ww_lcd_panel;
  95. x_display = WonXDisplay_GetXDisplay(wonx_display);
  96. ww_display = WonXDisplay_GetWWDisplay(wonx_display);
  97. /* 表示レベルが1以上のときだけ描画する */
  98. if (XDisplay_GetLCDDrawLevel(x_display) > 0) {
  99. WWDisplay_DrawLCDPanel(ww_display);
  100. ww_lcd_panel = WWDisplay_GetLCDPanel(ww_display);
  101. XDisplay_DrawLCDWindow(x_display, ww_display, ww_lcd_panel);
  102. }
  103. return (0);
  104. }
  105. int WonXDisplay_Sync(WonXDisplay wonx_display)
  106. {
  107. XDisplay x_display;
  108. WonXDisplay_PrintData(wonx_display);
  109. x_display = WonXDisplay_GetXDisplay(wonx_display);
  110. XDisplay_Flush(x_display);
  111. return (0);
  112. }
  113. int WonXDisplay_Flush(WonXDisplay wonx_display)
  114. {
  115. WonXDisplay_DrawLCDWindow(wonx_display);
  116. WonXDisplay_Sync(wonx_display);
  117. return (0);
  118. }
  119. /*****************************************************************************/
  120. /* ここまで */
  121. /*****************************************************************************/
  122. /*****************************************************************************/
  123. /* End of File. */
  124. /*****************************************************************************/