annotate gui/mplayer/menu.c @ 33534:22c3241467b3

Remove function Normalize(). This function changed ARGB data as if it had been RGB24 data (not quite correctly) converted to ARGB with all colors transparent. Instead now, set the alpha channel for RGB24 data and leave ARGB data untouched. For X11, the alpha channel is disregarded, so both approaches are equal, but the new one is more intelligible as we get correct ARGB PNG data. For legacy reasons, all kind of fuchsia/magenta must be treated as transparent, because some skins are using at least both full opaque and full transparent fuchsia/magenta for transparency.
author ib
date Thu, 16 Jun 2011 11:19:15 +0000
parents 5f3171d4d7a4
children 55b8f5d5df15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26458
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
1 /*
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
2 * This file is part of MPlayer.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
3 *
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
5 * it under the terms of the GNU General Public License as published by
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
7 * (at your option) any later version.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
8 *
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
12 * GNU General Public License for more details.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
13 *
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
14 * You should have received a copy of the GNU General Public License along
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
17 */
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
18
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
19 #include <stdlib.h>
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
20 #include <stdio.h>
33123
9566100d88a1 Replace inttypes.h by stdint.h and remove inttypes.h where unneeded.
ib
parents: 33084
diff changeset
21 #include <stdint.h>
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
22
26382
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
23 #include "config.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
24 #include "help_mp.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
25 #include "mp_msg.h"
26365
10dfbc523184 Add gui/ prefix to some #include paths so that compilation from the
diego
parents: 26203
diff changeset
26 #include "gui/app.h"
23154
e564b9cd7290 Fix several implicit declarations of functions warnings.
diego
parents: 23077
diff changeset
27 #include "gmplayer.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
28
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
29 #include "widgets.h"
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
30
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
31 unsigned char * mplMenuDrawBuffer = NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
32 int mplMenuRender = 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
33 int mplMenuItem = -1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
34 int mplOldMenuItem = -1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
35 int mplMenuX,mplMenuY;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
36 static int mplMenuIsInitialized = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
37
30535
016e5fc1dead GUI: Mark functions that are not used outside their files as static.
diego
parents: 30531
diff changeset
38 static void mplMenuDraw( void )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
39 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
40 uint32_t * buf = NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
41 uint32_t * drw = NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
42 int x,y,tmp;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
43
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
44 if ( !appMPlayer.menuIsPresent || !appMPlayer.menu.Bitmap.Image ) return;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
45 if ( !mplMenuRender && !appMPlayer.menuWindow.Visible ) return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
46
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
47 if ( mplMenuRender || mplMenuItem != mplOldMenuItem )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
48 {
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
49 memcpy( mplMenuDrawBuffer,appMPlayer.menu.Bitmap.Image,appMPlayer.menu.Bitmap.ImageSize );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
50 // ---
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
51 if ( mplMenuItem != -1 )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
52 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
53 buf=(uint32_t *)mplMenuDrawBuffer;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
54 drw=(uint32_t *)appMPlayer.menuSelected.Bitmap.Image;
32912
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
55 for ( y=appMPlayer.menuItems[ mplMenuItem ].y; y < appMPlayer.menuItems[ mplMenuItem ].y + appMPlayer.menuItems[ mplMenuItem ].height; y++ )
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
56 for ( x=appMPlayer.menuItems[ mplMenuItem ].x; x < appMPlayer.menuItems[ mplMenuItem ].x + appMPlayer.menuItems[ mplMenuItem ].width; x++ )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
57 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
58 tmp=drw[ y * appMPlayer.menuSelected.width + x ];
33534
22c3241467b3 Remove function Normalize().
ib
parents: 33129
diff changeset
59 if ( !IS_TRANSPARENT ( tmp ) ) buf[ y * appMPlayer.menu.width + x ]=tmp;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
60 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
61 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
62 mplOldMenuItem=mplMenuItem;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
63 // ---
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
64 wsConvert( &appMPlayer.menuWindow,mplMenuDrawBuffer,appMPlayer.menu.Bitmap.ImageSize );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
65 mplMenuRender=0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
66 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
67 wsPutImage( &appMPlayer.menuWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
68 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
69
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
70 void mplMenuMouseHandle( int X,int Y,int RX,int RY )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
71 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
72 int x,y,i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
73
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
74 if ( !appMPlayer.menu.Bitmap.Image ) return;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
75
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
76 mplMenuItem=-1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
77 x=RX - appMPlayer.menuWindow.X;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
78 y=RY - appMPlayer.menuWindow.Y;
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
79 if ( ( x < 0 ) || ( y < 0 ) || ( x > appMPlayer.menu.width ) || ( y > appMPlayer.menu.height ) )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
80 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
81 wsPostRedisplay( &appMPlayer.menuWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
82 return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
83 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
84
32931
03b1051bed5c Rename the 'NumberOf' members of the listItems structure.
ib
parents: 32912
diff changeset
85 for( i=0;i<=appMPlayer.IndexOfMenuItems;i++ )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
86 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
87 if ( wgIsRect( x,y,
32912
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
88 appMPlayer.menuItems[i].x,appMPlayer.menuItems[i].y,
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
89 appMPlayer.menuItems[i].x+appMPlayer.menuItems[i].width,appMPlayer.menuItems[i].y+appMPlayer.menuItems[i].height ) ) { mplMenuItem=i; break; }
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
90 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
91 wsPostRedisplay( &appMPlayer.menuWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
92 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
93
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
94 void mplShowMenu( int mx,int my )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
95 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
96 int x,y;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
97
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
98 if ( !appMPlayer.menuIsPresent || !appMPlayer.menu.Bitmap.Image ) return;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
99
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
100 x=mx;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
101 if ( x + appMPlayer.menuWindow.Width > wsMaxX ) x=wsMaxX - appMPlayer.menuWindow.Width - 1 + wsOrgX;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
102 y=my;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
103 if ( y + appMPlayer.menuWindow.Height > wsMaxY ) y=wsMaxY - appMPlayer.menuWindow.Height - 1 + wsOrgY;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
104
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
105 mplMenuX=x; mplMenuY=y;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
106
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
107 mplMenuItem = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
108
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
109 wsMoveWindow( &appMPlayer.menuWindow,False,x,y );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
110 wsMoveTopWindow( wsDisplay,appMPlayer.menuWindow.WindowID );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
111 wsSetLayer( wsDisplay,appMPlayer.menuWindow.WindowID,1 );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
112 mplMenuRender=1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
113 wsVisibleWindow( &appMPlayer.menuWindow,wsShowWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
114 wsPostRedisplay( &appMPlayer.menuWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
115 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
116
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
117 void mplHideMenu( int mx,int my,int w )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
118 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
119 int x,y,i=mplMenuItem;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
120
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
121 if ( !appMPlayer.menuIsPresent || !appMPlayer.menu.Bitmap.Image ) return;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
122
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
123 x=mx-mplMenuX;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
124 y=my-mplMenuY;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
125 // x=RX - appMPlayer.menuWindow.X;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
126 // y=RY - appMPlayer.menuWindow.Y;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
127
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
128 wsVisibleWindow( &appMPlayer.menuWindow,wsHideWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
129
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
130 if ( ( x < 0 ) || ( y < 0 ) ) return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
131
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
132 // printf( "---------> %d %d,%d\n",i,x,y );
32912
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
133 // printf( "--------> mi: %d,%d %dx%d\n",appMPlayer.menuItems[i].x,appMPlayer.menuItems[i].y,appMPlayer.menuItems[i].width,appMPlayer.menuItems[i].height );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
134 if ( wgIsRect( x,y,
32912
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
135 appMPlayer.menuItems[i].x,appMPlayer.menuItems[i].y,
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
136 appMPlayer.menuItems[i].x+appMPlayer.menuItems[i].width,
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
137 appMPlayer.menuItems[i].y+appMPlayer.menuItems[i].height ) )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
138 {
32912
ca4d3fa55e43 Adjust the listItems structure.
ib
parents: 32911
diff changeset
139 mplEventHandling( appMPlayer.menuItems[i].message,(float)w );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
140 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
141 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
142
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
143 void mplMenuInit( void )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
144 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
145
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
146 if ( mplMenuIsInitialized || !appMPlayer.menuIsPresent || !appMPlayer.menu.Bitmap.Image ) return;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
147
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
148 appMPlayer.menu.x=0;
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
149 appMPlayer.menu.y=0;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
150
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
151 if ( ( mplMenuDrawBuffer = calloc( 1,appMPlayer.menu.Bitmap.ImageSize ) ) == NULL )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
152 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
153 #ifdef DEBUG
30531
704903d34069 Rename gui/mplayer/gtk/menu.[ch] --> gui/mplayer/gtk/gtkmenu.[ch].
diego
parents: 26458
diff changeset
154 mp_msg( MSGT_GPLAYER,MSGL_DBG2,MSGTR_NEMFMR );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
155 #endif
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
156 gtkMessageBox( GTK_MB_FATAL,MSGTR_NEMFMR );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
157 return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
158 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
159
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
160 wsCreateWindow( &appMPlayer.menuWindow,
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
161 appMPlayer.menu.x,appMPlayer.menu.y,appMPlayer.menu.width,appMPlayer.menu.height,
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
162 wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsOverredirect|wsHideFrame|wsMaxSize|wsMinSize|wsHideWindow,"MPlayer menu" );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
163
33084
b8779b19730e Cosmetic: Rename menuBase menu.
ib
parents: 32931
diff changeset
164 wsSetShape( &appMPlayer.menuWindow,appMPlayer.menu.Mask.Image );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
165
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
166 #ifdef DEBUG
30531
704903d34069 Rename gui/mplayer/gtk/menu.[ch] --> gui/mplayer/gtk/gtkmenu.[ch].
diego
parents: 26458
diff changeset
167 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"menu: 0x%x\n",(int)appMPlayer.menuWindow.WindowID );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
168 #endif
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
169
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
170 mplMenuIsInitialized=1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
171 appMPlayer.menuWindow.ReDraw=mplMenuDraw;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
172 // appMPlayer.menuWindow.MouseHandler=mplMenuMouseHandle;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
173 // appMPlayer.menuWindow.KeyHandler=mplMainKeyHandle;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
174 mplMenuRender=1; wsPostRedisplay( &appMPlayer.menuWindow );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
175 }