Mercurial > mplayer.hg
annotate libvo/geometry.c @ 31215:d0f70692a140
Make 3dnow and MMX code compile for 64 bit (just stupid search-and-replace).
They are not compiled/enabled on 64 bit though, since they are vastly slower
but would still be selected by default.
author | reimar |
---|---|
date | Sun, 30 May 2010 10:01:40 +0000 |
parents | 1b4d24af52a7 |
children | 08ce2830d10c |
rev | line source |
---|---|
27509
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
1 /* |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
2 * copyright (C) 2002 Mark Zealey <mark@zealos.org> |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
3 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
4 * This file is part of MPlayer. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
5 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
6 * MPlayer is free software; you can redistribute it and/or modify |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
9 * (at your option) any later version. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
10 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
11 * MPlayer is distributed in the hope that it will be useful, |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
14 * GNU General Public License for more details. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
15 * |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
16 * You should have received a copy of the GNU General Public License along |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
d97a607821f1
Replace casual GPL notices by proper license headers.
diego
parents:
15058
diff
changeset
|
19 */ |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
20 |
9217
420e2b2f8e5a
compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
8768
diff
changeset
|
21 #include <stdio.h> |
420e2b2f8e5a
compiler warning fixes patch by Dominik Mierzejewski <dominik@rangers.eu.org>
arpi
parents:
8768
diff
changeset
|
22 #include <string.h> |
29073
a5f19a8ecc86
Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents:
27509
diff
changeset
|
23 #include <limits.h> |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
24 #include "geometry.h" |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
11996
diff
changeset
|
25 #include "mp_msg.h" |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
26 |
8745
93f78fb709e6
Added support for X style -geometry options (adapted from Henk's patch)
mark
parents:
8254
diff
changeset
|
27 /* A string of the form [WxH][+X+Y] or xpos[%]:ypos[%] */ |
30450
201c9a709547
Remove pointless initializers and also set geometry_*_changed to 0 when
reimar
parents:
29350
diff
changeset
|
28 char *vo_geometry; |
11125 | 29 // set when either width or height is changed |
30450
201c9a709547
Remove pointless initializers and also set geometry_*_changed to 0 when
reimar
parents:
29350
diff
changeset
|
30 int geometry_wh_changed; |
201c9a709547
Remove pointless initializers and also set geometry_*_changed to 0 when
reimar
parents:
29350
diff
changeset
|
31 int geometry_xy_changed; |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
32 |
9517 | 33 // xpos,ypos: position of the left upper corner |
34 // widw,widh: width and height of the window | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29073
diff
changeset
|
35 // scrw,scrh: width and height of the current screen |
9517 | 36 int geometry(int *xpos, int *ypos, int *widw, int *widh, int scrw, int scrh) |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
37 { |
8745
93f78fb709e6
Added support for X style -geometry options (adapted from Henk's patch)
mark
parents:
8254
diff
changeset
|
38 if(vo_geometry != NULL) { |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
39 char xsign[2], ysign[2]; |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
40 int width, height, xoff, yoff, xper, yper; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
41 int i; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
42 int ok = 0; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
43 for (i = 0; !ok && i < 8; i++) { |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
44 width = height = xoff = yoff = xper = yper = INT_MIN; |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
45 strcpy(xsign, "+"); |
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
46 strcpy(ysign, "+"); |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
47 switch (i) { |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
48 case 0: |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
49 ok = sscanf(vo_geometry, "%ix%i%1[+-]%i%1[+-]%i", &width, &height, xsign, &xoff, ysign, &yoff) == 6; |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
50 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
51 case 1: |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
52 ok = sscanf(vo_geometry, "%ix%i", &width, &height) == 2; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
53 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
54 case 2: |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
55 ok = sscanf(vo_geometry, "%1[+-]%i%1[+-]%i", xsign, &xoff, ysign, &yoff) == 4; |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
56 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
57 case 3: |
30779
106543495f5b
Simplify sscanf format strings and get rid of useless percent variable.
reimar
parents:
30778
diff
changeset
|
58 ok = sscanf(vo_geometry, "%i%%:%i%%", &xper, &yper) == 2; |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
59 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
60 case 4: |
30779
106543495f5b
Simplify sscanf format strings and get rid of useless percent variable.
reimar
parents:
30778
diff
changeset
|
61 ok = sscanf(vo_geometry, "%i:%i%%", &xoff, &yper) == 2; |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
62 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
63 case 5: |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
64 ok = sscanf(vo_geometry, "%i%%:%i", &xper, &yoff) == 2; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
65 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
66 case 6: |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
67 ok = sscanf(vo_geometry, "%i:%i", &xoff, &yoff) == 2; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
68 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
69 case 7: |
30779
106543495f5b
Simplify sscanf format strings and get rid of useless percent variable.
reimar
parents:
30778
diff
changeset
|
70 ok = sscanf(vo_geometry, "%i%%", &xper) == 1; |
30778
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
71 break; |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
72 } |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
73 } |
dc08ce042315
Avoid very deep indentation level and RESET_GEOMETRY macro in -geometry
reimar
parents:
30450
diff
changeset
|
74 if (!ok) { |
10734 | 75 mp_msg(MSGT_VO, MSGL_ERR, |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
76 "-geometry must be in [WxH][[+-]X[+-]Y] | [X[%%]:[Y[%%]]] format, incorrect (%s)\n", vo_geometry); |
10734 | 77 return 0; |
78 } | |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
79 |
30781
1b4d24af52a7
Save the new width and height earlier so that e.g. -geometry 30x30-50-50
reimar
parents:
30780
diff
changeset
|
80 mp_msg(MSGT_VO, MSGL_V,"geometry window parameter: widw: %i," |
1b4d24af52a7
Save the new width and height earlier so that e.g. -geometry 30x30-50-50
reimar
parents:
30780
diff
changeset
|
81 " widh: %i, scrw: %i, scrh: %i\n",*widw, *widh, scrw, scrh); |
1b4d24af52a7
Save the new width and height earlier so that e.g. -geometry 30x30-50-50
reimar
parents:
30780
diff
changeset
|
82 |
9517 | 83 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i," |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
84 "height: %i, xoff: %s%i, yoff: %s%i, xper: %i, yper: %i\n", |
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
85 width, height, xsign, xoff, ysign, yoff, xper, yper); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29073
diff
changeset
|
86 |
30781
1b4d24af52a7
Save the new width and height earlier so that e.g. -geometry 30x30-50-50
reimar
parents:
30780
diff
changeset
|
87 if (width > 0 && widw) *widw = width; |
1b4d24af52a7
Save the new width and height earlier so that e.g. -geometry 30x30-50-50
reimar
parents:
30780
diff
changeset
|
88 if (height > 0 && widh) *widh = height; |
1b4d24af52a7
Save the new width and height earlier so that e.g. -geometry 30x30-50-50
reimar
parents:
30780
diff
changeset
|
89 |
30780
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
90 if(xoff != INT_MIN && xsign[0] == '-') xoff = scrw - *widw - xoff; |
0ab92d0c1901
Add support for specifying window position relative to right and bottom
reimar
parents:
30779
diff
changeset
|
91 if(yoff != INT_MIN && ysign[0] == '-') yoff = scrh - *widh - yoff; |
9517 | 92 if(xper >= 0 && xper <= 100) xoff = (scrw - *widw) * ((float)xper / 100.0); |
93 if(yper >= 0 && yper <= 100) yoff = (scrh - *widh) * ((float)yper / 100.0); | |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
94 |
9947 | 95 mp_msg(MSGT_VO, MSGL_V,"geometry set to width: %i," |
96 "height: %i, xoff: %i, yoff: %i, xper: %i, yper: %i\n", | |
97 width, height, xoff, yoff, xper, yper); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29073
diff
changeset
|
98 |
29073
a5f19a8ecc86
Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents:
27509
diff
changeset
|
99 if (xoff != INT_MIN && xpos) *xpos = xoff; |
a5f19a8ecc86
Get rid of nonsensical limits on -geometry x, y,w and h values, they only
reimar
parents:
27509
diff
changeset
|
100 if (yoff != INT_MIN && ypos) *ypos = yoff; |
8745
93f78fb709e6
Added support for X style -geometry options (adapted from Henk's patch)
mark
parents:
8254
diff
changeset
|
101 |
30450
201c9a709547
Remove pointless initializers and also set geometry_*_changed to 0 when
reimar
parents:
29350
diff
changeset
|
102 geometry_wh_changed = width > 0 || height > 0; |
201c9a709547
Remove pointless initializers and also set geometry_*_changed to 0 when
reimar
parents:
29350
diff
changeset
|
103 geometry_xy_changed = xoff != INT_MIN || yoff != INT_MIN; |
8767 | 104 } |
7866
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
105 return 1; |
732a8bfc7681
Added the -geometry option (supports fbdev and tdfxfb drivers)
mark
parents:
diff
changeset
|
106 } |