Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include<SDL2/SDL.h>
- #include<SDL2/SDL_image.h>
- #include<SDL2/SDL_ttf.h>
- const int SCREEN_WIDTH = 1400;
- const int SCREEN_HEIGHT = 400;
- int Font_WIDTH = 30;
- int day, month, year;
- char date[50];
- class LTexture
- {
- public:
- LTexture();
- ~LTexture();
- bool loadFromFile(std::string path);
- #if defined(_SDL_TTF_H) || defined(SDL_TTF_H)
- bool loadFromRenderedText( std::string textureText, SDL_Color textColor );
- #endif
- void free();
- void setColor(Uint8 red, Uint8 green, Uint8 blue);
- void setBlendMode(SDL_BlendMode blending);
- void setAlpha(Uint8 alpha);
- void render(int x, int y, SDL_Rect* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE );
- int getWidth();
- int getHeight();
- private:
- SDL_Texture* mTexture;
- int mWidth;
- int mHeight;
- };
- LTexture gDotTexture;
- class Dot
- {
- public:
- //The dimensions of the dot
- static const int DOT_WIDTH = 20;
- static const int DOT_HEIGHT = 20;
- //Maximum axis velocity of the dot
- static const int DOT_VEL = 10;
- //Initializes the variables
- Dot();
- //Takes key presses and adjusts the dot's velocity
- void handleEvent( SDL_Event& e );
- //Moves the dot
- void move();
- //Shows the dot on the screen
- void render();
- private:
- //The X and Y offsets of the dot
- int mPosX, mPosY;
- //The velocity of the dot
- int mVelX, mVelY;
- };
- Dot::Dot()
- {
- //Initialize the offsets
- mPosX = 0;
- mPosY = 0;
- //Initialize the velocity
- mVelX = 0;
- mVelY = 0;
- }
- bool init();
- bool loadMedia();
- void close();
- SDL_Window* main_window = NULL;
- SDL_Renderer* main_renderer = NULL;
- TTF_Font* main_font=NULL;
- LTexture mainTextTexture[50];
- LTexture Ltemp;
- LTexture indi;
- LTexture header;
- LTexture::LTexture()
- {
- mTexture = NULL;
- mWidth = 0;
- mHeight = 0;
- }
- LTexture::~LTexture()
- {
- free();
- }
- bool LTexture::loadFromFile(std:: string path)
- {
- free();
- SDL_Texture* newTexture = NULL;
- SDL_Surface* loadedSurface = IMG_Load(path.c_str());
- if(loadedSurface==NULL)
- {
- printf( "Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError() );
- }
- else
- {
- SDL_SetColorKey(loadedSurface, SDL_TRUE, SDL_MapRGB(loadedSurface->format, 0, 0xFF, 0xFF));
- newTexture = SDL_CreateTextureFromSurface(main_renderer, loadedSurface);
- if( newTexture == NULL ) printf( "Unable to create texture from %s! SDL Error: %s\n", path.c_str(), SDL_GetError() );
- else
- {
- mWidth = loadedSurface->w;
- mHeight = loadedSurface->h;
- }
- SDL_FreeSurface(loadedSurface);
- }
- mTexture = newTexture;
- return mTexture !=NULL;
- }
- #if defined(_SDL_TTF_H) || defined(SDL_TTF_H)
- bool LTexture::loadFromRenderedText(std::string textureText, SDL_Color textColor)
- {
- free();
- SDL_Surface* textSurface = TTF_RenderText_Solid(main_font, textureText.c_str(), textColor);
- if( textSurface == NULL ) printf( "Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError() );
- else
- {
- mTexture = SDL_CreateTextureFromSurface(main_renderer, textSurface);
- if(mTexture == NULL) printf( "Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError() );
- else
- {
- mWidth = textSurface->w;
- mHeight = textSurface->h;
- }
- SDL_FreeSurface(textSurface);
- }
- return mTexture!=NULL;
- }
- #endif
- void LTexture::free()
- {
- if(mTexture!=NULL)
- {
- SDL_DestroyTexture(mTexture);
- mTexture = NULL;
- mWidth = 0;
- mHeight = 0;
- }
- }
- void LTexture::setColor(Uint8 red, Uint8 green, Uint8 blue)
- {
- SDL_SetTextureColorMod(mTexture, red, green, blue);
- }
- void LTexture::setBlendMode(SDL_BlendMode blending)
- {
- SDL_SetTextureBlendMode(mTexture, blending);
- }
- void LTexture::setAlpha(Uint8 alpha)
- {
- SDL_SetTextureAlphaMod(mTexture, alpha);
- }
- void LTexture::render(int x, int y, SDL_Rect* clip, double angle, SDL_Point* center, SDL_RendererFlip flip)
- {
- SDL_Rect renderQuad = {x,y,mWidth,mHeight};
- if(clip!=NULL)
- {
- renderQuad.w = clip->w;
- renderQuad.h = clip->h;
- }
- SDL_RenderCopyEx(main_renderer, mTexture, clip, &renderQuad, angle, center, flip);
- }
- int LTexture::getWidth()
- {
- return mWidth;
- }
- int LTexture::getHeight()
- {
- return mHeight;
- }
- bool init()
- {
- bool success = true;
- if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
- {
- printf( "SDL could not initialize! SDL Error: %s\n", SDL_GetError() );
- success = false;
- }
- else
- {
- if(!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY,"1")) printf("Warning: Linear texture filtering not enabled!" );
- main_window = SDL_CreateWindow("PASA",0,0,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN);
- if(main_window==NULL)
- {
- printf( "Window could not be created! SDL Error: %s\n", SDL_GetError() );
- success = false;
- }
- else
- {
- main_renderer = SDL_CreateRenderer(main_window,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
- if( main_renderer == NULL )
- {
- printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError() );
- success = false;
- }
- else
- {
- SDL_SetRenderDrawColor(main_renderer, 0xFF,0xFF,0xFF,0xFF);
- int imgFlags = IMG_INIT_PNG;
- if(!(IMG_Init(imgFlags)&imgFlags))
- {
- printf( "SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() );
- success = false;
- }
- if( TTF_Init() == -1 )
- {
- printf( "SDL_ttf could not initialize! SDL_ttf Error: %s\n", TTF_GetError() );
- success = false;
- }
- }
- }
- }
- return success;
- }
- bool loadMedia()
- {
- bool success = true;
- main_font = TTF_OpenFont("boy.ttf", Font_WIDTH);
- if(main_font==NULL)
- {
- printf( "Failed to load font! SDL_ttf Error: %s\n", TTF_GetError() );
- success = false;
- }
- else
- {
- SDL_Color hColor = {0xD3,0xFF,0xCE};
- if(!header.loadFromRenderedText(date,hColor))
- {
- printf( "Failed to render text texture!\n" );
- success = false;
- }
- }
- //Load dot texture
- if( !gDotTexture.loadFromFile( "indi.png" ) )
- {
- printf( "Failed to load dot texture!\n" );
- success = false;
- }
- return success;
- }
- void close()
- {
- for(int i=0; i<50; i++)
- {
- mainTextTexture[i].free();
- }
- gDotTexture.free();
- header.free();
- TTF_CloseFont(main_font);
- main_font = NULL;
- SDL_DestroyRenderer(main_renderer);
- main_renderer = NULL;
- SDL_DestroyWindow(main_window);
- main_window = NULL;
- TTF_Quit();
- IMG_Quit();
- SDL_Quit();
- }
- int main(int argn, char* args[])
- {
- int i = 0,z=0,p=0,q,count=0,x=0,current_line=0,c=0,total_line=0,flag=0,backspace_check=0,length,side_count=0;
- int left_sign=0,tchar[i]={0},indi_xpos,indi_xpos_width[1000],indi_xpos_highest=0,final_indi_xpos,huda,left_check;
- char s[1001000],v[100][2002],ctemp[1000],char_temp,stemp[1000];
- // printf("ENTER DATE. In format 11 10 2019!\n");
- // scanf("%d %d %d", &day, &month, &year);
- // if(month==1) sprintf(date, "%d th January, %d", day, year);
- // else if(month==2) sprintf(date, "%d th February, %d", day, year);
- // else if(month==3) sprintf(date, "%d th March, %d", day, year);
- // else if(month==4) sprintf(date, "%d th April, %d", day, year);
- // else if(month==5) sprintf(date, "%d th May, %d", day, year);
- // else if(month==6) sprintf(date, "%d th June, %d", day, year);
- // else if(month==7) sprintf(date, "%d th July, %d", day, year);
- // else if(month==8) sprintf(date, "%d th August, %d", day, year);
- // else if(month==9) sprintf(date, "%d th September, %d", day, year);
- // else if(month==10) sprintf(date, "%d th October, %d", day, year);
- // else if(month==11) sprintf(date, "%d th Novermber, %d", day, year);
- sprintf(date, "%d th December, %d", day, year);
- if(!init()) printf("Failed to initialize/n");
- else
- {
- if(!loadMedia()) printf("Failed to load media\n");
- else
- {
- bool quit = false;
- SDL_Event e;
- SDL_Color textColor = {0xFF,0xFF,0xFF};
- std::string inputText[50];
- std::string copyText[50];
- std::string sh;
- //for(int k=0; k<50; k++) inputText[k] = "";
- Dot dot;
- SDL_StartTextInput();
- while(!quit)
- {
- bool renderText = false;
- while(SDL_PollEvent(&e)!=0)
- {
- if(e.type == SDL_QUIT) quit = true;
- else if(e.type == SDL_KEYDOWN)
- {
- huda=1;
- //backspace key
- if( e.key.keysym.sym == SDLK_BACKSPACE )
- {
- i=current_line;
- //backspace main part
- if(inputText[i].length()==0&¤t_line!=0)
- {
- //majher ekta line kaatle
- if(current_line<total_line)
- {
- for(int a=0;a<total_line-current_line;a++)
- {
- sh=inputText[i+a];
- inputText[i+a]=inputText[i+1+a];
- inputText[i+1+a]=sh;
- mainTextTexture[i+a].loadFromRenderedText( inputText[i+a].c_str(), textColor );
- }
- }
- total_line--;
- current_line--;
- i=current_line;
- left_sign=0;
- if(mainTextTexture[i].getWidth()>=SCREEN_WIDTH-100) inputText[i].pop_back();
- renderText = false;
- mainTextTexture[i].loadFromRenderedText( inputText[i].c_str(), textColor );
- }
- //first line zodi delete dite thaki
- else if(inputText[i].length()==0&¤t_line==0)
- {
- if(current_line<total_line)
- {
- for(int a=0;a<total_line;a++)
- {
- sh=inputText[i+a];
- inputText[i+a]=inputText[i+1+a];
- inputText[i+1+a]=sh;
- mainTextTexture[i+a].loadFromRenderedText( inputText[i+a].c_str(), textColor );
- }
- }
- total_line--;
- current_line=0;
- i=current_line;
- left_sign=0;
- left_sign=strlen(inputText[i].c_str());
- }
- else if(inputText[i].length() > 0)
- {
- inputText[i].pop_back();
- renderText = true;
- }
- }
- //Up key
- else if( e.key.keysym.sym == SDLK_UP )
- {
- if(current_line>0)
- {
- left_sign=0;
- if(mainTextTexture[i-1].getWidth()>=SCREEN_WIDTH-100)backspace_check=1;
- current_line--;
- i=current_line;
- renderText=true;
- }
- else
- {
- i=0;
- renderText = true;
- }
- }
- //down key
- else if( e.key.keysym.sym == SDLK_DOWN &&inputText[i].length()>0)
- {
- if(current_line<total_line)
- {
- left_sign=0;
- if(mainTextTexture[i+1].getWidth()>=SCREEN_WIDTH-100)backspace_check=1;
- x--;
- current_line++;
- i=current_line;
- }
- renderText = true;
- }
- //right key
- else if( e.key.keysym.sym == SDLK_RIGHT &&side_count<length)
- {
- if(left_sign>0)left_sign--;
- }
- //left key
- else if( e.key.keysym.sym == SDLK_LEFT )
- {
- //left overflow check
- if(mainTextTexture[i].getWidth()>=SCREEN_WIDTH-100)
- {
- backspace_check=1;
- left_check=1;
- }
- if(indi_xpos>0)
- {
- if(left_sign==0)left_sign+=1;
- else
- left_sign++;
- }
- }
- //enter key
- if( e.key.keysym.sym == SDLK_RETURN)
- {
- current_line++;
- total_line++;
- left_sign=0;
- i=current_line;
- //jani na jhamela badhle dekhbo c++;
- if(inputText[i-1].length()==0)flag=1;
- //mainTextTexture[i].loadFromRenderedText( inputText[i].c_str(), textColor );
- renderText = false;
- }
- //newline
- int width = mainTextTexture[i].getWidth();
- if(width >= SCREEN_WIDTH-100)
- {
- if(backspace_check!=1)
- {
- current_line++;
- i=current_line;
- total_line++;
- }
- else
- backspace_check=0;
- renderText = true;
- }
- //copy something
- else if( e.key.keysym.sym == SDLK_c && SDL_GetModState() & KMOD_CTRL )
- {
- for(int bal=0; bal<=i; bal++)
- {
- strcat(s,inputText[bal].c_str());
- if(bal!=i)strcat(s,"\n");
- }
- SDL_SetClipboardText(s);
- s[0]=0;
- }
- //paste something
- else if( e.key.keysym.sym == SDLK_v && SDL_GetModState() & KMOD_CTRL )
- {
- inputText[i] = inputText[i]+SDL_GetClipboardText();
- // int l=strlen(inputText[i].c_str());
- // if(l*Font_WIDTH>=SCREEN_WIDTH-100)
- // {
- // for(int j=0;j<l;j++)s[j]=SDL_GetClipboardText()[j];
- // for(p=0;p<100;p++)
- // {
- // for(q=0;q<2*(SCREEN_WIDTH-100)/Font_WIDTH;q++)
- // {
- // if(count>=l)
- // {
- // break;
- // x=1;
- // }
- // if(s[count]=='\n')break;
- // else
- // {
- // v[p][q]=s[count];
- // }
- // count++;
- // }
- // if(x==1)
- // {
- // break;
- // }
- // i++;
- // mainTextTexture[i].loadFromRenderedText( v[p], textColor );
- // SDL_SetRenderDrawColor( main_renderer, 0x00, 0x00, 0x00, 0xFF );
- // SDL_RenderClear( main_renderer );
- // header.render( 0,0);
- // for(int j=0; j<=i; j++ ) mainTextTexture[j].render( 0, j*50+ 50 );
- // SDL_RenderPresent( main_renderer );
- // }
- // count=0;
- // renderText = false;
- // }
- // else
- renderText = true;
- z=1;
- }
- }
- else if( e.type == SDL_TEXTINPUT )
- {
- if( !( SDL_GetModState() & KMOD_CTRL && ( e.text.text[ 0 ] == 'c' || e.text.text[ 0 ] == 'C' || e.text.text[ 0 ] == 'v' || e.text.text[ 0 ] == 'V' ) ) )
- {
- inputText[i] += e.text.text;
- renderText = true;
- }
- }
- //indicator
- // printf("%c\n",inputText[i].c_str()[0] );
- length=strlen(inputText[i].c_str());
- indi_xpos=length-left_sign;
- if(indi_xpos<0)indi_xpos=0;
- for(int as=0;as<=length;as++)
- {
- if(as<indi_xpos)ctemp[as]=inputText[i].c_str()[as];
- stemp[as]=inputText[i].c_str()[as];
- }
- stemp[length+1]=0;
- ctemp[indi_xpos]=0;
- if(indi_xpos!=0)
- {
- Ltemp.loadFromRenderedText( ctemp, textColor );
- final_indi_xpos=Ltemp.getWidth();
- }
- else
- final_indi_xpos=0;
- if(huda==1)
- {
- printf("%d %d %d\n",length,indi_xpos,final_indi_xpos );
- huda=0;
- }
- }
- if( renderText )
- {
- if( inputText[i] != "" )
- {
- // //longer than window_width string
- // if(x!=0)
- // {
- // x=0;
- // mainTextTexture[i].loadFromRenderedText( v[p], textColor );
- // }
- //printf("%s\n",stemp);
- for(int zx=length-1;zx>indi_xpos;zx--)
- {
- char_temp=stemp[zx];
- stemp[zx]=stemp[zx-1];
- stemp[zx-1]=char_temp;
- }
- for(int qw=0;qw<=length;qw++)inputText[i].pop_back();
- inputText[i]=stemp;
- mainTextTexture[i].loadFromRenderedText( inputText[i].c_str(), textColor );
- //copy paste
- if(z==1)
- {
- i++;
- current_line++;
- total_line++;
- z=0;
- }
- }
- else
- {
- mainTextTexture[i].loadFromRenderedText( " ", textColor );
- }
- }
- //enter dile space nibe
- if(flag==1)
- {
- flag=0;
- inputText[i-1] +="@";
- mainTextTexture[i-1].loadFromRenderedText( "@", textColor );
- }
- if(indi_xpos>=indi_xpos_highest)
- indi_xpos_width[indi_xpos]=mainTextTexture[i].getWidth();
- // printf("%d\n",mainTextTexture[i].getWidth() );
- SDL_SetRenderDrawColor( main_renderer, 0x00, 0x00, 0x00, 0xFF );
- SDL_RenderClear( main_renderer );
- //for blinking indicaotr
- c++;
- if(c%60>=25)
- gDotTexture.render( final_indi_xpos,current_line*50+50);
- if(c>60)c=0;
- header.render( 0,0);
- for(int j=0; j<=total_line; j++ ) mainTextTexture[j].render( 0, j*50+ 50 );
- SDL_RenderPresent( main_renderer );
- }
- SDL_StopTextInput();
- }
- }
- close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement