📄 forms_compatability.cxx
字号:
//// "$Id: forms_compatability.cxx,v 1.1.1.1 2003/08/07 21:18:41 jasonk Exp $"//// Forms compatibility functions for the Fast Light Tool Kit (FLTK).//// Copyright 1998-1999 by Bill Spitzak and others.//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Library General Public// License as published by the Free Software Foundation; either// version 2 of the License, or (at your option) any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU// Library General Public License for more details.//// You should have received a copy of the GNU Library General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307// USA.//// Please report all bugs and problems to "fltk-bugs@easysw.com".//// Forms library compatability functions.// Many more functions are defined as inlines in forms.h!#include <FL/forms.H>#include <stdlib.h>char fl_flip = 2;void fl_end_form() { while (Fl_Group::current()) Fl_Group::current()->forms_end();}void Fl_Group::forms_end() { // set the dimensions of a group to surround contents if (children() && !w()) { Fl_Widget*const* a = array(); Fl_Widget* o = *a++; int rx = o->x(); int ry = o->y(); int rw = rx+o->w(); int rh = ry+o->h(); for (int i=children_-1; i--;) { o = *a++; if (o->x() < rx) rx = o->x(); if (o->y() < ry) ry = o->y(); if (o->x()+o->w() > rw) rw = o->x()+o->w(); if (o->y()+o->h() > rh) rh = o->y()+o->h(); } x(rx); y(ry); w(rw-rx); h(rh-ry); } // flip all the children's coordinate systems: if (fl_flip) { Fl_Widget* o = (type()>=FL_WINDOW) ? this : window(); int Y = o->h(); Fl_Widget*const* a = array(); for (int i=children(); i--;) { Fl_Widget* o = *a++; int newy = Y-o->y()-o->h(); o->y(newy); } } end();}static int initargc;static char **initargv;void fl_initialize(int *argc, char **argv, const char *, FL_CMD_OPT *, int) { initargc = *argc; initargv = new char*[*argc+1]; int i,j; for (i=0; i<=*argc; i++) initargv[i] = argv[i]; for (i=j=1; i<*argc; ) { if (Fl::arg(*argc,argv,i)); else argv[j++] = argv[i++]; } argv[j] = 0; *argc = j; if (fl_flip==2) fl_flip = 0;}char fl_modal_next; // set by fl_freeze_forms()void fl_show_form(Fl_Window *f,int place,int b,const char *n) { Fl::enable_symbols(); f->label(n); if (!b) f->clear_border(); if (fl_modal_next || b==FL_TRANSIENT) {f->set_modal(); fl_modal_next = 0;} if (place & FL_PLACE_MOUSE) f->hotspot(f); if (place & FL_PLACE_CENTER) f->position((Fl::w()-f->w())/2, (Fl::h()-f->h())/2); if (place & FL_PLACE_FULLSCREEN) f->fullscreen(); if (place & (FL_PLACE_POSITION | FL_PLACE_GEOMETRY)) f->position( (f->x() < 0) ? Fl::w()-f->w()+f->x()-1 : f->x(), (f->y() < 0) ? Fl::h()-f->h()+f->y()-1 : f->y());// if (place & FL_PLACE_ASPECT) {// this is not yet implemented// it can be done by setting size_range(). if (place == FL_PLACE_FREE || place == FL_PLACE_SIZE) f->free_position(); if (place == FL_PLACE_FREE || place & FL_FREE_SIZE) if (!f->resizable()) f->resizable(f); if (initargc) {f->show(initargc,initargv); initargc = 0;} else f->show();}Fl_Widget *fl_do_forms(void) { Fl_Widget *obj; while (!(obj = Fl::readqueue())) if (!Fl::wait()) exit(0); return obj;}Fl_Widget *fl_check_forms() { Fl::check(); return Fl::readqueue();}void fl_set_graphics_mode(int /*r*/,int /*d*/) {}void Fl_FormsText::draw() { draw_box(); align(align()|FL_ALIGN_INSIDE); // questionable method of compatability draw_label();}// Create a forms button by selecting correct fltk subclass:#include <FL/Fl_Return_Button.H>#include <FL/Fl_Repeat_Button.H>Fl_Button *fl_add_button(uchar t,int x,int y,int w,int h,const char *l) { Fl_Button *b; switch (t) { case FL_RETURN_BUTTON: case FL_HIDDEN_RET_BUTTON: b = new Fl_Return_Button(x,y,w,h,l); break; case FL_TOUCH_BUTTON: b = new Fl_Repeat_Button(x,y,w,h,l); break; default: b = new Fl_Button(x,y,w,h,l); } switch (t) { case FL_TOGGLE_BUTTON: case FL_RADIO_BUTTON: b->type(t); break; case FL_HIDDEN_BUTTON: case FL_HIDDEN_RET_BUTTON: b->type(FL_HIDDEN_BUTTON); break; case FL_INOUT_BUTTON: b->when(FL_WHEN_CHANGED); break; } return b;}void fl_show_message(const char *q1,const char *q2,const char *q3) { fl_message("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"");}void fl_show_alert(const char *q1,const char *q2,const char *q3,int) { fl_alert("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"");}int fl_show_question(const char *q1,const char *q2,const char *q3) { return fl_ask("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"");}int fl_show_choice( const char *q1, const char *q2, const char *q3, int, // number of buttons, ignored const char *b0, const char *b1, const char *b2) { return fl_choice("%s\n%s\n%s", q1?q1:"", q2?q2:"", q3?q3:"", b0,b1,b2)+1;}char *fl_show_simple_input(const char *str1, const char *defstr) { const char *r = fl_input(str1, defstr); return (char *)(r ? r : defstr);}//// End of "$Id: forms_compatability.cxx,v 1.1.1.1 2003/08/07 21:18:41 jasonk Exp $".//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -