diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2018-03-22 15:27:02 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2018-03-22 15:27:02 +0000 |
| commit | 0b8116ff72145816c3e1d4909038c126327e7bf2 (patch) | |
| tree | 6559a0aca4e1047fe4906fa474ab463fc3229778 /ide/AndroidStudio3 | |
| parent | 3a20682764807173ec6b0e354ede9b57930ff6a7 (diff) | |
Android: Implemented vector drawing and polygons.
Started to implement arc and pie drawing
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12783 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'ide/AndroidStudio3')
| -rw-r--r-- | ide/AndroidStudio3/app/src/main/cpp/HelloAndroid.cxx | 254 |
1 files changed, 249 insertions, 5 deletions
diff --git a/ide/AndroidStudio3/app/src/main/cpp/HelloAndroid.cxx b/ide/AndroidStudio3/app/src/main/cpp/HelloAndroid.cxx index 882d4189f..d68dcd4e2 100644 --- a/ide/AndroidStudio3/app/src/main/cpp/HelloAndroid.cxx +++ b/ide/AndroidStudio3/app/src/main/cpp/HelloAndroid.cxx @@ -15,11 +15,182 @@ * */ + +#include <stdlib.h> +#include <stdio.h> +#include <FL/Fl.H> +#include <FL/Fl_Double_Window.H> +#include <FL/Fl_Box.H> +#include <FL/fl_draw.H> + +int N = 0; +#define W 200 +#define H 50 +#define ROWS 14 + +// Note: Run the program with command line '-s abc' to view boxtypes +// with scheme 'abc'. + +// class BoxGroup - minimal class to enable visible box size debugging +// +// Set the following static variables to 0 (default) to disable +// or 1 to enable the given feature. +// +// If you enable the 'outline' variable, then a red frame should be drawn +// around each box, and it should ideally be fully visible. +// +// The white background is optional (otherwise you see the window background). +// +// Set BOTH variables = 0 to show the default image for the FLTK manual. +// +// Note: As of FLTK 1.3.3 (probably since FLTK 1.0/1.1) there are some +// shadows 'leaking' outside their widget bounding boxes (x,y,w,h). +// Is this intentional? + +static const int outline = 0; // draw 1-px red frame around all boxes +static const int box_bg = 0; // draw white background inside all boxes +static const int inactive = 0; // deactivate boxes and use green background +class BoxGroup : public Fl_Group { +public: + BoxGroup(int x, int y, int w, int h) : Fl_Group(x,y,w,h) {}; + void draw() { + draw_box(); + if (outline + box_bg) { // outline or box_bg or both + Fl_Widget*const* a = array(); + for (int i=children(); i--;) { + Fl_Widget& o = **a++; + if (outline) { + fl_color(FL_RED); + fl_rect(o.x()-1,o.y()-1,o.w()+2,o.h()+2); + } + if (box_bg) { + fl_color(FL_WHITE); + fl_rectf(o.x(),o.y(),o.w(),o.h()); + } + fl_color(FL_BLACK); + } + } // outline or box_bg or both + Fl_Group::draw_children(); + } // draw() +}; // class BoxGroup + +Fl_Double_Window *window; + +void bt(const char *name, Fl_Boxtype type, int square=0) { + int x = N%4; + int y = N/4; + N++; + x = x*W+10; + y = y*H+10; + Fl_Box *b = new Fl_Box(type,x,y,square ? H-20 : W-20,H-20,name); + b->labelsize(11); + if (inactive) { + b->color(FL_GREEN); + b->deactivate(); + } + if (square) b->align(FL_ALIGN_RIGHT); +} + +int main(int argc, char ** argv) { + window = new Fl_Double_Window(4*W,ROWS*H); + window->box(FL_FLAT_BOX); +#if 0 // this code uses the command line arguments to set arbitrary color schemes + Fl::args(argc, argv); + Fl::get_system_colors(); +#elif 0 // this code uses a single color to define a scheme + Fl::args(argc, argv); + Fl::get_system_colors(); + Fl::background(113,113,198); +#else // this code uses the nice bright blue background to show box vs. frame types + Fl::args(argc, argv); + Fl::get_system_colors(); + window->color(12);// light blue +#endif + + // set window title to show active scheme + Fl::scheme(Fl::scheme()); // init scheme + char title[100]; + sprintf(title,"FLTK boxtypes: scheme = '%s'",Fl::scheme()?Fl::scheme():"none"); + window->label(title); + + // create special container group for box size debugging + BoxGroup *bg = new BoxGroup(0,0,window->w(),window->h()); + bg->box(FL_NO_BOX); + + // create demo boxes + bt("FL_NO_BOX",FL_NO_BOX); + bt("FL_FLAT_BOX",FL_FLAT_BOX); + N += 2; // go to start of next row to line up boxes & frames + bt("FL_UP_BOX",FL_UP_BOX); + bt("FL_DOWN_BOX",FL_DOWN_BOX); + bt("FL_UP_FRAME",FL_UP_FRAME); + bt("FL_DOWN_FRAME",FL_DOWN_FRAME); + bt("FL_THIN_UP_BOX",FL_THIN_UP_BOX); + bt("FL_THIN_DOWN_BOX",FL_THIN_DOWN_BOX); + bt("FL_THIN_UP_FRAME",FL_THIN_UP_FRAME); + bt("FL_THIN_DOWN_FRAME",FL_THIN_DOWN_FRAME); + bt("FL_ENGRAVED_BOX",FL_ENGRAVED_BOX); + bt("FL_EMBOSSED_BOX",FL_EMBOSSED_BOX); + bt("FL_ENGRAVED_FRAME",FL_ENGRAVED_FRAME); + bt("FL_EMBOSSED_FRAME",FL_EMBOSSED_FRAME); + bt("FL_BORDER_BOX",FL_BORDER_BOX); + bt("FL_SHADOW_BOX",FL_SHADOW_BOX); + bt("FL_BORDER_FRAME",FL_BORDER_FRAME); + bt("FL_SHADOW_FRAME",FL_SHADOW_FRAME); + bt("FL_ROUNDED_BOX",FL_ROUNDED_BOX); + bt("FL_RSHADOW_BOX",FL_RSHADOW_BOX); + bt("FL_ROUNDED_FRAME",FL_ROUNDED_FRAME); + bt("FL_RFLAT_BOX",FL_RFLAT_BOX); + bt("FL_OVAL_BOX",FL_OVAL_BOX); + bt("FL_OSHADOW_BOX",FL_OSHADOW_BOX); + bt("FL_OVAL_FRAME",FL_OVAL_FRAME); + bt("FL_OFLAT_BOX",FL_OFLAT_BOX); + bt("FL_ROUND_UP_BOX",FL_ROUND_UP_BOX); + bt("FL_ROUND_DOWN_BOX",FL_ROUND_DOWN_BOX); + bt("FL_DIAMOND_UP_BOX",FL_DIAMOND_UP_BOX); + bt("FL_DIAMOND_DOWN_BOX",FL_DIAMOND_DOWN_BOX); + + bt("FL_PLASTIC_UP_BOX",FL_PLASTIC_UP_BOX); + bt("FL_PLASTIC_DOWN_BOX",FL_PLASTIC_DOWN_BOX); + bt("FL_PLASTIC_UP_FRAME",FL_PLASTIC_UP_FRAME); + bt("FL_PLASTIC_DOWN_FRAME",FL_PLASTIC_DOWN_FRAME); + bt("FL_PLASTIC_THIN_UP_BOX",FL_PLASTIC_THIN_UP_BOX); + bt("FL_PLASTIC_THIN_DOWN_BOX",FL_PLASTIC_THIN_DOWN_BOX); + N += 2; + bt("FL_PLASTIC_ROUND_UP_BOX",FL_PLASTIC_ROUND_UP_BOX); + bt("FL_PLASTIC_ROUND_DOWN_BOX",FL_PLASTIC_ROUND_DOWN_BOX); + N += 2; + + bt("FL_GTK_UP_BOX",FL_GTK_UP_BOX); + bt("FL_GTK_DOWN_BOX",FL_GTK_DOWN_BOX); + bt("FL_GTK_UP_FRAME",FL_GTK_UP_FRAME); + bt("FL_GTK_DOWN_FRAME",FL_GTK_DOWN_FRAME); + bt("FL_GTK_THIN_UP_BOX",FL_GTK_THIN_UP_BOX); + bt("FL_GTK_THIN_DOWN_BOX",FL_GTK_THIN_DOWN_BOX); + bt("FL_GTK_THIN_UP_FRAME",FL_GTK_THIN_UP_FRAME); + bt("FL_GTK_THIN_DOWN_FRAME",FL_GTK_THIN_DOWN_FRAME); + bt("FL_GTK_ROUND_UP_BOX",FL_GTK_ROUND_UP_BOX); + bt("FL_GTK_ROUND_DOWN_BOX",FL_GTK_ROUND_DOWN_BOX); + bg->end(); + window->resizable(window); + window->end(); + window->show(); + return Fl::run(); +} + + + + + + +#if 0 + #include <src/drivers/Android/Fl_Android_Application.H> #include <FL/Fl_Window.H> #include <FL/Fl_Button.H> #include <FL/Enumerations.H> #include <FL/fl_draw.H> +#include <FL/fl_ask.H> Fl_Window *win, *win1, *win2; @@ -31,9 +202,16 @@ class MyButton : public Fl_Button public: MyButton(int x, int y, int w, int h, const char *l) : Fl_Button(x, y, w, h, l) { } void draw() { - //fl_push_clip(x(), y(), w()*2/3, h()*2/3); Fl_Button::draw(); - //fl_pop_clip(); + fl_push_clip(x(), y(), w(), h()); + fl_color(FL_BLUE); + for (int i=0; i<h(); i+=5) { + fl_line(x(), y()+h()/2, x()+w(), y()+i); + } + for (int i=0; i<w(); i+=5) { + fl_line(x()+w()/2, y()-50, x()+i, y()+h()+50); + } + fl_pop_clip(); } }; @@ -53,7 +231,7 @@ void hello_cb(void*) } -int main(int argc, char **argv) +int xmain(int argc, char **argv) { // Fl::scheme("gleam"); win1 = new Fl_Window(20+50, 10, 200, 200, "back"); @@ -88,6 +266,9 @@ int main(int argc, char **argv) btn->labelsize(30); btn->callback( [](Fl_Widget *w, void*) { +// FIXME: we can't seem to re-enter the event loop without locking +// the entire app! +// fl_alert("This will change\nthe font for the entir\napplication"); Fl::set_font(FL_COURIER_BOLD_ITALIC, "$DancingScript-Regular.ttf"); w->redraw(); } @@ -102,9 +283,9 @@ int main(int argc, char **argv) win->show(argc, argv); win2 = new Fl_Window(380-50, 10, 200, 200, "front"); - win2->color(FL_BLUE); + win2->color(FL_LIGHT3); win2->box(FL_UP_BOX); - Fl_Button *b2 = new Fl_Button(10, 10, 180, 180, "front"); + Fl_Button *b2 = new MyButton(10, 10, 180, 180, "front"); b2->color(FL_DARK_BLUE); win2->end(); win2->show(); @@ -114,3 +295,66 @@ int main(int argc, char **argv) return 0; } +#endif + +/* + + Missing: + - screen scale and size: most desktop apps expect to be in a draggable window + on a larger desktop surface. For Android, there is usually no desktop, and + screen resolution is often very high, so that a regular FLTK window would + hide as a tiny gray spot in the top left corner + * windows should probably be centered by default + ? the screen resolution should adapt to the first opened window + ? we should be able to hint at a prefered screen resolution + * drawing call must scale at some point (line width!) + * rotating the screen must call the app handler and(?) window resize + * proportions: pixels should be square + +test/CubeMain.cxx test/line_style.cxx +test/CubeView.cxx test/list_visuals.cxx +test/adjuster.cxx test/mandelbrot.cxx +test/animated.cxx test/menubar.cxx + * test/arc.cxx : + 'arc' works as expected + test/message.cxx +test/ask.cxx test/minimum.cxx +test/bitmap.cxx test/native-filechooser.cxx +test/blocks.cxx test/navigation.cxx + * test/boxtype.cxx : !! testing + test/offscreen.cxx +test/browser.cxx test/output.cxx +test/button.cxx test/overlay.cxx +test/buttons.cxx test/pack.cxx +test/cairo_test.cxx test/pixmap.cxx +test/checkers.cxx test/pixmap_browser.cxx +test/clock.cxx test/resizebox.cxx +test/colbrowser.cxx test/rotated_text.cxx +test/color_chooser.cxx test/scroll.cxx +test/connect.cxx test/shape.cxx +test/cube.cxx test/subwindow.cxx +test/cursor.cxx test/sudoku.cxx +test/curve.cxx test/symbols.cxx +test/demo.cxx test/table.cxx +test/device.cxx test/threads.cxx +test/doublebuffer.cxx test/tile.cxx +test/editor.cxx test/tiled_image.cxx +test/file_chooser.cxx test/twowin.cxx +test/fonts.cxx test/unittest_about.cxx +test/forms.cxx test/unittest_circles.cxx +test/fractals.cxx test/unittest_images.cxx +test/fracviewer.cxx test/unittest_lines.cxx +test/fullscreen.cxx test/unittest_points.cxx +test/gl_overlay.cxx test/unittest_rects.cxx +test/glpuzzle.cxx test/unittest_schemes.cxx +test/hello.cxx : + 'hello' works fine, italics, shadow, etc. + test/unittest_scrollbarsize.cxx +test/help_dialog.cxx test/unittest_simple_terminal.cxx +test/icon.cxx test/unittest_symbol.cxx +test/iconize.cxx test/unittest_text.cxx +test/image.cxx test/unittest_viewport.cxx +test/input.cxx test/unittests.cxx +test/input_choice.cxx test/utf8.cxx +test/keyboard.cxx test/windowfocus.cxx +test/label.cxx + + */
\ No newline at end of file |
