|
|
1.1 root 1: /*
2: Hatari
3:
4: Status Bar icons and text
5: */
6:
7: #include "main.h"
8: #include "screen.h"
9: #include "statusBar.h"
10: #include "view.h"
11:
12: #define DEFAULT_STATUS_ICON_TIME 15 // Time to show status bar icon in frames
13: #define ON_STATUS_ICON_TIME -1 // Force icon to show all the time
14:
15: STATUSICON StatusIcons[STATUS_ICON_COUNT] = {
16: { STATUS_ICONS_X_OFFSET,112,0,16,13, 0 }, // STATUS_ICON_FRAMERATE
17: { STATUS_ICONS_X_OFFSET-16,16,0,12,13, 0 }, // STATUS_ICON_FLOPPY
18: { STATUS_ICONS_X_OFFSET-28,32,0,13,13, 0 }, // STATUS_ICON_HARDDRIVE
19: { STATUS_ICONS_X_OFFSET-41,48,0,16,13, 0 }, // STATUS_ICON_PRINTER
20: { STATUS_ICONS_X_OFFSET-41,64,0,16,13, 0 }, // STATUS_ICON_RS232
21: { STATUS_ICONS_X_OFFSET-57,80,0,14,13, 0 }, // STATUS_ICON_SOUND
22: { STATUS_ICONS_X_OFFSET-71,96,0,16,13, 0 }, // STATUS_ICON_SCREEN
23: };
24: char *pszStatusBarHelpText = { "Press F1 for Help." };
25: static char szStatusBarText[256]; // Text in status bar
26:
27: //-----------------------------------------------------------------------
28: /*
29: Set to display icon on status bar for at least 'x' frames
30: */
31: void StatusBar_SetIcon(int StatusIcon, int IconState)
32: {
33: // Check state as ON, OFF or UPDATE
34: switch (IconState) {
35: case ICONSTATE_ON:
36: // Set icon to display
37: StatusIcons[StatusIcon].DisplayCount = ON_STATUS_ICON_TIME;
38: // Draw icon
39: StatusBar_DrawIcon(/*NULL,NULL,*/StatusIcon);
40: break;
41: case ICONSTATE_OFF:
42: // Set icon to off
43: StatusIcons[StatusIcon].DisplayCount = 0;
44: // Draw icon
45: StatusBar_DrawIcon(/*NULL,NULL,*/StatusIcon);
46: break;
47: case ICONSTATE_UPDATE:
48: // Is icon already on? No
49: if (StatusIcons[StatusIcon].DisplayCount==0) {
50: // Set icon to display for 'x' frames
51: StatusIcons[StatusIcon].DisplayCount = DEFAULT_STATUS_ICON_TIME;
52: // Draw icon
53: StatusBar_DrawIcon(/*NULL,NULL,*/StatusIcon);
54: }
55: else // Keep count high
56: StatusIcons[StatusIcon].DisplayCount = DEFAULT_STATUS_ICON_TIME;
57: break;
58: }
59: }
60:
61: //-----------------------------------------------------------------------
62: /*
63: Update icon on status bar, call once per display frame
64: */
65: void StatusBar_UpdateIcons(void)
66: {
67: int i;
68:
69: // Adjust timers on icons and update if needed
70: for(i=0; i<STATUS_ICON_COUNT; i++) {
71: // Is on? Decrement count to zero(off)
72: if (StatusIcons[i].DisplayCount>0) {
73: StatusIcons[i].DisplayCount--;
74:
75: // Is now off? Update status bar
76: if (StatusIcons[i].DisplayCount==0)
77: StatusBar_DrawIcon(/*NULL,NULL,*/i);
78: }
79: }
80: }
81:
82: //-----------------------------------------------------------------------
83: /*
84: Draw all icons on status bar
85: */
86: void StatusBar_DrawAllIcons(void)
87: {
88: int i;
89: /* FIXME */
90: /*
91: HDC hDC,MemDC;
92:
93: // Select bitmap for icons
94: hDC = GetDC(hWnd);
95: MemDC = CreateCompatibleDC(hDC);
96: SelectObject(MemDC,Bitmaps[BITMAP_STATUSBAR_ICONS]);
97: */
98: // Draw all icons with current state
99: for(i=0; i<STATUS_ICON_COUNT; i++)
100: StatusBar_DrawIcon(/*hDC,MemDC,*/i);
101: /*
102: // Release icon bitmap
103: ReleaseDC(hWnd,hDC);
104: DeleteDC(MemDC);
105: */
106: }
107:
108: //-----------------------------------------------------------------------
109: /*
110: Draw a single icon on status bar
111: */
112: void StatusBar_DrawIcon(/*HDC hDC, HDC MemDC,*/int StatusIcon)
113: {
114: /* FIXME */
115: /*
116: HDC DrawDC,DrawMemDC;
117: XYWH SrcBitmapPos;
118: RECT Rect;
119:
120: if (!bInFullScreen) { // Only draw when in Window, else DirectX may draw! Doh!
121: DrawDC = hDC;
122: if (hDC==NULL)
123: DrawDC = GetDC(hWnd);
124: DrawMemDC = MemDC;
125: if (MemDC==NULL) {
126: DrawMemDC = CreateCompatibleDC(DrawDC);
127: SelectObject(DrawMemDC,Bitmaps[BITMAP_STATUSBAR_ICONS]);
128: }
129:
130: // So, are we on or off?
131: if (StatusIcons[StatusIcon].DisplayCount) { // On
132: SrcBitmapPos.x = StatusIcons[StatusIcon].SrcBitmapPos.x;
133: SrcBitmapPos.y = StatusIcons[StatusIcon].SrcBitmapPos.y;
134: }
135: else // Off(grey out)
136: SrcBitmapPos.x = SrcBitmapPos.y = 0;
137: // And draw icon from bottom-right corner
138: GetClientRect(hWnd,&Rect);
139: BitBlt(DrawDC,Rect.right-StatusIcons[StatusIcon].x,Rect.bottom-STATUS_ICONS_Y_OFFSET,StatusIcons[StatusIcon].SrcBitmapPos.w,StatusIcons[StatusIcon].SrcBitmapPos.h,DrawMemDC,SrcBitmapPos.x,SrcBitmapPos.y,SRCCOPY);
140:
141: // Delete bitmap object
142: if (hDC==NULL)
143: ReleaseDC(hWnd,DrawDC);
144: if (MemDC==NULL)
145: DeleteDC(DrawMemDC);
146: }
147: */
148: }
149:
150: //-----------------------------------------------------------------------
151: /*
152: Set status bar text and update window
153: */
154: void StatusBar_SetText(char *pString)
155: {
156: // Set text
157: strcpy(szStatusBarText,pString);
158: // And redraw, clear background
159: StatusBar_DrawText(TRUE);
160: }
161:
162: //-----------------------------------------------------------------------
163: /*
164: Draw status bar
165: */
166: void StatusBar_Draw(void)
167: {
168: /* FIXME */
169: /*
170: RECT Rect;
171: HDC hDC,MemDC;
172:
173: // Setup
174: hDC = GetDC(hWnd);
175: MemDC = CreateCompatibleDC(hDC);
176:
177: // Draw status bar, with resize icon
178: GetClientRect(hWnd,&Rect);
179: Rect.top = Rect.bottom-17;
180: View_DrawBackgroundRect(hDC,&Rect);
181: SelectObject(MemDC,Bitmaps[BITMAP_RESIZE]);
182: BitBlt(hDC,Rect.right-16,Rect.bottom-14,14,14,MemDC,0,0,SRCCOPY);
183:
184: // Complete
185: ReleaseDC(hWnd,hDC);
186: DeleteDC(MemDC);
187:
188: // And draw text, don't clear background as already done
189: StatusBar_DrawText(FALSE);
190: // And icons
191: StatusBar_DrawAllIcons();
192: */
193: }
194:
195: //-----------------------------------------------------------------------
196: /*
197: Draw text into status bar
198: */
199: void StatusBar_DrawText(BOOL bClearBackground)
200: {
201: /* FIXME */
202: /*
203: HFONT OldFont;
204: RECT Rect,ClearRect;
205: HDC hDC;
206: int x,y;
207:
208: if (!bInFullScreen) { // Only draw when in Window, else DirectX may draw! Doh!
209: hDC = GetDC(hWnd);
210:
211: // Find where status bar is!
212: GetClientRect(hWnd,&Rect);
213:
214: // Clear status bar - just text area
215: ClearRect = Rect;
216: ClearRect.left = STATUS_TEXT_X_OFFSET;
217: ClearRect.right -= STATUS_ICONS_X_OFFSET;
218: ClearRect.top = ClearRect.bottom - STATUS_ICONS_Y_OFFSET;
219: ClearRect.bottom -= 1;
220: View_DrawBackgroundRect(hDC,&ClearRect);
221:
222: // Find coords to place text
223: x = Rect.left + STATUS_TEXT_X_OFFSET;
224: y = Rect.bottom - STATUS_ICONS_Y_OFFSET;
225:
226: // Draw new text string
227: SetBkMode(hDC,TRANSPARENT); // Font
228: OldFont = (HFONT)SelectObject(hDC,(HFONT)GetStockObject(ANSI_VAR_FONT));
229: TextOut(hDC,x,y,szStatusBarText,strlen(szStatusBarText));
230: SelectObject(hDC,OldFont);
231:
232: ReleaseDC(hWnd,hDC);
233: }
234: */
235: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.