request sample code for jpeg display and aa text

Greetings I am new to motif altho the coming months I will undertake a project to update some old existing code. The newest features of 2.3 are of interest to me because I have multiple jpeg images displayed in my existing code and in the code I am planning on writing. Anti-Aliased text is also of interest for obvious reasons. Where can I locate simple sample code implementing the process of loading, displaying and changing jpeg images in a motif 2.3 applications? Much thanks to you all!


Yuriy Syrota

Yuriy Syrota's picture

request sample code for jpeg display and aa text

motifn00b,

here is a simple example you requested:

#include <Xm/XmAll.h></p>
<p>int<br />
main(int argc, char *argv[]) {<br />
    Widget toplevel, label;<br />
    XtAppContext    app;<br />
    Arg             al[10];<br />
    Cardinal        ac = 0;<br />
    Pixmap          pixmap;</p>
<p>    XtSetLanguageProc(NULL, NULL, NULL);<br />
    toplevel = XtVaAppInitialize(&app, "test", NULL, 0, &argc, argv, NULL,<br />
            NULL);</p>
<p>    pixmap = XmGetPixmap(XtScreen(toplevel), "toucan.jpg",<br />
            XmUNSPECIFIED_PIXEL, XmUNSPECIFIED_PIXEL);<br />
    XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++;<br />
    XtSetArg(al[ac], XmNlabelPixmap, pixmap); ac++;<br />
    label = XmCreateLabel(toplevel, "label", al, ac);<br />
    XtManageChild(label);</p>
<p>    XtRealizeWidget(toplevel);</p>
<p>    XtAppMainLoop(app);<br />
}<br />


squeen

squeen's picture

On CentOS 5, this version

On CentOS 5, this version (sans HTML) worked great.

/* TO BUILD: cc xmjpg.c -o xmjpg -lXm -lXt -lX11*/
#include 
#include 
#include 

int main(int argc, char *argv[])
{
   Widget toplevel, label;
   XtAppContext      app;
   Arg               al[10];
   Cardinal          ac = 0;
   Pixmap            pixmap;
   
   if (argc<2 || strstr(argv[1],".jpg")==NULL) {
      printf("usage: xmjpg image.jpg\n");
      return;
   }
    
   XtSetLanguageProc(NULL, NULL, NULL);
   toplevel = XtVaAppInitialize(&app, "test", NULL, 0, &argc, argv, NULL, NULL);
   pixmap = XmGetPixmap(XtScreen(toplevel), argv[1], XmUNSPECIFIED_PIXEL, XmUNSPECIFIED_PIXEL);
   XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++;
   XtSetArg(al[ac], XmNlabelPixmap, pixmap); ac++;
   label = XmCreateLabel(toplevel, "label", al, ac);
   XtManageChild(label);
   XtRealizeWidget(toplevel);
   XtAppMainLoop(app);
   return;
}

I would upload an image to the forum, but that capability appears to be broken for me.

This is a really nice feature! It would also be great if there was an Xm utility function (or this function was extended) to just as effortlessly include and cache an Xpm image. I have my own functions wrapping XpmCreatePixmapFromData, but it is not nearly as convenient as this. Xpm's are still nice (compared to jpeg's) since they compile right into the executable from source.

Does XmGetPixmap work with PNG's as well? If so, does it handle the alpha compositing?