Revision: 75311
http://sourceforge.net/p/brlcad/code/75311
Author: starseeker
Date: 2020-04-08 22:07:29 +0000 (Wed, 08 Apr 2020)
Log Message:
-----------
Do some of the translation for the other dm backends
Modified Paths:
--------------
brlcad/trunk/src/libdm/dm-X.c
brlcad/trunk/src/libdm/dm-ogl.c
brlcad/trunk/src/libdm/dm-osgl.cpp
brlcad/trunk/src/libdm/dm-qt.cpp
brlcad/trunk/src/libdm/dm-wgl.c
Modified: brlcad/trunk/src/libdm/dm-X.c
===================================================================
--- brlcad/trunk/src/libdm/dm-X.c 2020-04-08 21:36:44 UTC (rev 75310)
+++ brlcad/trunk/src/libdm/dm-X.c 2020-04-08 22:07:29 UTC (rev 75311)
@@ -448,6 +448,9 @@
#ifdef HAVE_TK
if ((tkwin = (*context->dm_window_main)(dmp)) == NULL) {
+ bu_free((void *)privars, "privars");
+ bu_free((void *)pubvars, "pubvars");
+ bu_free((void *)dmp, "dmp");
return DM_NULL;
}
#endif
Modified: brlcad/trunk/src/libdm/dm-ogl.c
===================================================================
--- brlcad/trunk/src/libdm/dm-ogl.c 2020-04-08 21:36:44 UTC (rev 75310)
+++ brlcad/trunk/src/libdm/dm-ogl.c 2020-04-08 22:07:29 UTC (rev 75311)
@@ -673,6 +673,9 @@
bu_vls_init(&(dmp->dm_log));
if ((tkwin = (*context->dm_window_main)(dmp)) == NULL) {
+ bu_free((void *)privvars, "privvars");
+ bu_free((void *)pubvars, "pubvars");
+ bu_free((void *)dmp, "dmp");
return DM_NULL;
}
Modified: brlcad/trunk/src/libdm/dm-osgl.cpp
===================================================================
--- brlcad/trunk/src/libdm/dm-osgl.cpp 2020-04-08 21:36:44 UTC (rev 75310)
+++ brlcad/trunk/src/libdm/dm-osgl.cpp 2020-04-08 22:07:29 UTC (rev 75311)
@@ -82,7 +82,7 @@
extern "C" {
struct dm_internal *osgl_open(Tcl_Interp *interp, int argc, char **argv);
}
-HIDDEN int osgl_close(struct dm_internal *dmp);
+HIDDEN int osgl_close(struct dm_internal *dmp, struct dm_context *context);
HIDDEN int osgl_drawBegin(struct dm_internal *dmp);
HIDDEN int osgl_drawEnd(struct dm_internal *dmp);
HIDDEN int osgl_normal(struct dm_internal *dmp);
@@ -355,7 +355,7 @@
* Gracefully release the display.
*/
HIDDEN int
-osgl_close(struct dm_internal *dmp)
+osgl_close(struct dm_internal *dmp, struct dm_context *UNUSED(context))
{
((struct osgl_vars
*)dmp->dm_vars.priv_vars)->graphicsContext->makeCurrent();
((struct osgl_vars
*)dmp->dm_vars.priv_vars)->graphicsContext->releaseContext();
@@ -382,7 +382,7 @@
*
*/
extern "C" struct dm_internal *
-osgl_open(Tcl_Interp *interp, int argc, char **argv)
+osgl_open(Tcl_Interp *interp, struct dm_context *context, int argc, char
**argv)
{
static int count = 0;
GLfloat backgnd[4];
@@ -395,10 +395,6 @@
struct dm_xvars *pubvars = NULL;
struct osgl_vars *privvars = NULL;
- if ((tkwin = Tk_MainWindow(interp)) == NULL) {
- return DM_NULL;
- }
-
BU_GET(dmp, struct dm_internal);
*dmp = dm_osgl; /* struct copy */
@@ -424,6 +420,13 @@
}
privvars = (struct osgl_vars *)dmp->dm_vars.priv_vars;
+ if ((tkwin = (*context->dm_window_main)(dmp)) == NULL) {
+ bu_free((void *)privars, "privars");
+ bu_free((void *)pubvars, "pubvars");
+ bu_free((void *)dmp, "dmp");
+ return DM_NULL;
+ }
+
dmp->dm_get_internal(dmp);
mvars = (struct modifiable_osgl_vars *)dmp->m_vars;
@@ -471,11 +474,8 @@
if (dmp->dm_top) {
/* Make xtkwin a toplevel window */
- pubvars->xtkwin =
- Tk_CreateWindowFromPath(interp,
- tkwin,
- bu_vls_addr(&dmp->dm_pathName),
- bu_vls_addr(&dmp->dm_dName));
+ pubvars->xtkwin =
(Tk_Window)(*context->dm_window_create_from_path)(dmp, tkwin,
+ bu_vls_cstr(&dmp->dm_pathName), bu_vls_cstr(&dmp->dm_dName));
pubvars->top = pubvars->xtkwin;
} else {
char *cp;
@@ -488,21 +488,18 @@
bu_vls_strncpy(&top_vls, (const char
*)bu_vls_addr(&dmp->dm_pathName), cp - bu_vls_addr(&dmp->dm_pathName));
- pubvars->top =
- Tk_NameToWindow(interp, bu_vls_addr(&top_vls), tkwin);
+ pubvars->top = (Tk_Window)(*context->dm_window_from_name)(dmp,
bu_vls_cstr(&top_vls), tkwin);
bu_vls_free(&top_vls);
}
/* Make xtkwin an embedded window */
- pubvars->xtkwin =
- Tk_CreateWindow(interp, pubvars->top,
- cp + 1, (char *)NULL);
+ pubvars->xtkwin =
(Tk_Window)((*context->dm_window_create_embedded)(dmp, pubvars->top, cp + 1));
}
if (pubvars->xtkwin == NULL) {
bu_log("dm-osgl: Failed to open %s\n", bu_vls_addr(&dmp->dm_pathName));
bu_vls_free(&init_proc_vls);
- (void)osgl_close(dmp);
+ (void)osgl_close(dmp, context);
return DM_NULL;
}
@@ -519,7 +516,7 @@
if (Tcl_Eval(interp, bu_vls_addr(&str)) == TCL_ERROR) {
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- (void)osgl_close(dmp);
+ (void)osgl_close(dmp, context);
return DM_NULL;
} else {
Tcl_Obj *tclresult = Tcl_GetObjResult(interp);
@@ -532,7 +529,7 @@
if (Tcl_Eval(interp, bu_vls_addr(&str)) == TCL_ERROR) {
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- (void)osgl_close(dmp);
+ (void)osgl_close(dmp, context);
return DM_NULL;
} else {
Tcl_Obj *tclresult = Tcl_GetObjResult(interp);
@@ -550,18 +547,13 @@
}
}
- bu_vls_printf(&dmp->dm_tkName, "%s",
- (char *)Tk_Name(pubvars->xtkwin));
+ const char *winname = (*context->dm_window_name)(dmp, pubvars->xtkwin);
+ bu_vls_printf(&dmp->dm_tkName, "%s", winname);
- /* Important - note that this is a bu_vls_sprintf, to clear the string */
- bu_vls_sprintf(&str, "_init_dm %s %s\n",
- bu_vls_addr(&init_proc_vls),
- bu_vls_addr(&dmp->dm_pathName));
-
- if (Tcl_Eval(interp, bu_vls_addr(&str)) == TCL_ERROR) {
+ if ((*context->dm_init)(dmp, bu_vls_cstr(&init_proc_vls)) == BRLCAD_ERROR)
{
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- (void)osgl_close(dmp);
+ (void)osgl_close(dmp, context);
return DM_NULL;
}
@@ -568,29 +560,26 @@
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- pubvars->dpy =
- Tk_Display(pubvars->top);
+ pubvars->dpy = (Display *)(*context->dm_display)(dmp, pubvars->top);
/* make sure there really is a display before proceeding. */
if (!(pubvars->dpy)) {
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- (void)osgl_close(dmp);
+ (void)osgl_close(dmp, context);
return DM_NULL;
}
- Tk_GeometryRequest(pubvars->xtkwin,
- dmp->dm_width,
- dmp->dm_height);
+ (*context->dm_window_geom)(dmp, pubvars->xtkwin, &dmp->dm_width,
&dmp->dm_height);
pubvars->depth = mvars->depth;
- Tk_MakeWindowExist(pubvars->xtkwin);
+ (*context->dm_window_make_exist)(dmp, pubvars->xtkwin);
- pubvars->win = Tk_WindowId(pubvars->xtkwin);
+ pubvars->win = (*context->dm_window_id)(dmp, pubvars->xtkwin);
dmp->dm_id = pubvars->win;
- Tk_MapWindow(pubvars->xtkwin);
+ (*context->dm_window_map)(dmp, pubvars->xtkwin);
// Init the Windata Variable that holds the handle for the Window to
display OSG in.
// Check the QOSGWidget.cpp example for more logic relevant to this. Need
to find
@@ -637,7 +626,7 @@
if (privvars->fs == NULL) {
bu_log("dm-osgl: Failed to create font stash");
bu_vls_free(&init_proc_vls);
- (void)osgl_close(dmp);
+ (void)osgl_close(dmp, context);
return DM_NULL;
}
privvars->fontNormal = FONS_INVALID;
Modified: brlcad/trunk/src/libdm/dm-qt.cpp
===================================================================
--- brlcad/trunk/src/libdm/dm-qt.cpp 2020-04-08 21:36:44 UTC (rev 75310)
+++ brlcad/trunk/src/libdm/dm-qt.cpp 2020-04-08 22:07:29 UTC (rev 75311)
@@ -61,7 +61,7 @@
* Release the display manager
*/
HIDDEN int
-qt_close(dm *dmp)
+qt_close(dm *dmp, struct dm_context *context)
{
struct dm_xvars *pubvars = (struct dm_xvars *)dmp->dm_vars.pub_vars;
struct qt_vars *privars = (struct qt_vars *)dmp->dm_vars.priv_vars;
@@ -77,7 +77,7 @@
delete privars->parent;
privars->qapp->quit();
- Tk_DestroyWindow(pubvars->xtkwin);
+ (*context->dm_window_destroy)(dmp, pubvars->xtkwin);
bu_vls_free(&dmp->dm_pathName);
bu_vls_free(&dmp->dm_tkName);
@@ -572,14 +572,16 @@
HIDDEN int
-qt_configureWin(dm *dmp, int force)
+qt_configureWin(dm *dmp, struct dm_context *context, int force)
{
struct dm_xvars *pubvars = (struct dm_xvars *)dmp->dm_vars.pub_vars;
struct qt_vars *privars = (struct qt_vars *)dmp->dm_vars.priv_vars;
- int width = Tk_Width(pubvars->xtkwin);
- int height = Tk_Height(pubvars->xtkwin);
+ int width = 0;
+ int height = 0;
+ (*context->dm_window_geom)(dmp, pubvars->xtkwin, &dmp->dm_width,
&dmp->dm_height);
+
if (!force &&
dmp->dm_height == height &&
dmp->dm_width == width)
@@ -774,7 +776,7 @@
*
*/
dm *
-qt_open(Tcl_Interp *interp, int argc, char **argv)
+qt_open(Tcl_Interp *interp, struct dm_context *context, int argc, char **argv)
{
static int count = 0;
int make_square = -1;
@@ -790,10 +792,6 @@
return DM_NULL;
}
- if ((tkwin = Tk_MainWindow(interp)) == NULL) {
- return DM_NULL;
- }
-
BU_ALLOC(dmp, struct dm_internal);
*dmp = dm_qt; /* struct copy */
@@ -805,6 +803,13 @@
BU_ALLOC(dmp->dm_vars.priv_vars, struct qt_vars);
privars = (struct qt_vars *)dmp->dm_vars.priv_vars;
+ if ((tkwin = (Tk_Window)(*context->dm_window_main)(dmp)) == NULL) {
+ bu_free((void *)privars, "privars");
+ bu_free((void *)pubvars, "pubvars");
+ bu_free((void *)dmp, "dmp");
+ return DM_NULL;
+ }
+
bu_vls_init(&dmp->dm_pathName);
bu_vls_init(&dmp->dm_tkName);
bu_vls_init(&dmp->dm_dName);
@@ -837,9 +842,8 @@
if (dmp->dm_top) {
/* Make xtkwin a toplevel window */
- pubvars->xtkwin = Tk_CreateWindowFromPath(interp, tkwin,
-
bu_vls_addr(&dmp->dm_pathName),
- bu_vls_addr(&dmp->dm_dName));
+ pubvars->xtkwin =
(Tk_Window)(*context->dm_window_create_from_path)(dmp, tkwin,
+ bu_vls_cstr(&dmp->dm_pathName), bu_vls_cstr(&dmp->dm_dName));
pubvars->top = pubvars->xtkwin;
} else {
char *cp;
@@ -852,31 +856,27 @@
bu_vls_strncpy(&top_vls, (const char
*)bu_vls_addr(&dmp->dm_pathName), cp - bu_vls_addr(&dmp->dm_pathName));
- pubvars->top = Tk_NameToWindow(interp, bu_vls_addr(&top_vls),
tkwin);
+ pubvars->top = (Tk_Window)(*context->dm_window_from_name)(dmp,
bu_vls_cstr(&top_vls), tkwin);
bu_vls_free(&top_vls);
}
/* Make xtkwin an embedded window */
- pubvars->xtkwin =
- Tk_CreateWindow(interp, pubvars->top,
- cp + 1, (char *)NULL);
+ pubvars->xtkwin = (Tk_Window)(*context->dm_window_create_embedded)(dmp,
pubvars->top, cp + 1);
}
if (pubvars->xtkwin == NULL) {
bu_log("qt_open: Failed to open %s\n", bu_vls_addr(&dmp->dm_pathName));
- (void)qt_close(dmp);
+ (void)qt_close(dmp, context);
return DM_NULL;
}
- bu_vls_printf(&dmp->dm_tkName, "%s", (char *)Tk_Name(pubvars->xtkwin));
+ const char *winname = (*context->dm_window_name)(dmp, pubvars->xtkwin);
+ bu_vls_printf(&dmp->dm_tkName, "%s", winname);
- bu_vls_printf(&str, "_init_dm %s %s\n", bu_vls_addr(&init_proc_vls),
bu_vls_addr(&dmp->dm_pathName));
-
- if (Tcl_Eval(interp, bu_vls_addr(&str)) == TCL_ERROR) {
- bu_log("qt_open: _init_dm failed\n");
+ if ((*context->dm_init)(dmp, bu_vls_cstr(&init_proc_vls)) == BRLCAD_ERROR)
{
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- (void)qt_close(dmp);
+ (void)qt_close(dmp, context);
return DM_NULL;
}
@@ -883,12 +883,12 @@
bu_vls_free(&init_proc_vls);
bu_vls_free(&str);
- pubvars->dpy = Tk_Display(pubvars->top);
+ pubvars->dpy = (Display *)(*context->dm_display)(dmp, pubvars->top);
/* make sure there really is a display before proceeding. */
if (!pubvars->dpy) {
bu_log("qt_open: Unable to attach to display (%s)\n",
bu_vls_addr(&dmp->dm_pathName));
- (void)qt_close(dmp);
+ (void)qt_close(dmp, context);
return DM_NULL;
}
@@ -913,14 +913,16 @@
dmp->dm_height = dmp->dm_width;
}
- Tk_GeometryRequest(pubvars->xtkwin, dmp->dm_width, dmp->dm_height);
+ (*context->dm_window_geom)(dmp, pubvars->xtkwin, &dmp->dm_width,
&dmp->dm_height);
- Tk_MakeWindowExist(pubvars->xtkwin);
- pubvars->win = Tk_WindowId(pubvars->xtkwin);
+ (*context->dm_window_make_exist)(dmp, pubvars->xtkwin);
+
+ pubvars->win = (*context->dm_window_id)(dmp, pubvars->xtkwin);
dmp->dm_id = pubvars->win;
- Tk_SetWindowBackground(pubvars->xtkwin, 0);
- Tk_MapWindow(pubvars->xtkwin);
+ //(*context->dm_window_set_bg)(dmp, pubvars->xtkwin, privars->bg);
+ (*context->dm_window_map)(dmp, pubvars->xtkwin);
+
privars->qapp = new QApplication(argc, argv);
privars->parent = QWindow::fromWinId(pubvars->win);
@@ -937,7 +939,7 @@
qt_setFGColor(dmp, 1, 0, 0, 0, 0);
qt_setBGColor(dmp, 0, 0, 0);
- qt_configureWin(dmp, 1);
+ qt_configureWin(dmp, context, 1);
MAT_IDN(privars->mod_mat);
MAT_IDN(privars->disp_mat);
Modified: brlcad/trunk/src/libdm/dm-wgl.c
===================================================================
--- brlcad/trunk/src/libdm/dm-wgl.c 2020-04-08 21:36:44 UTC (rev 75310)
+++ brlcad/trunk/src/libdm/dm-wgl.c 2020-04-08 22:07:29 UTC (rev 75311)
@@ -241,6 +241,9 @@
dmp->dm_vp = &default_viewscale;
if ((tkwin = (*context->dm_window_main)(dmp)) == NULL) {
+ bu_free((void *)privvars, "privvars");
+ bu_free((void *)pubvars, "pubvars");
+ bu_free((void *)dmp, "dmp");
return DM_NULL;
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits