Add Tree and Update for gtk119

This commit is contained in:
daleclack 2021-12-26 13:31:00 +08:00
parent 0b48e73017
commit ce64902cc8
3 changed files with 111 additions and 0 deletions

View File

@ -30,4 +30,7 @@ bool MyImage::on_draw(const Cairo::RefPtr<Cairo::Context> &cr){
void MyImage::set_pixbuf(const Glib::RefPtr<Gdk::Pixbuf> &pixbuf)
{
image = pixbuf;
//ReDraw the draw area
queue_draw();
}

View File

@ -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();
}

94
c/Christmas_tree.c Normal file
View File

@ -0,0 +1,94 @@
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
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;
}