Lines Matching refs:output

125            "  --dpi <dpi>/<output>\n"
126 " --output <output>\n"
134 " --left-of <output>\n"
135 " --right-of <output>\n"
136 " --above <output>\n"
137 " --below <output>\n"
138 " --same-as <output>\n"
158 " --addmode <output> <name>\n"
159 " --delmode <output> <name>\n"
165 " --setmonitor <name> {auto|<w>/<mmw>x<h>/<mmh>+<x>+<y>} {none|<output>,<output>,...}\n"
350 name_t output;
398 name_t output;
738 output_t *output = calloc (1, sizeof (output_t));
740 if (!output)
742 output->next = NULL;
743 output->found = False;
744 output->brightness = 1.0;
745 *all_outputs_tail = output;
746 all_outputs_tail = &output->next;
747 return output;
753 output_t *output;
755 for (output = all_outputs; output; output = output->next)
757 name_kind_t common = name->kind & output->output.kind;
759 if ((common & name_xid) && name->xid == output->output.xid)
761 if ((common & name_string) && !strcmp (name->string, output->output.string))
763 if ((common & name_index) && name->index == output->output.index)
766 return output;
770 find_output_by_xid (RROutput output)
775 set_name_xid (&output_name, output);
877 find_mode_for_output (output_t *output, name_t *name)
879 XRROutputInfo *output_info = output->output_info;
899 if (!output->refresh && (mode->modeFlags & RR_DoubleScan))
902 if (output->refresh)
903 dist = fabs (mode_refresh (mode) - output->refresh);
917 preferred_mode (output_t *output)
919 XRROutputInfo *output_info = output->output_info;
947 output_can_use_crtc (output_t *output, crtc_t *crtc)
949 XRROutputInfo *output_info = output->output_info;
958 output_can_use_mode (output_t *output, XRRModeInfo *mode)
960 XRROutputInfo *output_info = output->output_info;
996 output_rotations (output_t *output)
1000 XRROutputInfo *output_info = output->output_info;
1018 output_can_use_rotation (output_t *output, Rotation rotation)
1020 XRROutputInfo *output_info = output->output_info;
1037 output_is_primary(output_t *output)
1040 return XRRGetOutputPrimary(dpy, root) == output->output.xid;
1056 set_gamma_info(output_t *output)
1063 if (!output->crtc_info)
1066 crtc_gamma = XRRGetCrtcGamma(dpy, output->crtc_info->crtc.xid);
1068 warning("Failed to get gamma for output %s\n", output->output.string);
1109 output->brightness = 0;
1110 output->gamma.red = 1;
1111 output->gamma.green = 1;
1112 output->gamma.blue = 1;
1115 output->brightness = v2;
1117 output->brightness = exp((log(v2)*log(i1) - log(v1)*log(i2))/log(i1/i2));
1118 output->gamma.red = log((double)(crtc_gamma->red[last_red / 2]) / output->brightness
1120 output->gamma.green = log((double)(crtc_gamma->green[last_green / 2]) / output->brightness
1122 output->gamma.blue = log((double)(crtc_gamma->blue[last_blue / 2]) / output->brightness
1130 set_output_info (output_t *output, RROutput xid, XRROutputInfo *output_info)
1132 /* sanity check output info */
1137 /* set output name and info */
1138 if (!(output->output.kind & name_xid))
1139 set_name_xid (&output->output, xid);
1140 if (!(output->output.kind & name_string))
1141 set_name_string (&output->output, output_info->name);
1142 output->output_info = output_info;
1145 if (!(output->changes & changes_crtc))
1146 set_name_xid (&output->crtc, output_info->crtc);
1148 if (output->crtc.kind == name_xid && output->crtc.xid == None)
1149 output->crtc_info = NULL;
1152 output->crtc_info = find_crtc (&output->crtc);
1153 if (!output->crtc_info)
1155 if (output->crtc.kind & name_xid)
1156 fatal ("cannot find crtc 0x%lx\n", output->crtc.xid);
1157 if (output->crtc.kind & name_index)
1158 fatal ("cannot find crtc %d\n", output->crtc.index);
1160 if (!output_can_use_crtc (output, output->crtc_info))
1161 fatal ("output %s cannot use crtc 0x%lx\n", output->output.string,
1162 output->crtc_info->crtc.xid);
1166 if (!(output->changes & changes_mode))
1173 set_name_xid (&output->mode, crtc->crtc_info->mode);
1174 else if (output->crtc_info)
1175 set_name_xid (&output->mode, output->crtc_info->crtc_info->mode);
1177 set_name_xid (&output->mode, None);
1178 if (output->mode.xid)
1180 output->mode_info = find_mode_by_xid (output->mode.xid);
1181 if (!output->mode_info)
1182 fatal ("server did not report mode 0x%lx for output %s\n",
1183 output->mode.xid, output->output.string);
1186 output->mode_info = NULL;
1188 else if (output->mode.kind == name_xid && output->mode.xid == None)
1189 output->mode_info = NULL;
1192 if (output->mode.kind == name_preferred)
1193 output->mode_info = preferred_mode (output);
1195 output->mode_info = find_mode_for_output (output, &output->mode);
1196 if (!output->mode_info)
1198 if (output->mode.kind & name_preferred)
1200 if (output->mode.kind & name_string)
1201 fatal ("cannot find mode %s\n", output->mode.string);
1202 if (output->mode.kind & name_xid)
1203 fatal ("cannot find mode 0x%lx\n", output->mode.xid);
1205 if (!output_can_use_mode (output, output->mode_info))
1206 fatal ("output %s cannot use mode %s\n", output->output.string,
1207 output->mode_info->name);
1211 if (!(output->changes & changes_position))
1213 if (output->crtc_info)
1215 output->x = output->crtc_info->crtc_info->x;
1216 output->y = output->crtc_info->crtc_info->y;
1220 output->x = 0;
1221 output->y = 0;
1226 if (!(output->changes & changes_rotation))
1228 output->rotation &= ~0xf;
1229 if (output->crtc_info)
1230 output->rotation |= (output->crtc_info->crtc_info->rotation & 0xf);
1232 output->rotation = RR_Rotate_0;
1234 if (!(output->changes & changes_reflection))
1236 output->rotation &= ~(RR_Reflect_X|RR_Reflect_Y);
1237 if (output->crtc_info)
1238 output->rotation |= (output->crtc_info->crtc_info->rotation &
1241 if (!output_can_use_rotation (output, output->rotation))
1242 fatal ("output %s cannot use rotation \"%s\" reflection \"%s\"\n",
1243 output->output.string,
1244 rotation_name (output->rotation),
1245 reflection_name (output->rotation));
1248 if (!(output->changes & changes_gamma))
1249 set_gamma_info(output);
1252 if (!(output->changes & changes_transform))
1254 if (output->crtc_info)
1255 copy_transform (&output->transform, &output->crtc_info->current_transform);
1257 init_transform (&output->transform);
1263 if (output->scale_from_w > 0 && output->mode_info) {
1264 double sx = (double)output->scale_from_w /
1265 output->mode_info->width;
1266 double sy = (double)output->scale_from_h /
1267 output->mode_info->height;
1269 printf("scaling %s by %lfx%lf\n", output->output.string, sx,
1271 init_transform (&output->transform);
1272 output->transform.transform.matrix[0][0] = XDoubleToFixed (sx);
1273 output->transform.transform.matrix[1][1] = XDoubleToFixed (sy);
1274 output->transform.transform.matrix[2][2] = XDoubleToFixed (1.0);
1276 output->transform.filter = "bilinear";
1278 output->transform.filter = "nearest";
1279 output->transform.nparams = 0;
1280 output->transform.params = NULL;
1283 if (output->changes & changes_filter)
1285 output->transform.filter = filter_names[filter_type];
1289 if (!(output->changes & changes_primary))
1290 output->primary = output_is_primary(output);
1365 crtc_add_output (crtc_t *crtc, output_t *output)
1372 crtc->x = output->x;
1373 crtc->y = output->y;
1374 crtc->rotation = output->rotation;
1375 crtc->mode_info = output->mode_info;
1376 copy_transform (&crtc->pending_transform, &output->transform);
1379 crtc->outputs[crtc->noutput++] = output;
1385 output_t *output;
1387 for (output = all_outputs; output; output = output->next)
1389 if (!output->mode_info) continue;
1390 crtc_add_output (output->crtc_info, output);
1397 output_t *output;
1399 for (output = all_outputs; output; output = output->next)
1401 if (! output->crtc_info)
1403 if (! (output->changes & changes_panning))
1405 if (! output->crtc_info->panning_info)
1406 output->crtc_info->panning_info = malloc (sizeof(XRRPanning));
1407 memcpy (output->crtc_info->panning_info, &output->panning, sizeof(XRRPanning));
1408 output->crtc_info->changing = 1;
1415 for (output_t *output = all_outputs; output; output = output->next) {
1423 if (!(output->changes & changes_gamma))
1426 if (!output->crtc_info) {
1431 crtc = output->crtc_info;
1457 if (output->gamma.red == 0.0)
1458 output->gamma.red = 1.0;
1459 if (output->gamma.green == 0.0)
1460 output->gamma.green = 1.0;
1461 if (output->gamma.blue == 0.0)
1462 output->gamma.blue = 1.0;
1464 gammaRed = 1.0 / output->gamma.red;
1465 gammaGreen = 1.0 / output->gamma.green;
1466 gammaBlue = 1.0 / output->gamma.blue;
1469 if (gammaRed == 1.0 && output->brightness == 1.0)
1473 gammaRed) * output->brightness,
1476 if (gammaGreen == 1.0 && output->brightness == 1.0)
1480 gammaGreen) * output->brightness,
1483 if (gammaBlue == 1.0 && output->brightness == 1.0)
1487 gammaBlue) * output->brightness,
1503 for (output_t *output = all_outputs; output; output = output->next) {
1504 if (!(output->changes & changes_primary))
1506 if (output->primary)
1507 XRRSetOutputPrimary(dpy, root, output->output.xid);
1571 rr_outputs[o] = crtc->outputs[o]->output.xid;
1578 printf (" \"%s\"", crtc->outputs[o]->output.string);
1765 * Use current output state to complete the output list
1773 output_t *output;
1775 if (!output_info) fatal ("could not get output 0x%lx information\n", res->outputs[o]);
1780 output = find_output (&output_name);
1781 if (!output)
1783 output = add_output ();
1784 set_name_all (&output->output, &output_name);
1794 output->changes |= changes_automatic;
1795 output->automatic = True;
1801 output->changes |= changes_automatic;
1802 output->automatic = True;
1808 output->found = True;
1814 if (output->automatic)
1819 if ((!(output->changes & changes_mode)))
1821 set_name_preferred (&output->mode);
1822 output->changes |= changes_mode;
1826 if ((!(output->changes & changes_mode)))
1828 set_name_xid (&output->mode, None);
1829 set_name_xid (&output->crtc, None);
1830 output->changes |= changes_mode;
1831 output->changes |= changes_crtc;
1837 set_output_info (output, res->outputs[o], output_info);
1843 fprintf(stderr, "warning: output %s not found; ignoring\n",
1844 q->output.string);
1855 output_t *output;
1857 /* walk old output list (to catch disables) */
1860 output = find_output_by_xid (crtc->crtc_info->outputs[o]);
1861 if (!output) fatal ("cannot find output 0x%lx\n",
1863 if (output->changes)
1866 /* walk new output list */
1869 output = crtc->outputs[o];
1870 if (output->changes)
1877 * Test whether 'crtc' can be used for 'output'
1880 check_crtc_for_output (crtc_t *crtc, output_t *output)
1886 for (c = 0; c < output->output_info->ncrtc; c++)
1887 if (output->output_info->crtcs[c] == crtc->crtc.xid)
1889 if (c == output->output_info->ncrtc)
1893 if (other == output)
1902 /* see if the output connected to the crtc can clone to this output */
1903 for (l = 0; l < output->output_info->nclone; l++)
1904 if (output->output_info->clones[l] == other->output.xid)
1907 if (l == output->output_info->nclone)
1914 if (crtc->mode_info != output->mode_info)
1916 if (crtc->x != output->x)
1918 if (crtc->y != output->y)
1920 if (crtc->rotation != output->rotation)
1922 if (!equal_transform (&crtc->current_transform, &output->transform))
1930 if (mode != output->mode_info)
1932 if (crtc->crtc_info->x != output->x)
1934 if (crtc->crtc_info->y != output->y)
1936 if (crtc->crtc_info->rotation != output->rotation)
1943 find_crtc_for_output (output_t *output)
1945 for (int c = 0; c < output->output_info->ncrtc; c++)
1949 crtc = find_crtc_by_xid (output->output_info->crtcs[c]);
1950 if (!crtc) fatal ("cannot find crtc 0x%lx\n", output->output_info->crtcs[c]);
1952 if (check_crtc_for_output (crtc, output))
1961 output_t *output;
1969 for (output = all_outputs; output; output = output->next)
1974 if (!(output->changes & changes_relation)) continue;
1976 if (output->mode_info == NULL) continue;
1979 set_name_string (&relation_name, output->relative_to);
1981 if (!relation) fatal ("cannot find output \"%s\"\n", output->relative_to);
1985 output->x = 0;
1986 output->y = 0;
1987 output->changes |= changes_position;
2001 switch (output->relation) {
2003 output->y = relation->y;
2004 output->x = relation->x - mode_width (output->mode_info, output->rotation);
2007 output->y = relation->y;
2008 output->x = relation->x + mode_width (relation->mode_info, relation->rotation);
2011 output->x = relation->x;
2012 output->y = relation->y - mode_height (output->mode_info, output->rotation);
2015 output->x = relation->x;
2016 output->y = relation->y + mode_height (relation->mode_info, relation->rotation);
2019 output->x = relation->x;
2020 output->y = relation->y;
2022 output->changes |= changes_position;
2036 for (output = all_outputs; output; output = output->next)
2038 if (output->mode_info == NULL) continue;
2040 if (output->x < min_x) min_x = output->x;
2041 if (output->y < min_y) min_y = output->y;
2046 for (output = all_outputs; output; output = output->next)
2048 if (output->mode_info == NULL) continue;
2050 output->x -= min_x;
2051 output->y -= min_y;
2052 output->changes |= changes_position;
2062 for (output_t *output = all_outputs; output; output = output->next)
2064 XRRModeInfo *mode_info = output->mode_info;
2070 mode_geometry (mode_info, output->rotation,
2071 &output->transform.transform,
2073 x = output->x + bounds.x1;
2074 y = output->y + bounds.y1;
2077 /* make sure output fits in specified size */
2081 warning ("specified screen %dx%d not large enough for output %s (%dx%d+%d+%d)\n",
2082 fb_width, fb_height, output->output.string, w, h, x, y);
2084 /* fit fb to output */
2092 if (output->changes & changes_panning)
2093 pan = &output->panning;
2095 pan = output->crtc_info ? output->crtc_info->panning_info : NULL;
2130 * find the best mapping from output to crtc available
2135 output_t *output;
2144 output = outputs;
2147 * Score with this output disabled
2149 output->crtc_info = NULL;
2151 if (output->mode_info == NULL)
2156 * Now score with this output any valid crtc
2158 for (int c = 0; c < output->output_info->ncrtc; c++)
2162 crtc = find_crtc_by_xid (output->output_info->crtcs[c]);
2164 fatal ("cannot find crtc 0x%lx\n", output->output_info->crtcs[c]);
2168 if (!check_crtc_for_output (crtc, output))
2173 if (crtc == output->current_crtc_info)
2176 output->crtc_info = crtc;
2184 if (output->crtc_info != best_crtc)
2185 output->crtc_info = best_crtc;
2200 output_t *output;
2206 for (output = all_outputs; output; output = output->next)
2208 if (output->changes && output->mode_info)
2210 if (output->crtc_info) {
2211 if (output->crtc_info->crtc_info->noutput > 0 &&
2212 (output->crtc_info->crtc_info->noutput > 1 ||
2213 output != find_output_by_xid (output->crtc_info->crtc_info->outputs[0])))
2216 output->crtc_info = find_crtc_for_output (output);
2217 if (!output->crtc_info)
2225 if (!output)
2231 for (output = all_outputs; output; output = output->next)
2232 output->current_crtc_info = output->crtc_info;
2245 for (output = all_outputs; output; output = output->next)
2247 if (output->mode_info && !output->crtc_info)
2248 fatal ("cannot find crtc for output %s\n", output->output.string);
2249 if (!output->changes && output->crtc_info != output->current_crtc_info)
2250 output->changes |= changes_crtc;
2806 if (!strcmp ("--output", argv[i])) {
2812 set_name (&config_output->output, argv[i], name_string|name_xid);
2820 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2840 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2847 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2854 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2860 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2869 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2882 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2895 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2903 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2911 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2919 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2927 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2936 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2966 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2985 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
2994 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
3007 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
3023 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
3049 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
3063 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
3087 if (!config_output) argerr ("%s must be used after --output\n", argv[i]);
3206 set_name (&m->output, argv[++i], name_string|name_xid);
3220 set_name (&m->output, argv[++i], name_string|name_xid);
3298 printf ("output list %s\n", o);
3303 printf ("output name %s\n", m->outputs[m->noutput-1].string);
3392 o = find_output (&m->output);
3394 fatal ("cannot find output \"%s\"\n", m->output.string);
3398 XRRAddOutputMode (dpy, o->output.xid, e->id);
3401 o = find_output (&m->output);
3403 fatal ("cannot find output \"%s\"\n", m->output.string);
3407 XRRDeleteOutputMode (dpy, o->output.xid, e->id);
3423 for (output_t *output = all_outputs; output; output = output->next)
3425 for (output_prop_t *prop = output->props; prop; prop = prop->next)
3443 if (XRRGetOutputProperty (dpy, output->output.xid, name,
3449 (propinfo = XRRQueryOutputProperty(dpy, output->output.xid,
3494 XRRChangeOutputProperty (dpy, output->output.xid,
3557 * If an output was specified to track dpi, use it
3565 fatal ("Cannot find output %s\n", dpi_output_name);
3571 * When this output covers the whole screen, just use
3653 output_t *output = find_output(&u->outputs[o]);
3654 if (!output)
3655 fatal("cannot find output\n");
3656 m->outputs[o] = output->output.xid;
3702 for (output_t *output = all_outputs; output; output = output->next)
3704 XRROutputInfo *output_info = output->output_info;
3705 crtc_t *cur_crtc = output->crtc_info;
3707 XRRModeInfo *cur_mode = output->mode_info;
3709 Rotation rotations = output_rotations (output);
3712 if (output->primary) {
3723 cur_mode->width, cur_mode->height, output->x,
3724 output->y);
3728 if (output->rotation != RR_Rotate_0 || verbose)
3731 rotation_name (output->rotation));
3732 if (output->rotation & (RR_Reflect_X|RR_Reflect_Y))
3733 printf (" %s", reflection_name (output->rotation));
3793 printf ("\tIdentifier: 0x%x\n", (int)output->output.xid);
3796 if (output->gamma.red != 0.0 && output->gamma.green != 0.0 && output->gamma.blue != 0.0) {
3798 output->gamma.red, output->gamma.green, output->gamma.blue);
3799 printf ("\tBrightness: %#.2g\n", output->brightness);
3806 if (clone) printf (" %s", clone->output.string);
3809 if (output->crtc_info)
3810 printf ("\tCRTC: %d\n", output->crtc_info->crtc.index);
3819 if (output->crtc_info && output->crtc_info->panning_info) {
3820 XRRPanning *pan = output->crtc_info->panning_info;
3837 printf (" %f", XFixedToDouble (output->transform.transform.matrix[y][x]));
3841 if (output->transform.filter)
3842 printf ("\n\t filter: %s", output->transform.filter);
3847 Atom *props = XRRListOutputProperties (dpy, output->output.xid,
3858 XRRGetOutputProperty (dpy, output->output.xid, props[j],
3864 propinfo = XRRQueryOutputProperty(dpy, output->output.xid,
3919 print_verbose_mode (mode, mode == output->mode_info,
3952 if (kmode == output->mode_info)
4028 output_t *output = find_output_by_xid(monitors->monitors[m].outputs[o]);
4029 if (output)
4030 printf (" %s", output->output.string);
4032 printf (" unknown output 0x%"PRIxMAX"\n", (uintmax_t) monitors->monitors[m].outputs[o]);