1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-11-23 21:54:53 +02:00
Files
FFmpeg/fftools/resources/graph.css
softworkz 517a805565 fftools/resources: Add resource manager files with build-time compression
Compression requires zlib to be available, otherwise resources will
be included uncompressed - in either case via BIN2C.

It can also be disabled via

./configure --disable-resource-compression

Size figures:

graph.css         7752
graph.css.min     6655 (css is always minified)
graph.html        2153

No Compression

graph.css.c      40026
graph.css.o       9344 (6688)
graph.html.c     13016
graph.html.o      4848 (2186)

With Compression

graph.css.c      10206
graph.css.o       4368 (1718)
graph.html.c      5725
graph.html.o      3632 (971)

Numbers in brackets: .rodata size from 'size -Ax -d *.o'

Signed-off-by: softworkz <softworkz@hotmail.com>
2025-05-15 23:08:05 +02:00

354 lines
7.6 KiB
CSS

/* Variables */
.root {
--ff-colvideo: #6eaa7b;
--ff-colaudio: #477fb3;
--ff-colsubtitle: #ad76ab;
--ff-coltext: #666;
}
/* Common & Misc */
.ff-inputfiles rect, .ff-outputfiles rect, .ff-inputstreams rect, .ff-outputstreams rect, .ff-decoders rect, .ff-encoders rect {
stroke-width: 0;
stroke: transparent;
filter: none !important;
fill: transparent !important;
display: none !important;
}
.cluster span {
color: var(--ff-coltext);
}
.cluster rect {
stroke: #dfdfdf !important;
transform: translateY(-2.3rem);
filter: drop-shadow(1px 2px 2px rgba(185,185,185,0.2)) !important;
rx: 8;
ry: 8;
}
.cluster-label {
font-size: 1.1rem;
}
.cluster-label .nodeLabel {
display: block;
font-weight: 500;
color: var(--ff-coltext);
}
.cluster-label div {
max-width: unset !important;
padding: 3px;
}
.cluster-label foreignObject {
transform: translateY(-0.7rem);
}
/* Input and output files */
.node.ff-inputfile .label foreignObject, .node.ff-outputfile .label foreignObject {
overflow: visible;
}
.cluster.ff-inputfile .cluster-label foreignObject div:not(foreignObject div div), .cluster.ff-outputfile .cluster-label foreignObject div:not(foreignObject div div) {
display: table !important;
}
.nodeLabel div.ff-inputfile, .nodeLabel div.ff-outputfile {
font-size: 1.1rem;
font-weight: 500;
min-width: 14rem;
width: 100%;
display: flex;
color: var(--ff-coltext);
margin-top: 0.1rem;
line-height: 1.35;
padding-bottom: 1.9rem;
}
.nodeLabel div.ff-outputfile {
flex-direction: row-reverse;
}
.ff-inputfile .index, .ff-outputfile .index {
order: 2;
color: var(--ff-coltext);
text-align: center;
border-radius: 0.45rem;
border: 0.18em solid #666666db;
font-weight: 600;
padding: 0 0.3em;
opacity: 0.8;
}
.ff-inputfile .index::before {
content: 'In ';
}
.ff-outputfile .index::before {
content: 'Out ';
}
.ff-inputfile .demuxer_name, .ff-outputfile .muxer_name {
flex: 1;
order: 1;
font-size: 0.9rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: center;
max-width: 8rem;
align-content: center;
margin: 0.2rem 0.4rem 0 0.4rem;
}
.ff-inputfile .file_extension, .ff-outputfile .file_extension {
order: 0;
background-color: #888;
color: white;
text-align: center;
border-radius: 0.45rem;
font-weight: 600;
padding: 0 0.4em;
align-content: center;
opacity: 0.8;
}
.ff-inputfile .url, .ff-outputfile .url {
order: 4;
text-align: center;
position: absolute;
left: 0;
right: 0;
bottom: 0.75rem;
font-size: 0.7rem;
font-weight: 400;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin: 0 0.3rem;
direction: rtl;
color: #999;
}
.cluster.ff-inputfile rect, .cluster.ff-outputfile rect {
transform: translateY(-1.8rem);
fill: url(#ff-radgradient);
}
/* Input and output streams */
.node.ff-inputstream rect, .node.ff-outputstream rect {
padding: 0 !important;
margin: 0 !important;
border: none !important;
fill: white;
stroke: #e5e5e5 !important;
height: 2.7rem;
transform: translateY(0.2rem);
filter: none;
rx: 3;
ry: 3;
}
.node.ff-inputstream .label foreignObject, .node.ff-outputstream .label foreignObject {
transform: translateY(-0.2%);
overflow: visible;
}
.node.ff-inputstream .label foreignObject div:not(foreignObject div div), .node.ff-outputstream .label foreignObject div:not(foreignObject div div) {
display: block !important;
line-height: 1.5 !important;
}
.nodeLabel div.ff-inputstream, .nodeLabel div.ff-outputstream {
font-size: 1.0rem;
font-weight: 500;
min-width: 12rem;
width: 100%;
display: flex;
}
.nodeLabel div.ff-outputstream {
flex-direction: row-reverse;
}
.ff-inputstream .name, .ff-outputstream .name {
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: left;
align-content: center;
margin-bottom: -0.15rem;
}
.ff-inputstream .index, .ff-outputstream .index {
flex: 0 0 1.4rem;
background-color: #888;
color: white;
text-align: center;
border-radius: 0.3rem;
font-weight: 600;
margin-right: -0.3rem;
margin-left: 0.4rem;
opacity: 0.8;
}
.ff-outputstream .index {
margin-right: 0.6rem;
margin-left: -0.4rem;
}
.ff-inputstream::before, .ff-outputstream::before {
font-variant-emoji: text;
flex: 0 0 2rem;
margin-left: -0.8rem;
margin-right: 0.2rem;
}
.ff-outputstream::before {
margin-left: 0.2rem;
margin-right: -0.6rem;
}
.ff-inputstream.video::before, .ff-outputstream.video::before {
content: '\239A';
color: var(--ff-colvideo);
font-size: 2.25rem;
line-height: 0.5;
font-weight: bold;
}
.ff-inputstream.audio::before, .ff-outputstream.audio::before {
content: '\1F39D';
color: var(--ff-colaudio);
font-size: 1.75rem;
line-height: 0.9;
}
.ff-inputstream.subtitle::before, .ff-outputstream.subtitle::before {
content: '\1AC';
color: var(--ff-colsubtitle);
font-size: 1.2rem;
line-height: 1.1;
transform: scaleX(1.5);
margin-top: 0.050rem;
}
.ff-inputstream.attachment::before, .ff-outputstream.attachment::before {
content: '\1F4CE';
font-size: 1.3rem;
line-height: 1.15;
}
.ff-inputstream.data::before, .ff-outputstream.data::before {
content: '\27E8\2219\2219\2219\27E9';
font-size: 1.15rem;
line-height: 1.17;
letter-spacing: -0.3px;
}
/* Filter Graphs */
.cluster.ff-filters rect {
stroke-dasharray: 6 !important;
stroke-width: 1.3px;
stroke: #d1d1d1 !important;
filter: none !important;
}
.cluster.ff-filters div.ff-filters .id {
display: none;
}
.cluster.ff-filters div.ff-filters .name {
margin-right: 0.5rem;
font-size: 0.9rem;
}
.cluster.ff-filters div.ff-filters .description {
font-weight: 400;
font-size: 0.75rem;
vertical-align: middle;
color: #777;
font-family: Cascadia Code, Lucida Console, monospace;
}
/* Filter Shapes */
.node.ff-filter rect {
rx: 10;
ry: 10;
stroke-width: 1px;
stroke: #d3d3d3;
fill: url(#ff-filtergradient);
filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.1));
}
.node.ff-filter .label foreignObject {
transform: translateY(-0.4rem);
overflow: visible;
}
.nodeLabel div.ff-filter {
font-size: 1.0rem;
font-weight: 500;
text-transform: uppercase;
min-width: 5.5rem;
margin-bottom: 0.5rem;
}
.nodeLabel div.ff-filter span {
color: inherit;
}
/* Decoders & Encoders */
.node.ff-decoder rect, .node.ff-encoder rect {
stroke-width: 1px;
stroke: #d3d3d3;
fill: url(#ff-filtergradient);
filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.1));
}
.nodeLabel div.ff-decoder, .nodeLabel div.ff-encoder {
font-size: 0.85rem;
font-weight: 500;
min-width: 3.5rem;
}
/* Links and Arrows */
path.flowchart-link[id|='video'] {
stroke: var(--ff-colvideo);
}
path.flowchart-link[id|='audio'] {
stroke: var(--ff-colaudio);
}
path.flowchart-link[id|='subtitle'] {
stroke: var(--ff-colsubtitle);
}
marker.marker path {
fill: context-stroke;
}
.edgeLabel foreignObject {
transform: translateY(-1rem);
}
.edgeLabel p {
background: transparent;
white-space: nowrap;
margin: 1rem 0.5rem !important;
font-weight: 500;
color: var(--ff-coltext);
}
.edgeLabel, .labelBkg {
background: transparent;
}
.edgeLabels .edgeLabel * {
font-size: 0.8rem;
}