Lines Matching refs:output
30 * Notify the output of some change
33 RROutputChanged(RROutputPtr output, Bool configChanged)
36 ScreenPtr pScreen = output->pScreen;
39 output->changed = TRUE;
59 * Create an output
66 RROutputPtr output;
83 output = malloc(sizeof(RROutputRec) + nameLength + 1);
84 if (!output)
86 output->id = FakeClientID(0);
87 output->pScreen = pScreen;
88 output->name = (char *) (output + 1);
89 output->nameLength = nameLength;
90 memcpy(output->name, name, nameLength);
91 output->name[nameLength] = '\0';
92 output->connection = RR_UnknownConnection;
93 output->subpixelOrder = SubPixelUnknown;
94 output->mmWidth = 0;
95 output->mmHeight = 0;
96 output->crtc = NULL;
97 output->numCrtcs = 0;
98 output->crtcs = NULL;
99 output->numClones = 0;
100 output->clones = NULL;
101 output->numModes = 0;
102 output->numPreferred = 0;
103 output->modes = NULL;
104 output->numUserModes = 0;
105 output->userModes = NULL;
106 output->properties = NULL;
107 output->pendingProperties = FALSE;
108 output->changed = FALSE;
109 output->nonDesktop = FALSE;
110 output->devPrivate = devPrivate;
112 if (!AddResource(output->id, RROutputType, (void *) output))
115 pScrPriv->outputs[pScrPriv->numOutputs++] = output;
120 (void) RRConfigureOutputProperty(output, nonDesktopAtom, FALSE, FALSE, FALSE,
123 RROutputSetNonDesktop(output, FALSE);
126 return output;
130 * Notify extension that output parameters have been changed
133 RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones)
138 if (numClones == output->numClones) {
140 if (output->clones[i] != clones[i])
152 free(output->clones);
154 output->clones = newClones;
155 output->numClones = numClones;
156 RROutputChanged(output, TRUE);
161 RROutputSetModes(RROutputPtr output,
167 if (numModes == output->numModes && numPreferred == output->numPreferred) {
169 if (output->modes[i] != modes[i])
185 if (output->modes) {
186 for (i = 0; i < output->numModes; i++)
187 RRModeDestroy(output->modes[i]);
188 free(output->modes);
191 output->modes = newModes;
192 output->numModes = numModes;
193 output->numPreferred = numPreferred;
194 RROutputChanged(output, TRUE);
199 RROutputAddUserMode(RROutputPtr output, RRModePtr mode)
202 ScreenPtr pScreen = output->pScreen;
207 /* Check to see if this mode is already listed for this output */
208 for (m = 0; m < output->numModes + output->numUserModes; m++) {
209 RRModePtr e = (m < output->numModes ?
210 output->modes[m] :
211 output->userModes[m - output->numModes]);
218 if (!pScrPriv->rrOutputValidateMode(pScreen, output, mode))
221 if (output->userModes)
222 newModes = reallocarray(output->userModes,
223 output->numUserModes + 1, sizeof(RRModePtr));
229 output->userModes = newModes;
230 output->userModes[output->numUserModes++] = mode;
232 RROutputChanged(output, TRUE);
238 RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode)
243 for (m = 0; m < output->numUserModes; m++) {
244 RRModePtr e = output->userModes[m];
250 if (m == output->numUserModes)
253 /* make sure the mode isn't active for this output */
254 if (output->crtc && output->crtc->mode == mode)
257 memmove(output->userModes + m, output->userModes + m + 1,
258 (output->numUserModes - m - 1) * sizeof(RRModePtr));
259 output->numUserModes--;
265 RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs)
270 if (numCrtcs == output->numCrtcs) {
272 if (output->crtcs[i] != crtcs[i])
284 free(output->crtcs);
286 output->crtcs = newCrtcs;
287 output->numCrtcs = numCrtcs;
288 RROutputChanged(output, TRUE);
293 RROutputSetConnection(RROutputPtr output, CARD8 connection)
295 if (output->connection == connection)
297 output->connection = connection;
298 RROutputChanged(output, TRUE);
303 RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder)
305 if (output->subpixelOrder == subpixelOrder)
308 output->subpixelOrder = subpixelOrder;
309 RROutputChanged(output, FALSE);
314 RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight)
316 if (output->mmWidth == mmWidth && output->mmHeight == mmHeight)
318 output->mmWidth = mmWidth;
319 output->mmHeight = mmHeight;
320 RROutputChanged(output, FALSE);
325 RROutputSetNonDesktop(RROutputPtr output, Bool nonDesktop)
334 return RRChangeOutputProperty(output, nonDesktopProp, XA_INTEGER, 32,
339 RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output)
344 RRCrtcPtr crtc = output->crtc;
353 .output = output->id,
357 .connection = output->nonDesktop ? RR_Disconnected : output->connection,
358 .subpixelOrder = output->subpixelOrder
367 RROutputDestroy(RROutputPtr output)
369 FreeResource(output->id, 0);
375 RROutputPtr output = (RROutputPtr) value;
376 ScreenPtr pScreen = output->pScreen;
387 if (lease->outputs[o] == output) {
394 if (pScrPriv->primaryOutput == output)
398 if (pScrPriv->outputs[i] == output) {
408 if (output->modes) {
409 for (m = 0; m < output->numModes; m++)
410 RRModeDestroy(output->modes[m]);
411 free(output->modes);
414 for (m = 0; m < output->numUserModes; m++)
415 RRModeDestroy(output->userModes[m]);
416 free(output->userModes);
418 free(output->crtcs);
419 free(output->clones);
420 RRDeleteAllOutputProperties(output);
421 free(output);
426 * Initialize output type
439 * Initialize output type error value
454 RROutputPtr output;
467 VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess);
469 leased = RROutputIsLeased(output);
471 pScreen = output->pScreen;
490 .nameLength = output->nameLength
510 .crtc = output->crtc ? output->crtc->id : None,
511 .mmWidth = output->mmWidth,
512 .mmHeight = output->mmHeight,
513 .connection = output->nonDesktop ? RR_Disconnected : output->connection,
514 .subpixelOrder = output->subpixelOrder,
515 .nCrtcs = output->numCrtcs,
516 .nModes = output->numModes + output->numUserModes,
517 .nPreferred = output->numPreferred,
518 .nClones = output->numClones,
519 .nameLength = output->nameLength
521 extraLen = ((output->numCrtcs +
522 output->numModes + output->numUserModes +
523 output->numClones + bytes_to_int32(rep.nameLength)) << 2);
535 modes = (RRMode *) (crtcs + output->numCrtcs);
536 clones = (RROutput *) (modes + output->numModes + output->numUserModes);
537 name = (char *) (clones + output->numClones);
539 for (i = 0; i < output->numCrtcs; i++) {
540 crtcs[i] = output->crtcs[i]->id;
544 for (i = 0; i < output->numModes + output->numUserModes; i++) {
545 if (i < output->numModes)
546 modes[i] = output->modes[i]->mode.id;
548 modes[i] = output->userModes[i - output->numModes]->mode.id;
552 for (i = 0; i < output->numClones; i++) {
553 clones[i] = output->clones[i]->id;
558 memcpy(name, output->name, output->nameLength);
582 RRSetPrimaryOutput(ScreenPtr pScreen, rrScrPrivPtr pScrPriv, RROutputPtr output)
584 if (pScrPriv->primaryOutput == output)
594 if (output) {
595 pScrPriv->primaryOutput = output;
596 RROutputChanged(output, 0);
608 RROutputPtr output = NULL;
620 if (stuff->output) {
621 VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess);
623 if (RROutputIsLeased(output))
626 if (!output->pScreen->isGPU && output->pScreen != pWin->drawable.pScreen) {
630 if (output->pScreen->isGPU && output->pScreen->current_primary != pWin->drawable.pScreen) {
639 RRSetPrimaryOutput(pWin->drawable.pScreen, pScrPriv, output);
645 RRSetPrimaryOutput(secondary, rrGetScrPriv(secondary), output);
675 .output = primary ? primary->id : None
680 swapl(&rep.output);