1af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/
2665c2dedSJed Brown #include <petscviewer.h>
35c6c1daeSBarry Smith
45c6c1daeSBarry Smith PetscClassId PETSC_DRAW_CLASSID;
55c6c1daeSBarry Smith
65c6c1daeSBarry Smith static PetscBool PetscDrawPackageInitialized = PETSC_FALSE;
75c6c1daeSBarry Smith /*@C
8f0b74427SPierre Jolivet PetscDrawFinalizePackage - This function destroys everything in the PETSc interface to the `PetscDraw` package. It is
9811af0c4SBarry Smith called from `PetscFinalize()`.
105c6c1daeSBarry Smith
115c6c1daeSBarry Smith Level: developer
125c6c1daeSBarry Smith
13811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscFinalize()`
145c6c1daeSBarry Smith @*/
PetscDrawFinalizePackage(void)15d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawFinalizePackage(void)
16d71ae5a4SJacob Faibussowitsch {
175c6c1daeSBarry Smith PetscFunctionBegin;
189566063dSJacob Faibussowitsch PetscCall(PetscFunctionListDestroy(&PetscDrawList));
195c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_FALSE;
200f51fdf8SToby Isaac PetscDrawRegisterAllCalled = PETSC_FALSE;
213ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
225c6c1daeSBarry Smith }
235c6c1daeSBarry Smith
245c6c1daeSBarry Smith /*@C
25aec76313SJacob Faibussowitsch PetscDrawInitializePackage - This function initializes everything in the `PetscDraw` package. It is called
26811af0c4SBarry Smith from PetscDLLibraryRegister_petsc() when using dynamic libraries, and on the call to `PetscInitialize()`
278a690491SBarry Smith when using shared or static libraries.
285c6c1daeSBarry Smith
295c6c1daeSBarry Smith Level: developer
305c6c1daeSBarry Smith
31811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscInitialize()`
325c6c1daeSBarry Smith @*/
PetscDrawInitializePackage(void)33d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawInitializePackage(void)
34d71ae5a4SJacob Faibussowitsch {
355c6c1daeSBarry Smith char logList[256];
368e81d068SLisandro Dalcin PetscBool opt, pkg;
375c6c1daeSBarry Smith
385c6c1daeSBarry Smith PetscFunctionBegin;
393ba16761SJacob Faibussowitsch if (PetscDrawPackageInitialized) PetscFunctionReturn(PETSC_SUCCESS);
405c6c1daeSBarry Smith PetscDrawPackageInitialized = PETSC_TRUE;
415c6c1daeSBarry Smith /* Register Classes */
429566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Draw", &PETSC_DRAW_CLASSID));
439566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Draw Axis", &PETSC_DRAWAXIS_CLASSID));
449566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Line Graph", &PETSC_DRAWLG_CLASSID));
459566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Histogram", &PETSC_DRAWHG_CLASSID));
469566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Bar Graph", &PETSC_DRAWBAR_CLASSID));
479566063dSJacob Faibussowitsch PetscCall(PetscClassIdRegister("Scatter Plot", &PETSC_DRAWSP_CLASSID));
485c6c1daeSBarry Smith /* Register Constructors */
499566063dSJacob Faibussowitsch PetscCall(PetscDrawRegisterAll());
50e94e781bSJacob Faibussowitsch /* Process Info */
51e94e781bSJacob Faibussowitsch {
52e94e781bSJacob Faibussowitsch PetscClassId classids[6];
53e94e781bSJacob Faibussowitsch
54e94e781bSJacob Faibussowitsch classids[0] = PETSC_DRAW_CLASSID;
55e94e781bSJacob Faibussowitsch classids[1] = PETSC_DRAWAXIS_CLASSID;
56e94e781bSJacob Faibussowitsch classids[2] = PETSC_DRAWLG_CLASSID;
57e94e781bSJacob Faibussowitsch classids[3] = PETSC_DRAWHG_CLASSID;
58e94e781bSJacob Faibussowitsch classids[4] = PETSC_DRAWBAR_CLASSID;
59e94e781bSJacob Faibussowitsch classids[5] = PETSC_DRAWSP_CLASSID;
609566063dSJacob Faibussowitsch PetscCall(PetscInfoProcessClass("draw", 6, classids));
615c6c1daeSBarry Smith }
625c6c1daeSBarry Smith /* Process summary exclusions */
639566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-log_exclude", logList, sizeof(logList), &opt));
645c6c1daeSBarry Smith if (opt) {
659566063dSJacob Faibussowitsch PetscCall(PetscStrInList("draw", logList, ',', &pkg));
668e81d068SLisandro Dalcin if (pkg) {
679566063dSJacob Faibussowitsch PetscCall(PetscLogEventExcludeClass(PETSC_DRAW_CLASSID));
689566063dSJacob Faibussowitsch PetscCall(PetscLogEventExcludeClass(PETSC_DRAWAXIS_CLASSID));
699566063dSJacob Faibussowitsch PetscCall(PetscLogEventExcludeClass(PETSC_DRAWLG_CLASSID));
709566063dSJacob Faibussowitsch PetscCall(PetscLogEventExcludeClass(PETSC_DRAWHG_CLASSID));
719566063dSJacob Faibussowitsch PetscCall(PetscLogEventExcludeClass(PETSC_DRAWBAR_CLASSID));
729566063dSJacob Faibussowitsch PetscCall(PetscLogEventExcludeClass(PETSC_DRAWSP_CLASSID));
735c6c1daeSBarry Smith }
745c6c1daeSBarry Smith }
758e81d068SLisandro Dalcin /* Register package finalizer */
769566063dSJacob Faibussowitsch PetscCall(PetscRegisterFinalize(PetscDrawFinalizePackage));
773ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
785c6c1daeSBarry Smith }
795c6c1daeSBarry Smith
805c6c1daeSBarry Smith /*@
815c6c1daeSBarry Smith PetscDrawResizeWindow - Allows one to resize a window from a program.
825c6c1daeSBarry Smith
83c3339decSBarry Smith Collective
845c6c1daeSBarry Smith
85d8d19677SJose E. Roman Input Parameters:
865c6c1daeSBarry Smith + draw - the window
872fe279fdSBarry Smith . w - the new width of the window
882fe279fdSBarry Smith - h - the new height of the window
895c6c1daeSBarry Smith
905c6c1daeSBarry Smith Level: intermediate
915c6c1daeSBarry Smith
92811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawCheckResizedWindow()`
935c6c1daeSBarry Smith @*/
PetscDrawResizeWindow(PetscDraw draw,int w,int h)94d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawResizeWindow(PetscDraw draw, int w, int h)
95d71ae5a4SJacob Faibussowitsch {
965c6c1daeSBarry Smith PetscFunctionBegin;
9773ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
9873ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw, w, 2);
9973ecf448SLisandro Dalcin PetscValidLogicalCollectiveInt(draw, h, 3);
100dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, resizewindow, w, h);
1013ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
1025c6c1daeSBarry Smith }
1035c6c1daeSBarry Smith
10473ecf448SLisandro Dalcin /*@
10573ecf448SLisandro Dalcin PetscDrawGetWindowSize - Gets the size of the window.
10673ecf448SLisandro Dalcin
10720f4b53cSBarry Smith Not Collective
10873ecf448SLisandro Dalcin
10973ecf448SLisandro Dalcin Input Parameter:
11073ecf448SLisandro Dalcin . draw - the window
11173ecf448SLisandro Dalcin
11273ecf448SLisandro Dalcin Output Parameters:
11320f4b53cSBarry Smith + w - the window width
11420f4b53cSBarry Smith - h - the window height
11573ecf448SLisandro Dalcin
11673ecf448SLisandro Dalcin Level: intermediate
11773ecf448SLisandro Dalcin
118811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawResizeWindow()`, `PetscDrawCheckResizedWindow()`
11973ecf448SLisandro Dalcin @*/
PetscDrawGetWindowSize(PetscDraw draw,int * w,int * h)120d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetWindowSize(PetscDraw draw, int *w, int *h)
121d71ae5a4SJacob Faibussowitsch {
12273ecf448SLisandro Dalcin PetscFunctionBegin;
12373ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
1244f572ea9SToby Isaac if (w) PetscAssertPointer(w, 2);
1254f572ea9SToby Isaac if (h) PetscAssertPointer(h, 3);
12673ecf448SLisandro Dalcin if (w) *w = draw->w;
12773ecf448SLisandro Dalcin if (h) *h = draw->h;
1283ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
12973ecf448SLisandro Dalcin }
13073ecf448SLisandro Dalcin
1315c6c1daeSBarry Smith /*@
1325c6c1daeSBarry Smith PetscDrawCheckResizedWindow - Checks if the user has resized the window.
1335c6c1daeSBarry Smith
134c3339decSBarry Smith Collective
1355c6c1daeSBarry Smith
1365c6c1daeSBarry Smith Input Parameter:
1375c6c1daeSBarry Smith . draw - the window
1385c6c1daeSBarry Smith
1395c6c1daeSBarry Smith Level: advanced
1405c6c1daeSBarry Smith
141811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawResizeWindow()`
1425c6c1daeSBarry Smith @*/
PetscDrawCheckResizedWindow(PetscDraw draw)143d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawCheckResizedWindow(PetscDraw draw)
144d71ae5a4SJacob Faibussowitsch {
1455c6c1daeSBarry Smith PetscFunctionBegin;
14673ecf448SLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
147dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, checkresizedwindow);
1483ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
1495c6c1daeSBarry Smith }
1505c6c1daeSBarry Smith
151cc4c1da9SBarry Smith /*@
152811af0c4SBarry Smith PetscDrawGetTitle - Gets pointer to title of a `PetscDraw` context.
1535c6c1daeSBarry Smith
15420f4b53cSBarry Smith Not Collective
1555c6c1daeSBarry Smith
1565c6c1daeSBarry Smith Input Parameter:
1575c6c1daeSBarry Smith . draw - the graphics context
1585c6c1daeSBarry Smith
1595c6c1daeSBarry Smith Output Parameter:
1605c6c1daeSBarry Smith . title - the title
1615c6c1daeSBarry Smith
1625c6c1daeSBarry Smith Level: intermediate
1635c6c1daeSBarry Smith
164811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawSetTitle()`
1655c6c1daeSBarry Smith @*/
PetscDrawGetTitle(PetscDraw draw,const char * title[])166d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetTitle(PetscDraw draw, const char *title[])
167d71ae5a4SJacob Faibussowitsch {
1685c6c1daeSBarry Smith PetscFunctionBegin;
1695c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
1704f572ea9SToby Isaac PetscAssertPointer(title, 2);
1715c6c1daeSBarry Smith *title = draw->title;
1723ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
1735c6c1daeSBarry Smith }
1745c6c1daeSBarry Smith
175cc4c1da9SBarry Smith /*@
176811af0c4SBarry Smith PetscDrawSetTitle - Sets the title of a `PetscDraw` context.
1775c6c1daeSBarry Smith
178c3339decSBarry Smith Collective
1795c6c1daeSBarry Smith
1805c6c1daeSBarry Smith Input Parameters:
1815c6c1daeSBarry Smith + draw - the graphics context
1825c6c1daeSBarry Smith - title - the title
1835c6c1daeSBarry Smith
1845c6c1daeSBarry Smith Level: intermediate
1855c6c1daeSBarry Smith
186811af0c4SBarry Smith Notes:
187811af0c4SBarry Smith The title is positioned in the windowing system title bar for the window. Hence it will not be saved with -draw_save
188231a95f8SBarry Smith in the image.
189231a95f8SBarry Smith
1905c6c1daeSBarry Smith A copy of the string is made, so you may destroy the
1915c6c1daeSBarry Smith title string after calling this routine.
1925c6c1daeSBarry Smith
193811af0c4SBarry Smith You can use `PetscDrawAxisSetLabels()` to indicate a title within the window
194231a95f8SBarry Smith
195811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawGetTitle()`, `PetscDrawAppendTitle()`
1965c6c1daeSBarry Smith @*/
PetscDrawSetTitle(PetscDraw draw,const char title[])197d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetTitle(PetscDraw draw, const char title[])
198d71ae5a4SJacob Faibussowitsch {
1995c6c1daeSBarry Smith PetscFunctionBegin;
2005c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
2014f572ea9SToby Isaac PetscAssertPointer(title, 2);
2029566063dSJacob Faibussowitsch PetscCall(PetscFree(draw->title));
2039566063dSJacob Faibussowitsch PetscCall(PetscStrallocpy(title, &draw->title));
204dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, settitle, draw->title);
2053ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
2065c6c1daeSBarry Smith }
2075c6c1daeSBarry Smith
208cc4c1da9SBarry Smith /*@
209811af0c4SBarry Smith PetscDrawAppendTitle - Appends to the title of a `PetscDraw` context.
2105c6c1daeSBarry Smith
211c3339decSBarry Smith Collective
2125c6c1daeSBarry Smith
2135c6c1daeSBarry Smith Input Parameters:
2145c6c1daeSBarry Smith + draw - the graphics context
2155c6c1daeSBarry Smith - title - the title
2165c6c1daeSBarry Smith
21720f4b53cSBarry Smith Level: advanced
21820f4b53cSBarry Smith
2195c6c1daeSBarry Smith Note:
2205c6c1daeSBarry Smith A copy of the string is made, so you may destroy the
2215c6c1daeSBarry Smith title string after calling this routine.
2225c6c1daeSBarry Smith
223811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawSetTitle()`, `PetscDrawGetTitle()`
2245c6c1daeSBarry Smith @*/
PetscDrawAppendTitle(PetscDraw draw,const char title[])225d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawAppendTitle(PetscDraw draw, const char title[])
226d71ae5a4SJacob Faibussowitsch {
2275c6c1daeSBarry Smith PetscFunctionBegin;
2285c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
2294f572ea9SToby Isaac if (title) PetscAssertPointer(title, 2);
2303ba16761SJacob Faibussowitsch if (!title || !title[0]) PetscFunctionReturn(PETSC_SUCCESS);
2315c6c1daeSBarry Smith
2325c6c1daeSBarry Smith if (draw->title) {
233c6a7a370SJeremy L Thompson size_t len1, len2, new_len;
234c6a7a370SJeremy L Thompson PetscCall(PetscStrlen(draw->title, &len1));
235c6a7a370SJeremy L Thompson PetscCall(PetscStrlen(title, &len2));
236c6a7a370SJeremy L Thompson new_len = len1 + len2 + 1;
237f4f49eeaSPierre Jolivet PetscCall(PetscRealloc(new_len * sizeof(*draw->title), &draw->title));
238c6a7a370SJeremy L Thompson PetscCall(PetscStrncpy(draw->title + len1, title, len2 + 1));
2395c6c1daeSBarry Smith } else {
2409566063dSJacob Faibussowitsch PetscCall(PetscStrallocpy(title, &draw->title));
2415c6c1daeSBarry Smith }
242dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, settitle, draw->title);
2433ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
2445c6c1daeSBarry Smith }
2455c6c1daeSBarry Smith
PetscDrawDestroy_Private(PetscDraw draw)246d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscDrawDestroy_Private(PetscDraw draw)
247d71ae5a4SJacob Faibussowitsch {
248e118a51fSLisandro Dalcin PetscFunctionBegin;
2493ba16761SJacob Faibussowitsch if (!draw->ops->save && !draw->ops->getimage) PetscFunctionReturn(PETSC_SUCCESS);
2509566063dSJacob Faibussowitsch PetscCall(PetscDrawSaveMovie(draw));
251e118a51fSLisandro Dalcin if (draw->savefinalfilename) {
252df8d4941SLisandro Dalcin draw->savesinglefile = PETSC_TRUE;
2539566063dSJacob Faibussowitsch PetscCall(PetscDrawSetSave(draw, draw->savefinalfilename));
2549566063dSJacob Faibussowitsch PetscCall(PetscDrawSave(draw));
255e118a51fSLisandro Dalcin }
2569566063dSJacob Faibussowitsch PetscCall(PetscBarrier((PetscObject)draw));
2573ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
258e118a51fSLisandro Dalcin }
259e118a51fSLisandro Dalcin
2605c6c1daeSBarry Smith /*@
2615c6c1daeSBarry Smith PetscDrawDestroy - Deletes a draw context.
2625c6c1daeSBarry Smith
263c3339decSBarry Smith Collective
2645c6c1daeSBarry Smith
26520f4b53cSBarry Smith Input Parameter:
2665c6c1daeSBarry Smith . draw - the drawing context
2675c6c1daeSBarry Smith
2685c6c1daeSBarry Smith Level: beginner
2695c6c1daeSBarry Smith
270811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawCreate()`
2715c6c1daeSBarry Smith @*/
PetscDrawDestroy(PetscDraw * draw)272d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawDestroy(PetscDraw *draw)
273d71ae5a4SJacob Faibussowitsch {
2745c6c1daeSBarry Smith PetscFunctionBegin;
2753ba16761SJacob Faibussowitsch if (!*draw) PetscFunctionReturn(PETSC_SUCCESS);
2765c6c1daeSBarry Smith PetscValidHeaderSpecific(*draw, PETSC_DRAW_CLASSID, 1);
277f4f49eeaSPierre Jolivet if (--((PetscObject)*draw)->refct > 0) PetscFunctionReturn(PETSC_SUCCESS);
2785c6c1daeSBarry Smith
2795c6c1daeSBarry Smith if ((*draw)->pause == -2) {
2805c6c1daeSBarry Smith (*draw)->pause = -1;
2819566063dSJacob Faibussowitsch PetscCall(PetscDrawPause(*draw));
2825c6c1daeSBarry Smith }
2835c6c1daeSBarry Smith
2845c6c1daeSBarry Smith /* if memory was published then destroy it */
2859566063dSJacob Faibussowitsch PetscCall(PetscObjectSAWsViewOff((PetscObject)*draw));
2865c6c1daeSBarry Smith
2879566063dSJacob Faibussowitsch PetscCall(PetscDrawDestroy_Private(*draw));
288e118a51fSLisandro Dalcin
289213acdd3SPierre Jolivet PetscTryTypeMethod(*draw, destroy);
2909566063dSJacob Faibussowitsch PetscCall(PetscDrawDestroy(&(*draw)->popup));
2919566063dSJacob Faibussowitsch PetscCall(PetscFree((*draw)->title));
2929566063dSJacob Faibussowitsch PetscCall(PetscFree((*draw)->display));
2939566063dSJacob Faibussowitsch PetscCall(PetscFree((*draw)->savefilename));
2949566063dSJacob Faibussowitsch PetscCall(PetscFree((*draw)->saveimageext));
2959566063dSJacob Faibussowitsch PetscCall(PetscFree((*draw)->savemovieext));
2969566063dSJacob Faibussowitsch PetscCall(PetscFree((*draw)->savefinalfilename));
2979566063dSJacob Faibussowitsch PetscCall(PetscHeaderDestroy(draw));
2983ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
2995c6c1daeSBarry Smith }
3005c6c1daeSBarry Smith
3015c6c1daeSBarry Smith /*@
302811af0c4SBarry Smith PetscDrawGetPopup - Creates a popup window associated with a `PetscDraw` window.
3035c6c1daeSBarry Smith
304c3339decSBarry Smith Collective
3055c6c1daeSBarry Smith
3065c6c1daeSBarry Smith Input Parameter:
3075c6c1daeSBarry Smith . draw - the original window
3085c6c1daeSBarry Smith
3095c6c1daeSBarry Smith Output Parameter:
3105c6c1daeSBarry Smith . popup - the new popup window
3115c6c1daeSBarry Smith
3125c6c1daeSBarry Smith Level: advanced
3135c6c1daeSBarry Smith
314811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawScalePopup()`, `PetscDrawCreate()`
3155c6c1daeSBarry Smith @*/
PetscDrawGetPopup(PetscDraw draw,PetscDraw * popup)316d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetPopup(PetscDraw draw, PetscDraw *popup)
317d71ae5a4SJacob Faibussowitsch {
3185c6c1daeSBarry Smith PetscFunctionBegin;
3195c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
3204f572ea9SToby Isaac PetscAssertPointer(popup, 2);
3215c6c1daeSBarry Smith
322a297a907SKarl Rupp if (draw->popup) *popup = draw->popup;
323a297a907SKarl Rupp else if (draw->ops->getpopup) {
324dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, getpopup, popup);
3250b874712SBarry Smith if (*popup) {
3269566063dSJacob Faibussowitsch PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*popup, "popup_"));
327e118a51fSLisandro Dalcin (*popup)->pause = 0.0;
3289566063dSJacob Faibussowitsch PetscCall(PetscDrawSetFromOptions(*popup));
32961f59835SBarry Smith }
3300298fd71SBarry Smith } else *popup = NULL;
3313ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
3325c6c1daeSBarry Smith }
3335c6c1daeSBarry Smith
334cc4c1da9SBarry Smith /*@
335811af0c4SBarry Smith PetscDrawSetDisplay - Sets the display where a `PetscDraw` object will be displayed
3365c6c1daeSBarry Smith
337d8d19677SJose E. Roman Input Parameters:
3385c6c1daeSBarry Smith + draw - the drawing context
3395c6c1daeSBarry Smith - display - the X windows display
3405c6c1daeSBarry Smith
3415c6c1daeSBarry Smith Level: advanced
3425c6c1daeSBarry Smith
343811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawOpenX()`, `PetscDrawCreate()`
3445c6c1daeSBarry Smith @*/
PetscDrawSetDisplay(PetscDraw draw,const char display[])345d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetDisplay(PetscDraw draw, const char display[])
346d71ae5a4SJacob Faibussowitsch {
3475c6c1daeSBarry Smith PetscFunctionBegin;
3489566063dSJacob Faibussowitsch PetscCall(PetscFree(draw->display));
3499566063dSJacob Faibussowitsch PetscCall(PetscStrallocpy(display, &draw->display));
3503ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
3515c6c1daeSBarry Smith }
3525c6c1daeSBarry Smith
35345f3bb6eSLisandro Dalcin /*@
35445f3bb6eSLisandro Dalcin PetscDrawSetDoubleBuffer - Sets a window to be double buffered.
35545f3bb6eSLisandro Dalcin
356c3339decSBarry Smith Logically Collective
3575c6c1daeSBarry Smith
3585c6c1daeSBarry Smith Input Parameter:
35945f3bb6eSLisandro Dalcin . draw - the drawing context
36045f3bb6eSLisandro Dalcin
36145f3bb6eSLisandro Dalcin Level: intermediate
36245f3bb6eSLisandro Dalcin
363811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawOpenX()`, `PetscDrawCreate()`
36445f3bb6eSLisandro Dalcin @*/
PetscDrawSetDoubleBuffer(PetscDraw draw)365d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetDoubleBuffer(PetscDraw draw)
366d71ae5a4SJacob Faibussowitsch {
3675c6c1daeSBarry Smith PetscFunctionBegin;
36845f3bb6eSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
369dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, setdoublebuffer);
3703ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
3715c6c1daeSBarry Smith }
3725c6c1daeSBarry Smith
373cc4c1da9SBarry Smith /*@
374811af0c4SBarry Smith PetscDrawGetSingleton - Gain access to a `PetscDraw` object as if it were owned
3755c6c1daeSBarry Smith by the one process.
3765c6c1daeSBarry Smith
377c3339decSBarry Smith Collective
3785c6c1daeSBarry Smith
3795c6c1daeSBarry Smith Input Parameter:
3805c6c1daeSBarry Smith . draw - the original window
3815c6c1daeSBarry Smith
3825c6c1daeSBarry Smith Output Parameter:
3835c6c1daeSBarry Smith . sdraw - the singleton window
3845c6c1daeSBarry Smith
3855c6c1daeSBarry Smith Level: advanced
3865c6c1daeSBarry Smith
387811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawRestoreSingleton()`, `PetscViewerGetSingleton()`, `PetscViewerRestoreSingleton()`
3885c6c1daeSBarry Smith @*/
PetscDrawGetSingleton(PetscDraw draw,PetscDraw * sdraw)389d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetSingleton(PetscDraw draw, PetscDraw *sdraw)
390d71ae5a4SJacob Faibussowitsch {
3915c6c1daeSBarry Smith PetscMPIInt size;
3925c6c1daeSBarry Smith
3935c6c1daeSBarry Smith PetscFunctionBegin;
3945c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
3954f572ea9SToby Isaac PetscAssertPointer(sdraw, 2);
3965c6c1daeSBarry Smith
3979566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)draw), &size));
398387ef4f7SLisandro Dalcin if (size == 1) {
3999566063dSJacob Faibussowitsch PetscCall(PetscObjectReference((PetscObject)draw));
400387ef4f7SLisandro Dalcin *sdraw = draw;
401*966bd95aSPierre Jolivet } else PetscUseTypeMethod(draw, getsingleton, sdraw);
4023ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
4035c6c1daeSBarry Smith }
4045c6c1daeSBarry Smith
405cc4c1da9SBarry Smith /*@
406811af0c4SBarry Smith PetscDrawRestoreSingleton - Remove access to a `PetscDraw` object obtained with `PetscDrawGetSingleton()`
4075c6c1daeSBarry Smith by the one process.
4085c6c1daeSBarry Smith
409c3339decSBarry Smith Collective
4105c6c1daeSBarry Smith
4115c6c1daeSBarry Smith Input Parameters:
4125c6c1daeSBarry Smith + draw - the original window
4135c6c1daeSBarry Smith - sdraw - the singleton window
4145c6c1daeSBarry Smith
4155c6c1daeSBarry Smith Level: advanced
4165c6c1daeSBarry Smith
417811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawGetSingleton()`, `PetscViewerGetSingleton()`, `PetscViewerRestoreSingleton()`
4185c6c1daeSBarry Smith @*/
PetscDrawRestoreSingleton(PetscDraw draw,PetscDraw * sdraw)419d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawRestoreSingleton(PetscDraw draw, PetscDraw *sdraw)
420d71ae5a4SJacob Faibussowitsch {
4215c6c1daeSBarry Smith PetscMPIInt size;
4225c6c1daeSBarry Smith
4235c6c1daeSBarry Smith PetscFunctionBegin;
4245c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
4254f572ea9SToby Isaac PetscAssertPointer(sdraw, 2);
4265c6c1daeSBarry Smith PetscValidHeaderSpecific(*sdraw, PETSC_DRAW_CLASSID, 2);
4275c6c1daeSBarry Smith
4289566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)draw), &size));
429387ef4f7SLisandro Dalcin if (size == 1) {
430*966bd95aSPierre Jolivet PetscCheck(draw == *sdraw, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Cannot restore singleton, it is not the parent draw");
4319566063dSJacob Faibussowitsch PetscCall(PetscObjectDereference((PetscObject)draw));
432387ef4f7SLisandro Dalcin *sdraw = NULL;
433dbbe0bcdSBarry Smith } else PetscUseTypeMethod(draw, restoresingleton, sdraw);
4343ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
4355c6c1daeSBarry Smith }
436bb09dc67SDuncan Campbell
437cc4c1da9SBarry Smith /*@
438bb09dc67SDuncan Campbell PetscDrawSetVisible - Sets if the drawing surface (the 'window') is visible on its display.
439bb09dc67SDuncan Campbell
440bb09dc67SDuncan Campbell Input Parameters:
441bb09dc67SDuncan Campbell + draw - the drawing window
442bb09dc67SDuncan Campbell - visible - if the surface should be visible
443bb09dc67SDuncan Campbell
44453c0d4aeSBarry Smith Level: intermediate
44553c0d4aeSBarry Smith
446bb09dc67SDuncan Campbell .seealso: `PetscDraw`
447bb09dc67SDuncan Campbell @*/
PetscDrawSetVisible(PetscDraw draw,PetscBool visible)448bb09dc67SDuncan Campbell PetscErrorCode PetscDrawSetVisible(PetscDraw draw, PetscBool visible)
449bb09dc67SDuncan Campbell {
450bb09dc67SDuncan Campbell PetscFunctionBegin;
451bb09dc67SDuncan Campbell PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
452bb09dc67SDuncan Campbell PetscTryTypeMethod(draw, setvisible, visible);
453bb09dc67SDuncan Campbell PetscFunctionReturn(PETSC_SUCCESS);
454bb09dc67SDuncan Campbell }
455