From ce64902cc8d6cb86d42f7a8faf600641fee62777 Mon Sep 17 00:00:00 2001 From: daleclack Date: Sun, 26 Dec 2021 13:31:00 +0800 Subject: [PATCH] Add Tree and Update for gtk119 --- Gtkmm3/gtk119_imageviewer2/src/MyImage.cc | 3 + Gtkmm3/gtk119_imageviewer2/src/MyWin.cc | 14 ++++ c/Christmas_tree.c | 94 +++++++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 c/Christmas_tree.c diff --git a/Gtkmm3/gtk119_imageviewer2/src/MyImage.cc b/Gtkmm3/gtk119_imageviewer2/src/MyImage.cc index 512160e..30dd1de 100644 --- a/Gtkmm3/gtk119_imageviewer2/src/MyImage.cc +++ b/Gtkmm3/gtk119_imageviewer2/src/MyImage.cc @@ -30,4 +30,7 @@ bool MyImage::on_draw(const Cairo::RefPtr &cr){ void MyImage::set_pixbuf(const Glib::RefPtr &pixbuf) { image = pixbuf; + + //ReDraw the draw area + queue_draw(); } diff --git a/Gtkmm3/gtk119_imageviewer2/src/MyWin.cc b/Gtkmm3/gtk119_imageviewer2/src/MyWin.cc index 33f92d0..354d3a4 100644 --- a/Gtkmm3/gtk119_imageviewer2/src/MyWin.cc +++ b/Gtkmm3/gtk119_imageviewer2/src/MyWin.cc @@ -30,9 +30,23 @@ btnopen("Open Image") } void MyWin::btnopen_clicked(){ + //Create a file open dialog + dialog = Gtk::FileChooserNative::create("Open a image File",*this,Gtk::FILE_CHOOSER_ACTION_OPEN, + "OK","Cancel"); + + dialog->signal_response().connect(sigc::mem_fun(*this,&MyWin::dialog_response)); + dialog->show(); } void MyWin::dialog_response(int response_id){ + if(response_id == Gtk::RESPONSE_ACCEPT){ + //Show the image in a drawing area + auto filename = dialog->get_filename(); + auto pixbuf = Gdk::Pixbuf::create_from_file(filename); + image_area.set_pixbuf(pixbuf); + pixbuf.reset(); + } + dialog.reset(); } diff --git a/c/Christmas_tree.c b/c/Christmas_tree.c new file mode 100644 index 0000000..23eaba7 --- /dev/null +++ b/c/Christmas_tree.c @@ -0,0 +1,94 @@ +#include +#include +#include +#include +#include +#include + +void SetColor(int Mode){ + //Get Color + int color = rand()%16; + if(color == 0 ) color = 0x04; + + //Set Color for Console + HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); + + if(Mode == 0){ + SetConsoleTextAttribute(hCon,FOREGROUND_GREEN); + }else{ + SetConsoleTextAttribute(hCon,color); + } +} + +#define PI 3.14159265359 + +float sx,sy; + +float sdCircle(float px,float py,float r){ + float dx = px - sx, dy = py-sy; + return sqrtf(dx * dx + dy * dy) - r; +} + +float opUnion(float d1,float d2){ + return d1 < d2 ? d1 : d2; +} + +#define T px + scale * r * cosf(theta), py + scale * r * sin(theta) + +float f(float px, float py, float theta, float scale, int n){ + float d = 0.0f; + for(float r = 0.0f; r < 0.8f; r += 0.02f){ + d = opUnion(d,sdCircle(T, 0.05f * scale * (0.95f - r))); + } + + if(n > 0){ + for(int t = -1; t <=1; t+=2){ + float tt = theta + t * 1.8f; + float ss = scale * 0.9f; + for(float r = 0.2f; r < 0.8f; r += 0.1f){ + d = opUnion(d, f(T, tt, ss*0.5f, n-1)); + ss *= 0.8f; + } + } + } +} + +int main(int argc, char * argv[]){ + srand((unsigned)time(NULL)); + int n = argc > 1 ? atoi(argv[1]) : 3; + + int SetCnt = 0; + int CntTotal = 0; + float fReverseCnt = 0; + int ColorIndex = 0; + + for(sy = 0.8f; sy > 0.0f; sy -= 0.02f, putchar('\n') ){ + ColorIndex++; + + SetCnt = 0; + + for(sx = -0.35f; sx < 0.35f; sx += 0.01f){ + if(f(0, 0, PI * 0.5f, 1.0f, n) < 0){ + if(ColorIndex%5 == 0 ){ + SetColor(1); + }else{ + if(SetCnt < 3){ + SetCnt++; + SetColor(1); + + fReverseCnt = sx + 0.01f; + }else if(sx >= fabs(fReverseCnt)){ + SetColor(1); + }else{ + SetColor(0); + } + } + putchar(' '); + }else{ + putchar(' '); + } + } + } + + return 0; +}