1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
|
<?xml version="1.0" encoding="iso-8859-1"?>
<appendix id="skin">
<title>Formato del skin de MPlayer</title>
<para>
El propósito de este documento es describir el formato de los skin
de MPlayer. La información contenida aquí puede ser errónea, porque
<orderedlist>
<listitem><para>No soy yo quien ha escrito el GUI.</para></listitem>
<listitem><para>El GUI no está terminado.</para></listitem>
<listitem><para>Puedo equivocarme.</para></listitem>
</orderedlist>
No se sorprenda si algo no funciona como se describe aquí.
</para>
<para>Gracias a <emphasis>Zoltán Ponekker</emphasis> por su ayuda.</para>
<para><emphasis>András Mohari <mayday@freemail.hu></emphasis></para>
<sect1 id="skin-overview">
<title>Visión general</title>
<para>
Realmente no hay nada que hacer con el formato del skin, pero debe saber
que MPlaner <emphasis role="bold">no</emphasis> tiene un skin integrado,
por eso <emphasis role="bold">al menos un skin debe estar instalado para
poder usar el GUI.</emphasis>
</para>
<sect2 id="skin-overview-directories">
<title>Directorios</title>
<para>
Los directorios donde se buscan los skins son (en orden):
<orderedlist>
<listitem><para>
<filename class="directory">$(DATADIR)/Skin/</filename>
</para></listitem>
<listitem><para>
<filename class="directory">$(PREFIX)/share/mplayer/Skin/</filename>
</para></listitem>
<listitem><para>
<filename class="directory">~/.mplayer/Skin/</filename>
</para></listitem>
</orderedlist>
</para>
<para>
Tenga en cuenta que la primera ruta puede variar de acuerdo a cómo fue
configurado MPlayer (vea los argumentos <option>--prefix</option> y
<option>--datadir</option> del script <command>configure</command>).
</para>
<para>
Todo skin es instalado en su propio directorio bajo uno de los directorios
listados más arriba, por ejemplo:
<screen>$(PREFIX)/share/mplayer/Skin/default/</screen>
</para>
</sect2>
<sect2 id="skin-overview-formats">
<title>Formato de las imágenes</title>
<para>Las imágenes deben ser PNGs a color verdadero (24 or 32 bpp).</para>
<para>
En la ventana principal y en la barra de reproducción (ver más abajo) puede
usar imágenes con `transparencia': Regiones rellenas con color #FF00FF
(magenta) son completamente transparentes cuando se ven con MPlayer. Esto
significa que puede incluso tener ventanas con formas si su servidor X
tiene la extensión XShape.
</para>
</sect2>
<sect2 id="skin-overview-components">
<title>Componentes del skin</title>
<para>
Los skins son formatos bastante libres (no como otros skins de formato
fijo de Winamp/XMMS, por ejemplo), de manera que pueda crear algo grande.
</para>
<para>
Actualmente hay tres ventanas que decorar: la
<link linkend="skin-file-main">ventana principal</link>, la
<link linkend="skin-file-subwindow">subventana</link>, la
<link linkend="skin-file-main">barra de reproducción</link>, y el
<link linkend="skin-file-menu">skin del menú</link> (que puede activarse
con clic derecho).
<itemizedlist>
<listitem><para>
La <emphasis role="bold">ventana principal</emphasis> y/o la
<emphasis role="bold">barra de reproducción</emphasis> es donde puede controlar
MPlayer. El fondo de la ventana es una imagen. Varios objetos pueden (y deben)
ser colocados en la ventana: <emphasis>botones</emphasis>, <emphasis>medidores</emphasis>
(desplazables) y <emphasis>etiquetas</emphasis>. Para cada objeto, debe especificar
su posición y tamaño.
</para><para>
Un <emphasis role="bold">botón</emphasis> tiene tres estados (pulsado, soltado,
desactivado), por eso la imagen debe estar dividida en tres partes verticalmente.
Vea el objeto <link linkend="skin-button">botón</link> para detalles.
</para><para>
Un <emphasis role="bold">medidor</emphasis> (usado principalmente para la barra
de búsqueda y el control de volumen/balance) puede tener cualquier número de fases
dividiendo su imagen en diferentes partes unas debajo de otras. Vea
<link linkend="skin-hpotmeter">hpotmeter</link> y
<link linkend="skin-potmeter">potmeter</link> para detalles.
</para><para>
<emphasis role="bold">Etiquetas</emphasis> son un poco especiales: Los caractere
necesarios para pintarlas se toman de un archivo de imagen, y los caracteres en
la imagen son descritos por un <link linkend="skin-fonts">archivo de descriptión
de tipografía</link>. Lo último es un archivo de texto plano que especifica la
posición x,y y el tamaño de cada carater en la imagen (el archivo de imagen y su
archivo de descripción de tipografía forman <emphasis>juntos</emphasis> un tipo
de letra). Vea <link linkend="skin-dlabel">dlabel</link> y
<link linkend="skin-slabel">slabel</link> para detalles.
</para>
<note><para>Todas las imágenes pueden tener transparencia completa como se describe
en la sección que habla de <link linkend="skin-overview-formats">formatos
de imagen</link>. Si el servidor X no soporta la extensión XShape, las partes
marcadas como transparentes se verán negras. Si le gusta usar esta característica,
el ancho del fondo de la imagen de la ventana principal debe ser divisible por 8.
</para></note>
</listitem>
<listitem><para>
La <emphasis role="bold">subventana</emphasis> es donde aparece la película.
Puede mostrar una imagen específica si no hay película cargada (es bastante
aburrido tener una ventana vacía :-)) <emphasis role="bold">Nota:</emphasis>
la transparencia <emphasis role="bold">no está permitida</emphasis> aquí.
</para></listitem>
<listitem><para>
El <emphasis role="bold">skin del menú</emphasis> es una forma de controlar
MPlayer con entradas de menú. Dos imágenes son requeridas para el menú: una
es la imagen base que muestra el menú en su estado normal, la otra es usada
para mostrar las entradas seleccionadas. Cuando hace salir el menú, la entrada
seleccionada actualmente es copiada desde la segunda imagen sobre la entrada
de menú que hay bajo el puntero del ratón (la segunda imagen nunca se muestra
entera).
</para><para>
Una entrada de menú se define por su posición y tamaño en la imagen (vea la
sección que habla del <link linkend="skin-file-menu">skin del menú</link>
para detalles).
</para></listitem>
</itemizedlist>
</para>
<para>
Hay algo importante que aún no he mencionado: Para que los botones, medidores
deposición y entradas de menú funcionen, MPlayer tiene que saber qué hacer
cuando se hace clic en ellos. Esto se hace con
<link linkend="skin-gui">mensajes</link> (eventos). Para estos objetos
debe definir los mensajes que se generan cuando se hace clic en ellos.
</para>
</sect2>
<sect2 id="skin-files">
<title>Archivos</title>
<para>
Necesita los siguientes archivos para construir un skin:
<itemizedlist>
<listitem><para>
El archivo de configuración llamado <link linkend="skin-file">skin</link>
le dice a MPlayer cómo poner las diferentes partes del skin juntas y qué
debe hacer cuando se hace clic en alguna parte de la ventana.
</para></listitem>
<listitem><para>
La imagen de fondo para la ventana principal
</para></listitem>
<listitem><para>
Imágenes para los objetos en la ventana principal (incluyendo uno o más
archivos de descripción de tipografía necesarios para dibujar las etiquetas).
</para></listitem>
<listitem><para>
La imagen que se mostrará en la subventana (opcional).
</para></listitem>
<listitem><para>
Dos imágenes para el skin del menú (son necesarias solo si quiere crear
un menú).
</para></listitem>
</itemizedlist>
Con la excepción del archivo de configuración del skin, puede nombrar
los otros archivos como quiera (pero note que los archivos de descripción
de tipografía deben tener extensión <filename>.fnt</filename>).
</para>
</sect2>
</sect1>
<sect1 id="skin-file">
<title>El archivo de skin</title>
<para>
Como se menciona más arriba, este es el archivo de configuración del skin.
Su orientación en lineal; las líneas que son comentarios comienzan por
un caracter '<literal>;</literal>' al principio de la línea (solo espacios
y tabuladores están permitidos antes del '<literal>;</literal>').
</para>
<para>
El archivo está dividido en secciones. Cada sección describe el skin para
una aplicación y tiene la siguiente forma:
<programlisting>
section = <replaceable>nombre de la sección</replaceable>
.
.
.
end
</programlisting>
</para>
<para>
Actualmente solo hay una aplicación, por lo que necesita una sola sección: su nombre
es <emphasis role="bold">movieplayer</emphasis>.
</para>
<para>
Dentro de esta sección cada ventana está descrita por un bloque de la siguiente forma:
<programlisting>
window = <replaceable>nombre de la ventana</replaceable>
.
.
.
end
</programlisting>
</para>
<para>
donde <replaceable>nombre de la ventana</replaceable> puede ser una de las siguientes
cadenas de texto:
<itemizedlist>
<listitem><para><emphasis role="bold">main</emphasis> - para la ventana principal</para></listitem>
<listitem><para><emphasis role="bold">sub</emphasis> - para la subventana</para></listitem>
<listitem><para><emphasis role="bold">menu</emphasis> - para el skin del menú</para></listitem>
<listitem><para><emphasis role="bold">playbar</emphasis> - barra de reproducción</para></listitem>
</itemizedlist>
</para>
<para>
(Los bloques sub y menú son opcionales - no necesita crear un menú o decorar
la subventana.)
</para>
<para>
Dentro de un bloque de ventana, puede definir cada objeto para la ventana con
una línea del siguiente modo:
<programlisting>objeto = parámetro</programlisting>
Donde <literal>objeto</literal> es una cadena que identifica el tipo de objeto GUI,
<literal>parámetro</literal> es un valor numérico o textual (o una lista
de valores separados por comas).
</para>
<para>
Poniendo todo lo de arriba jutno, el archivo entero quedará algo similar a esto:
<programlisting>
section = movieplayer
window = main
; ... objetos para la ventana principal ...
end
window = sub
; ... objetos para la subventana ...
end
window = menu
; ... objetos para el menú ...
end
window = playbar
; ... objetos para la barra de reproducción ...
end
end
</programlisting>
</para>
<para>
El nombre de un archivo de imagen se debe dar sin los directorios - las imágenes
se buscan en el directorio <filename class="directory">Skin</filename>.
También puede (pero necesita ser root) especificar la extensión del archivo. Si
el archivo no existe, MPlayer intentará cargar el archivo
<filename><filename>.<ext></filename>, donde <literal>png</literal>
y <literal>PNG</literal> son probados para <filename><ext></filename>
(en ese orden). El primer nombre de archivo que coincida será el que se use.
</para>
<para>
Finalmente unas palabras acerca del posicionamiento. La ventana principal y la
subventana pueden ser colocadas en las diferentes esquinas de la pantalla dando
las coordenadas <literal>X</literal> e <literal>Y</literal> . <literal>0</literal>
es arriba o izquierda, <literal>-1</literal> es el centro y <literal>-2</literal>
es a la derecha o abajo, como se muestra en la ilustracion:
</para>
<informalfigure>
<screen>
(0, 0)----(-1, 0)----(-2, 0)
| | |
| | |
(0,-1)----(-1,-1)----(-2,-1)
| | |
| | |
(0,-2)----(-1,-2)----(-2,-2)
</screen>
</informalfigure>
<para>
Aquí tiene un ejemplo para clarificar esto. Suponga que tiene una imagen llamada
<filename>main.png</filename> que usa para la ventana principal:
<programlisting>base = main, -1, -1</programlisting>
MPlayer intentará cargar los archivos <filename>main</filename>, <filename>main.png</filename>,
<filename>main.PNG</filename>.
</para>
<sect2 id="skin-file-main">
<title>Ventana principal y barra de reproducción</title>
<para>
Más abajo tiene la lista de entradas que pueden usarse en los bloques
'<literal>window = main</literal>' . . . '<literal>end</literal>',
y '<literal>window = playbar</literal>' . . . '<literal>end</literal>'.
</para>
<variablelist>
<varlistentry>
<term><literal>
<anchor id="skin-main-base"/>base = image, X, Y
</literal></term>
<listitem><para>
Le permite especificar la imagen de fondo para usar en la ventana principal.
La ventana aparecerá en la posición <literal>X,Y</literal> dada de la pantalla.
La ventana tendrá el tamaño de la imagen.
</para>
<note><para>Estas coordenadas no funcionan actualmente para la ventana de
reproducción.</para></note><warning><para>Las regiones transparentes en la
imagen (coloreadas con #FF00FF) aparecen en negro en servidores X sin la
extensión XShape. El ancho de la imagen debe ser divisible por 8.</para></warning>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-button"/>button = imagen, X, Y, ancho, alto, mensaje
</literal></term>
<listitem><para>
Coloca un botón de tamaño <literal>ancho</literal> * <literal>alto</literal> en
la posición <literal>X,Y</literal>. El <literal>mensaje</literal> especificado
es generado cuando se hace clic en el botón. La imagen dada en
<literal>imagen</literal> debe tener tres partes una debajo de otra (de acuerdo con
los posibles estados del botón), como esto:
</para>
<informalfigure>
<screen>
+--------------+
| pulsado |
+--------------+
| soltado |
+--------------+
| desactivado |
+--------------+
</screen>
</informalfigure>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-decoration"/>decoration = enable|disable
</literal></term>
<listitem><para>
Activa o desactiva la decoración del administrador de ventanas para la
ventana principal. Por defecto toma el valor <emphasis role="bold">disable</emphasis>.
</para>
<note><para>Esto no funciona para la ventana de reproducción, no lo necesita.</para></note>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-hpotmeter"/>hpotmeter = botón, bancho, balto, fases, numfases, defecto, X, Y, ancho, alto, mensaje
</literal></term>
<listitem><para>
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-vpotmeter"/>vpotmeter = botón, bancho, balto, fases, numfases, defecto, X, Y, ancho, alto, mensaje
</literal></term>
<listitem><para>
Coloca un medidor horizontal (hpotmeter) o vertical (vpotmeter) de tamaño
<literal>ancho</literal> * <literal>alto</literal> en la posición
<literal>X,Y</literal>. La imagen puede ser dividida en diferentes partes para
las diferentes fases del medidor (por ejemplo, puede tener un medidor para
el control del volumen que vaya de verde a rojo mientras sus valores cambian
desde el mínimo al máximo.). <literal>hpotmeter</literal> puede tener un botón
que se desplaze horizontalmente. Los parámetros son:
</para>
<itemizedlist>
<listitem><para><literal>botón</literal> - la imagen que se usará para el
botón (debe tener tres partes una debajo de otra, como en el caso de
<link linkend="skin-button">botón</link>)
</para></listitem>
<listitem><para><literal>bancho</literal>,<literal>balto</literal> - tamaño
del botón
</para></listitem>
<listitem><para><literal>fases</literal> - la imagen que se usará para las
diferentes fases del medidor horizontal. Un valor especial <literal>NULL</literal>
puede usarse si no desea una imagen. La imagen debe estar dividida en
<literal>numfasespartes</literal> verticalmente como esto:
</para>
<informalfigure>
<screen>
+------------+
| fase #1 |
+------------+
| fase #2 |
+------------+
...
+------------+
| fase #n |
+------------+
</screen>
</informalfigure>
</listitem>
<listitem><para><literal>numfases</literal> - número de fases almacenadas en la
imagen de <literal>fases</literal>
</para></listitem>
<listitem><para><literal>defecto</literal> - valor por defecto en el medidor
(en el rango de <literal>0</literal> a <literal>100</literal>)
</para></listitem>
<listitem><para><literal>X</literal>,<literal>Y</literal> - posición del medidor
</para></listitem>
<listitem><para><literal>ancho</literal>,<literal>alto</literal> - ancho y alto
del <literal>medidor</literal>
</para></listitem>
<listitem><para><literal>mensaje</literal> - el mensaje que se ha de generar cuando
se cambia el valor del <literal>hpotmeter</literal>
</para></listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-potmeter"/>potmeter = fases, numfases, defecto, X, Y, ancho, alto, mensaje
</literal></term>
<listitem><para>
Un <literal>hpotmeter</literal> sin un botón. (Creo que está hecho para hacer una especie
de botón que gire sobre sí mismo, pero reacciona a arrastre horizontal solamente). Para la
descripción de los parámetros vea <link linkend="skin-hpotmeter">hpotmeter</link>.
<literal>fases</literal> puede ser <literal>NULL</literal>, pero es poco útil,
porque no le permite ver donde está establecido el valor del <literal>potmeter</literal>.
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-font"/>font = fontfile, fontid
</literal></term>
<listitem><para>
Define una tipografía. <literal>fontfile</literal> es el nombre del archivo de
descripción de la tipografía con extensión <filename>.fnt</filename> (no especifique
la extensión aquí). <literal>fontid</literal> es usado para referirse a la tipografía
(vea <link linkend="skin-dlabel">dlabel</link> y <link linkend="skin-slabel">slabel</link>).
Pueden definirse hasta 25 tipografías.
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-slabel"/>slabel = X, Y, fontid, "text"
</literal></term>
<listitem><para>
Coloca una etiqueta estática en la posición <literal>X,Y</literal>. <literal>text</literal>
se muestra usando la tipografía identificada con <literal>fontid</literal>. El texto es
una cadena de texto en crudo (variables como <literal>$x</literal> no funcionarán) que debe
ser encerrada entre comillas dobles (el caracter " no puede ser parte del texto).
La etiqueta es mostrada usando la tipografía identificada por <literal>fontid</literal>.
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-dlabel"/>dlabel = X, Y, length, align, fontid, "text"
</literal></term>
<listitem>
<para>
Coloca una etiqueta dinámica en la posición <literal>X,Y</literal>. La etiqueta se
llama dinámica porque su texto es refrescado periódicamente. La longitud máxima de la
etiqueta viene dada por <literal>length</literal> (su altura es la altura de un caracter).
Si el texto que ha de ser mostrado es más ancho que esta, será desplazado,
si no será alineado dentro del espacio especificado por el valor del parámetro
<literal>align</literal>: <literal>0</literal> es para derecha,
<literal>1</literal> para centrado, <literal>2</literal> para izquierda.
</para>
<para>
El texto que ha de ser mostrado viene dado por <literal>text</literal>: Debe ser
escrito entre comillas dobles (por eso el caracter " no puede ser parte del
texto). La etiqueta es mostrada usando la tipografía identificada por
<literal>fontid</literal>. Puede usar las siguientes variables en el texto:
</para>
<informaltable>
<tgroup cols="2">
<thead>
<row><entry>Variable</entry><entry>Significado</entry></row>
</thead>
<tbody>
<row>
<entry>$1</entry>
<entry>tiempo de reproducción en formato <emphasis>hh:mm:ss</emphasis></entry>
</row>
<row>
<entry>$2</entry>
<entry>tiempo de reproducción en formato <emphasis>mmmm:ss</emphasis></entry>
</row>
<row>
<entry>$3</entry>
<entry>tiempo de reproducción en formato <emphasis>hh</emphasis> (horas)</entry>
</row>
<row>
<entry>$4</entry>
<entry>tiempo de reproducción en formato<emphasis>mm</emphasis> (minutos)</entry>
</row>
<row>
<entry>$5</entry>
<entry>tiempo de reproducción en formato <emphasis>ss</emphasis> (segundos)</entry>
</row>
<row>
<entry>$6</entry>
<entry>longitud de película en formato <emphasis>hh:mm:ss</emphasis></entry>
</row>
<row>
<entry>$7</entry>
<entry>longitud de película en formato <emphasis>mmmm:ss</emphasis></entry>
</row>
<row>
<entry>$8</entry>
<entry>tiempo de reproducción en formato <emphasis>h:mm:ss</emphasis></entry>
</row>
<row>
<entry>$v</entry>
<entry>volumen en formato <emphasis>xxx.xx</emphasis>%</entry>
</row>
<row>
<entry>$V</entry>
<entry>volumen en formato <emphasis>xxx.xx</emphasis></entry>
</row>
<row>
<entry>$b</entry>
<entry>balance en formato <emphasis>xxx.xx</emphasis>%</entry>
</row>
<row>
<entry>$B</entry>
<entry>balance en formato <emphasis>xxx.xx</emphasis></entry>
</row>
<row>
<entry>$$</entry>
<entry>el caracter $</entry>
</row>
<row>
<entry>$a</entry>
<entry>un caracter de acuerdo con el tipo de audio (ninguno: <literal>n</literal>,
mono: <literal>m</literal>, estéreo: <literal>t</literal>)</entry>
</row>
<row>
<entry>$t</entry>
<entry>número de pista (en lista de reproducción)</entry>
</row>
<row>
<entry>$o</entry>
<entry>nombre del archivo</entry>
</row>
<row>
<entry>$f</entry>
<entry>nombre del archivo en minúsculas</entry>
</row>
<row>
<entry>$F</entry>
<entry>nombre del archivo en mayúsculas</entry>
</row>
<row>
<entry>$T</entry>
<entry>un caracter en función del tipo de flujo (archivo: <literal>f</literal>,
Video CD: <literal>v</literal>, DVD: <literal>d</literal>, URL: <literal>u</literal>)</entry>
</row>
<row>
<entry>$p</entry>
<entry>el caracter <keycap>p</keycap> (si una película está siendo mostrada y la
tipografía tiene el caracter <keycap>p</keycap></entry>
</row>
<row>
<entry>$s</entry>
<entry>el caracter <keycap>s</keycap> (si la película ha sido detenida y la
tipografía tiene el caracter <keycap>s</keycap></entry>
</row>
<row>
<entry>$e</entry>
<entry>el caracter <keycap>e</keycap> (si se ha pausado la reproducción y la
tipografía tiene el caracter <keycap>e</keycap></entry>
</row>
<row>
<entry>$x</entry>
<entry>ancho de la película</entry>
</row>
<row>
<entry>$y</entry>
<entry>alto de la película</entry>
</row>
<row>
<entry>$C</entry>
<entry>nombre del codec usado</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</listitem>
</varlistentry>
</variablelist>
<note><para>
Las variables <literal>$a, $T, $p, $s</literal> y <literal>$e</literal> devuelven
caracteres que deben mostrarse como símbolos especiales (por ejemplo, <keycap>e</keycap>
es para el símbolo de la pausa que normalmente es algo parecido a ||). Debe tener
una tipografía para caracteres normales y una diferente para los símbolos. Vea la
sección acerca de <link linkend="skin-fonts-symbols">símbolos</link> para más
información.
</para></note>
</sect2>
<sect2 id="skin-file-subwindow">
<title>Subventana</title>
<para>
Las siguientes entradas pueden ser usadas en el bloque
'<literal>window = sub</literal>' . . . '<literal>end</literal>'.
</para>
<variablelist>
<varlistentry>
<term><literal>
<anchor id="skin-sub-base"/>base = image, X, Y, width, height
</literal></term>
<listitem><para>
La imagen que se mostrará en la ventana. La ventana aparecerá en la posición
<literal>X,Y</literal> dada de la pantalla (<literal>0,0</literal> es la
esquina arriba a la izquierda). Puede especificar <literal>-1</literal> para
el centro y <literal>-2</literal> para el lado derecho (<literal>X</literal>) y
abajo (<literal>Y</literal>). La ventana será tan grande como sea la imagen.
<literal>width</literal> y <literal>height</literal> definen el tamaño de la ventana;
son opcionales (si no se especifican, la ventana tendrá el mismo tamaño que la imagen).
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-background"/>background = R, G, B
</literal></term>
<listitem><para>
Le permite especificar el color de fondo. Es útil si la imagen es más pequeña
que la ventana. <literal>R</literal>, <literal>G</literal> y <literal>B</literal>
especifican los valores de las componentes de color para rojo, verde y azul (cada
uno ha de tener un valor decimal de 0 a 255).
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2 id="skin-file-menu">
<title>Menú del skin</title>
<para>
Como se mencionó anteriormente, el menú es mostrado usando dos imágenes. Las entradas
normales para el menú se toman de la imagen especificada por el objeto <literal>base</literal>,
mientras que la entrada que actualmente esté seleccionada es tomada desde la imagen
especificada por el objeto <literal>selected</literal>. Debe definir la posición y el
tamaño de cada entrada de menú a través del objeto de menú.
</para>
<para>
Las siguientes entradas pueden usarse en el bloque de
'<literal>window = menu</literal>'. . .'<literal>end</literal>'.
</para>
<variablelist>
<varlistentry>
<term><literal>
<anchor id="skin-menu-base"/>base = image
</literal></term>
<listitem><para>
La imagen para las entradas normales del menú.
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-selected"/>selected = image
</literal></term>
<listitem><para>
La imagen mostrando el menú con todas las entradas seleccionadas.
</para></listitem>
</varlistentry>
<varlistentry>
<term><literal>
<anchor id="skin-menu"/>menu = X, Y, width, height, message
</literal></term>
<listitem><para>
Define la posición <literal>X,Y</literal> y el tamaño de una entrada
de menú en la imagen. <literal>message</literal> es el mensaje que ha de
generarse cuando el ratón del botón es soltado sobre la entrada.
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1 id="skin-fonts">
<title>Tipografías</title>
<para>
Como se mencionó en la sección acerca de las partes de un skin, una tipografía
viene definida por una imagen y un archivo de descripción. Puede colocar caracteres
en cualquier parte de la imagen, pero ha de asegurarse de que su posición y tamaño
vienen dados en el archivo de descripción de manera exacta.
</para>
<para>
El archivo de descripción de la tipografía (con extensión <filename>.fnt</filename>)
puede tener líneas de comentarios que empiecen por '<literal>;</literal>'. El archivo
debe tener una línea en la forma
<anchor id="skin-font-image"/>
<programlisting>image = <replaceable>image</replaceable></programlisting>
Donde <literal><replaceable>image</replaceable></literal> es el nombre del
archivo de imagen que se usará para la tipografía (puede no especificar la extensión).
<anchor id="skin-font-char"/>
<programlisting>"char" = X, Y, width, height</programlisting>
Aquí <literal>X</literal> e <literal>Y</literal> especifican la posición del
caracter <literal>char</literal> en la imagen (<literal>0,0</literal> es la
esquina superior izquierda). <literal>width</literal> y <literal>height</literal>
son las dimensiones del caracter en pixels.
</para>
<para>
Este ejemplo define los caracteres A, B, C usando <filename>font.png</filename>.
<programlisting>
; Puede ser "font" en lugar de "font.png".
image = font.png
; Tres caracteres son suficientes para el propósito de esta demostración :-)
"A" = 0,0, 7,13
"B" = 7,0, 7,13
"C" = 14,0, 7,13
</programlisting>
</para>
<sect2 id="skin-fonts-symbols">
<title>Símbolos</title>
<para>
Algunos caracteres tienen significado especial cuando son devueltos por algunas
de las variables usadas en <link linkend="skin-dlabel">dlabel</link>. Estos
caracteres se deben mostrar como símbolos para que parezca un bonito logotipo
de DVD en lugar del caracter '<literal>d</literal>' para un flujo de DVD por ejemplo.
</para>
<para>
La siguiente tabla lista todos los caracters que pueden ser usados para
mostrar símbolos (y que por lo tanto requieren una tipografía diferente).
</para>
<informaltable>
<tgroup cols="2">
<thead>
<row><entry>Caracter</entry><entry>Símbolo</entry></row>
</thead>
<tbody>
<row><entry><keycap>p</keycap></entry><entry>play</entry></row>
<row><entry><keycap>s</keycap></entry><entry>stop</entry></row>
<row><entry><keycap>e</keycap></entry><entry>pausa</entry></row>
<row><entry><keycap>n</keycap></entry><entry>no sound</entry></row>
<row><entry><keycap>m</keycap></entry><entry>mono sound</entry></row>
<row><entry><keycap>t</keycap></entry><entry>stereo sound</entry></row>
<row><entry><keycap>f</keycap></entry><entry>stream es un archivo</entry></row>
<row><entry><keycap>v</keycap></entry><entry>stream es un Video CD</entry></row>
<row><entry><keycap>d</keycap></entry><entry>stream es un DVD</entry></row>
<row><entry><keycap>u</keycap></entry><entry>stream es una URL</entry></row>
</tbody>
</tgroup>
</informaltable>
</sect2>
</sect1>
<sect1 id="skin-gui">
<title>Mensajes GUI</title>
<para>
Son los mensajes que pueden ser generados por los botones, potmetros y entradas
de menú.
</para>
<note><para>
Algunos de los mensajes pueden no funcionar como se espera (o ni funcionar).
Como ya sabe, el GUI está bajo desarrollo.
</para></note>
<variablelist>
<title>Control de reproducción:</title>
<varlistentry>
<term><emphasis role="bold">evNext</emphasis></term>
<listitem><para>
Salta a la siguiente pista en la lista de reproducción.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPause</emphasis></term>
<listitem><para>
Forma un cambio junto con <literal>evPlaySwitchToPause</literal>. Puede ser
usado para tener un botón normal de play/pausa. Ambos mensajes deben ser asignados
a botones que se muestren exactamente en la misma posición en la ventana. Este mensaje
pausa la reproducción y la imagen para el botón <literal>evPlaySwitchToPause</literal>
es mostrada (para indicar que el botón puede ser pulsado de nuevo para continuar
la reproducción).
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPlay</emphasis></term>
<listitem><para>
Inicia la reproducción.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPlaySwitchToPause</emphasis></term>
<listitem><para>
Lo contrario a <literal>evPauseSwitchToPlay</literal>. Este mensaje inicia
la reproducción y la imagen para el botón <literal>evPauseSwitchToPlay</literal>
es mostrada (para indicar que el botón puede ser pulsado de nuevo para
volver a pausar la reproducción).
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPrev</emphasis></term>
<listitem><para>
Salta a la pista previa en la lista de reproducción.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evStop</emphasis></term>
<listitem><para>
Detiene la reproducción.
</para></listitem>
</varlistentry>
</variablelist>
<variablelist>
<title>Búsqueda:</title>
<varlistentry>
<term><emphasis role="bold">evBackward10sec</emphasis></term>
<listitem><para>
Busca 10 segundos hacia atrás.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evBackward1min</emphasis></term>
<listitem><para>
Busca 1 minuto hacia atrás.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evBackward10min</emphasis></term>
<listitem><para>
Busca 10 minutos hacia atrás.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evForward10sec</emphasis></term>
<listitem><para>
Busca 10 segundos hacia adelante.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evForward1min</emphasis></term>
<listitem><para>
Busca 1 minuto hacia adelante.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evForward10min</emphasis></term>
<listitem><para>
Busca 10 minutos hacia adelante.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evSetMoviePosition</emphasis></term>
<listitem><para>
Busca la posición (puede ser usado por un potmetro; el
valor relativo (0-100%) del potmetro será el que se use).
</para></listitem>
</varlistentry>
</variablelist>
<variablelist>
<title>Control de video:</title>
<varlistentry>
<term><emphasis role="bold">evDoubleSize</emphasis></term>
<listitem><para>
Establece doble tamaño para la ventana de la película.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evFullScreen</emphasis></term>
<listitem><para>
Cambia el modo pantalla completa activado/desactivado.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evNormalSize</emphasis></term>
<listitem><para>
Establece la ventana de video a tu tamaño normal
</para></listitem>
</varlistentry>
</variablelist>
<variablelist>
<title>Control de audio:</title>
<varlistentry>
<term><emphasis role="bold">evDecAudioBufDelay</emphasis></term>
<listitem><para>
Decrementa el retardo en el buffer de audio.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evDecBalance</emphasis></term>
<listitem><para>
Decrementa el balance.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evDecVolume</emphasis></term>
<listitem><para>
Decrementa el volumen.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evIncAudioBufDelay</emphasis></term>
<listitem><para>
Incrementa el retardo en el buffer de audio.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evIncBalance</emphasis></term>
<listitem><para>
Incrementa el balance.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evIncVolume</emphasis></term>
<listitem><para>
Incrementa el volumen.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evMute</emphasis></term>
<listitem><para>
Silencia/activa el sonido.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evSetBalance</emphasis></term>
<listitem><para>
Establece el balance (puede ser usado por un potmetro; el
valor relativo (0-100%) del potmetro será el que se use).
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evSetVolume</emphasis></term>
<listitem><para>
Establece el volumen (puede ser usado por un potmetro; el
valor relativo (0-100%) del potmetro será el que se use).
</para></listitem>
</varlistentry>
</variablelist>
<variablelist>
<title>Miscelánea:</title>
<varlistentry>
<term><emphasis role="bold">evAbout</emphasis></term>
<listitem><para>
Abre la ventana de acerca de.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evDropSubtitle</emphasis></term>
<listitem><para>
Desactiva el uso de subtítulos actual.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evEqualizer</emphasis></term>
<listitem><para>
Activa/desactiva el ecualizador.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evExit</emphasis></term>
<listitem><para>
Sale del programa.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evIconify</emphasis></term>
<listitem><para>
Iconifica la ventana.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evLoad</emphasis></term>
<listitem><para>
Carga un archivo (abriendo una ventana del navegador de archivos, para que pueda elegir uno).
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evLoadPlay</emphasis></term>
<listitem><para>
Hace lo mismo que <literal>evLoad</literal>, pero inicia automáticamente la reproducción
después de cargar el archivo.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evLoadSubtitle</emphasis></term>
<listitem><para>
Carga un archivo de subtítulos (con el selector de archivos)
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evLoadAudioFile</emphasis></term>
<listitem><para>
Carga un archivo de audio (con el selector de archivos)
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evNone</emphasis></term>
<listitem><para>
Mensaje vacío, no tiene efecto (excepto quizá en las versiones CVS :-)).
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPlayList</emphasis></term>
<listitem><para>
Abre/cierra la ventana de lista de reproducción.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPlayDVD</emphasis></term>
<listitem><para>
Intenta abrir el disco en la unidad de DVD-ROM dada.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPlayVCD</emphasis></term>
<listitem><para>
Intenta abrir el disco en la unidad de CD-ROM dada.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evPreferences</emphasis></term>
<listitem><para>
Abre la ventana de preferencias.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evSetAspect</emphasis></term>
<listitem><para>
Establece el aspecto de la imagen mostrada.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evSetURL</emphasis></term>
<listitem><para>
Muestra la ventana de diálogo para URL.
</para></listitem>
</varlistentry>
<varlistentry>
<term><emphasis role="bold">evSkinBrowser</emphasis></term>
<listitem><para>
Abre la ventana del navegador de skins.
</para></listitem>
</varlistentry>
</variablelist>
</sect1>
</appendix>
|