|
View:
New views
3 Messages
—
Rating Filter:
Alert me
|
|
|
problem with back-buffered widgetIn order to learn the fox toolkit I decided to write a sudoku game. It's not complete yet, but so far does what's expected of it except for some confusing problems. When first started up it outputs to the console the following errors: X Error: code 9 major 152 minor 4: BadDrawable (invalid Pixmap or Window parameter). I suspect these have something to do with the font resizing on the server, but I'm not sure what to do about it. When the app is resized, these errors are repeated and the canvas widget goes blank except for the background and the lines drawn to make the board. Doing things like passing another window over it will restore those parts which shouldn't be blank and doing anything which causes a canvas update restores the whole thing. Also, the flush left "renderAll= true;" in the method layoutBuffer was necessary in order to have the canvas update restore everything. I would much prefer to have only the dirty bits repainted as oulined in the FAQ about back-buffered widgets. I have learned much from the docs, FAQs and mailing list archives, but obviously am missing some basic understanding of the repainting process. Whenever I try to include a layout() method as suggested in the FAQ, things go really bad with the canvas always remaining grey and even the menus not getting painted. The full source is attached, but here are the bits which I would expect to be relevant. I am using fox 1.6.35 and gcc 4.4.0 Any help would be appreciated. Mike --- FXMAPFUNC(SEL_PAINT, sudokuWindow::ID_CANVAS, sudokuWindow::onPaint), ---
--- void sudokuWindow::layoutBuffer() ------------------------------------------------------------------------------ Are you an open source citizen? Join us for the Open Source Bridge conference! Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250. Need another reason to go? 24-hour hacker lounge. Register today! http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org _______________________________________________ Foxgui-users mailing list Foxgui-users@... https://lists.sourceforge.net/lists/listinfo/foxgui-users |
|
|
Re: problem with back-buffered widgetHi Mike, Put cout in every other line in the game to show where the problem is. Then redirect cout to a file and turn off buffering of cout. std::ofstream m_file; std::streambuf* m_sbuf; #include <iostream> #include <fstream> cout.setf(ios_base::unitbuf); //unbuffer cout m_file.open ("test.txt"); m_sbuf = cout.rdbuf(); cout.rdbuf(m_file.rdbuf()); cout << "game line 1: This is sent to file" << endl; Jason On Sun, 2009-06-21 at 19:46 -0400, Michael Surette wrote: > In order to learn the fox toolkit I decided to write a sudoku game. > It's not complete yet, but so far does what's expected of it except > for some confusing problems. > > > When first started up it outputs to the console the following errors: > > > X Error: code 9 major 152 minor 4: BadDrawable (invalid Pixmap or > Window parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 23: RenderBadPicture (invalid > Picture parameter). > X Error: code 170 major 152 minor 7: RenderBadPicture (invalid Picture > parameter). > > > > I suspect these have something to do with the font resizing on the > server, but I'm not sure what to do about it. When the app is > resized, these errors are repeated and the canvas widget goes blank > except for the background and the lines drawn to make the board. > Doing things like passing another window over it will restore those > parts which shouldn't be blank and doing anything which causes a > canvas update restores the whole thing. > > > Also, the flush left "renderAll= true;" in the method layoutBuffer was > necessary in order to have the canvas update restore everything. I > would much prefer to have only the dirty bits repainted as oulined in > the FAQ about back-buffered widgets. > > > I have learned much from the docs, FAQs and mailing list archives, but > obviously am missing some basic understanding of the repainting > process. Whenever I try to include a layout() method as suggested in > the FAQ, things go really bad with the canvas always remaining grey > and even the menus not getting painted. > > > The full source is attached, but here are the bits which I would > expect to be relevant. I am using fox 1.6.35 and gcc 4.4.0 Any help > would be appreciated. > > > Mike > > > --- > > > > FXMAPFUNC(SEL_PAINT, sudokuWindow::ID_CANVAS, > sudokuWindow::onPaint), > > > > --- > > > long sudokuWindow::onPaint(FXObject *, FXSelector, void *ptr) > { > FXEvent *ev = (FXEvent *)ptr; > layoutBuffer(); > FXDCWindow dc(canvas,ev); > dc.drawImage(dbuf,0,0); > return 1; > } > > > > --- > > > void sudokuWindow::layoutBuffer() > { > FXDCWindow dc(dbuf); > // builds the game board from the ground up > int w= canvas->getWidth(); > int h= canvas->getHeight(); > int h9= h/9; int w9= w/9; > if (lastw != w || lasth != h || font==NULL) > { > renderAll= true; // resizing means repaint all > dbuf->resize(w,h); > lastw= w; lasth= h; > // simple guess for proper font size that works well > int fs=h9/2; > if (fs != fontSize) > { > fontSize= fs; > if (font!=NULL) > { > font->destroy(); > delete font; > } > font= new FXFont(getApp(),"times",fs); > font->create(); > } > // now for the hint font > fs=h9/5; > if (fs != hfontSize) > { > hfontSize= fs; > if (hfont!=NULL) delete hfont; > hfont= new FXFont(getApp(),"times",fs); > hfont->create(); > } > } > renderAll=true; > if (renderAll) > { > dc.setForeground(bgColor); > dc.fillRectangle(0,0,w,h); > } > for (int i=0; i<81; ++i) > { > if (renderAll || dirty[i] || board[i].error) > { > int x= i%9; int y=i/9; > int w9= dbuf->getWidth()/9; > int h9= dbuf->getHeight()/9; > // correct for extra space in last row/column > int w= x==8? dbuf->getWidth()-8*w9 : w9; > int h= y==8? dbuf->getHeight()-8*h9 : h9; > > // refresh background > if (i==cursor) dc.setForeground(curColor); > else dc.setForeground(bgColor); > dc.fillRectangle(x*w9,y*h9,w,h); > int v= board[i].val; > if (v>0) // square has been solved show number > { > dc.setFont(font); > string text; text.append(1,'0'+v); > int xpos= w9*x+w/2-font->getCharWidth('0'+v)/2; > int ypos= h9*y+h/2+h9/4; > if (board[i].error) dc.setForeground(errorColor); > else dc.setForeground(fgColor); > dc.drawText(xpos,ypos,text.c_str() ); > } > else // square not solved show hints > if (allhints || (curshints && i==cursor) ) > { > dc.setFont(hfont); > dc.setForeground(hintColor); > set<int>::const_iterator it; > for (it=board[i].possible.begin(); it! > =board[i].possible.end(); ++it) > { > int v= *it; > string text; text.append(1,'0'+v); > int fw= hfont->getCharWidth('0'+v)/2; > int xpos= (x*w9)+2*w/10+((v-1)%3)*3*w/10-fw; > int ypos= (y*h9)+3*h/10+((v-1)/3)*3*h/10; > dc.drawText(xpos,ypos,text.c_str() ); > } > } > } > if (board[i].error) dirty[i]= true; > else dirty[i]= false; > } > if (renderAll) > { > dc.setForeground(fgColor); > for (int i=1; i<9; ++i) > { > if ( i%3==0 ) dc.setLineWidth(3); > else dc.setLineWidth(1); > dc.drawLine(i*w9,0,i*w9,h); > dc.drawLine(0,i*h9,w,i*h9); > } > } > renderAll= false; > } > > > > > > ------------------------------------------------------------------------------ > Are you an open source citizen? Join us for the Open Source Bridge conference! > Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250. > Need another reason to go? 24-hour hacker lounge. Register today! > http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org > _______________________________________________ Foxgui-users mailing list Foxgui-users@... https://lists.sourceforge.net/lists/listinfo/foxgui-users ------------------------------------------------------------------------------ Are you an open source citizen? Join us for the Open Source Bridge conference! Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250. Need another reason to go? 24-hour hacker lounge. Register today! http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org _______________________________________________ Foxgui-users mailing list Foxgui-users@... https://lists.sourceforge.net/lists/listinfo/foxgui-users |
|
|
|
| Free embeddable forum powered by Nabble | Forum Help |