From f76e3714364fdd96756cb2fcaee3be5c48f8b35f Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 9 Nov 2025 19:14:46 +0100 Subject: [PATCH] REDESIGNED: `core_clipboard_text`, based on #5248 --- examples/README.md | 2 +- examples/core/core_clipboard_text.c | 214 +++++++++++--------------- examples/core/core_clipboard_text.png | Bin 15878 -> 17783 bytes examples/examples_list.txt | 2 +- 4 files changed, 93 insertions(+), 125 deletions(-) diff --git a/examples/README.md b/examples/README.md index 9a208f599..29cea47fb 100644 --- a/examples/README.md +++ b/examples/README.md @@ -69,7 +69,7 @@ Examples using raylib[core](../src/rcore.c) platform functionality like window c | [core_directory_files](core/core_directory_files.c) | core_directory_files | ⭐☆☆☆ | 5.5 | 5.6 | [Hugo ARNAL](https://github.com/hugoarnal) | | [core_highdpi_testbed](core/core_highdpi_testbed.c) | core_highdpi_testbed | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | | [core_screen_recording](core/core_screen_recording.c) | core_screen_recording | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | -| [core_clipboard_text](core/core_clipboard_text.c) | core_clipboard_text | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Robin](https://github.com/RobinsAviary) | +| [core_clipboard_text](core/core_clipboard_text.c) | core_clipboard_text | ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Ananth S](https://github.com/Ananth1839) | | [core_text_file_loading](core/core_text_file_loading.c) | core_text_file_loading | ⭐☆☆☆ | 5.5 | 5.6 | [Aanjishnu Bhattacharyya](https://github.com/NimComPoo-04) | | [core_compute_hash](core/core_compute_hash.c) | core_compute_hash | ⭐⭐☆☆ | 5.6-dev | 5.6-dev | [Ramon Santamaria](https://github.com/raysan5) | diff --git a/examples/core/core_clipboard_text.c b/examples/core/core_clipboard_text.c index c9d22c54a..895c235da 100644 --- a/examples/core/core_clipboard_text.c +++ b/examples/core/core_clipboard_text.c @@ -2,22 +2,23 @@ * * raylib [core] example - clipboard text * -* Example complexity rating: [★☆☆☆] 1/4 -* * Example originally created with raylib 5.6-dev, last time updated with raylib 5.6-dev * -* Example contributed by Robin (@RobinsAviary) and reviewed by Ramon Santamaria (@raysan5) +* Example contributed by Ananth S (@Ananth1839) and reviewed by Ramon Santamaria (@raysan5) * * Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, * BSD-like license that allows static linking with closed source software * -* Copyright (c) 2025 Robin (@RobinsAviary) +* Copyright (c) 2025 Ananth S (@Ananth1839) * ********************************************************************************************/ #include "raylib.h" -#include +#define RAYGUI_IMPLEMENTATION +#include "raygui.h" + +#define MAX_TEXT_SAMPLES 5 //------------------------------------------------------------------------------------ // Program main entry point @@ -31,30 +32,32 @@ int main(void) InitWindow(screenWidth, screenHeight, "raylib [core] example - clipboard text"); - const char *clipboardText = NULL; + // Define some sample texts + const char *sampleTexts[MAX_TEXT_SAMPLES] = { + "Hello from raylib!", + "The quick brown fox jumps over the lazy dog", + "Clipboard operations are useful!", + "raylib is a simple and easy-to-use library", + "Copy and paste me!" + }; - // List of text the user can switch through and copy - const char *copyableText[] = { "raylib is fun", "hello, clipboard!", "potato chips" }; + char *clipboardText = NULL; + char inputBuffer[256] = "Hello from raylib!"; // Random initial string - unsigned int textIndex = 0; + // UI required variables + bool textBoxEditMode = false; - const char *popupText = NULL; + bool btnCutPressed = false; + bool btnCopyPressed = false; + bool btnPastePressed = false; + bool btnClearPressed = false; + bool btnRandomPressed = false; - // Initialize timers - // The amount of time the pop-up text is on screen, before fading - const float maxTime = 3.0f; - float textTimer = 0.0f; - // The length of time text is offset - const float animMaxTime = 0.1f; - float pasteAnim = 0.0f; - float copyAnim = 0.0f; - int copyAnimMult = 1; - float textAnim = 0.0f; - float textAlpha = 0.0f; - // Offset amount for animations - const int offsetAmount = -4; + // Set UI style + GuiSetStyle(DEFAULT, TEXT_SIZE, 20); + GuiSetIconScale(2); - SetTargetFPS(60); + SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- // Main game loop @@ -62,83 +65,56 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - // Check if the user has pressed the copy/paste key combinations - bool pastePressed = (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_V)); - bool copyPressed = (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_C)); - - // Update animation timers - if (textTimer > 0) textTimer -= GetFrameTime(); - if (pasteAnim > 0) pasteAnim -= GetFrameTime(); - if (copyAnim > 0) copyAnim -= GetFrameTime(); - if (textAnim > 0) textAnim -= GetFrameTime(); - - if (pastePressed) + // Handle button interactions + if (btnCutPressed) { - // Most operating systems hide this information until the user presses Ctrl-V on the window. - - // Check to see if the clipboard contains an image - // This function does nothing outside of Windows, as it directly calls the Windows API - Image image = GetClipboardImage(); - - if (IsImageValid(image)) - { - UnloadImage(image); - popupText = "clipboard contains image"; - } - else - { - clipboardText = GetClipboardText(); - - popupText = "text pasted"; - pasteAnim = animMaxTime; - } - - // Reset animation values - textTimer = maxTime; - textAnim = animMaxTime; - textAlpha = 1; + SetClipboardText(inputBuffer); + clipboardText = GetClipboardText(); + inputBuffer[0] = '\0'; // Quick solution to clear text + //memset(inputBuffer, 0, 256); // Clear full buffer properly } - // React to the user pressing copy - if (copyPressed) + if (btnCopyPressed) { - // Set the text on the user's clipboard - SetClipboardText(copyableText[textIndex]); - - // Reset values - textTimer = maxTime; - textAnim = animMaxTime; - copyAnim = animMaxTime; - copyAnimMult = 1; - textAlpha = 1; - popupText = "text copied"; + SetClipboardText(inputBuffer); // Copy text to clipboard + clipboardText = GetClipboardText(); // Get text from clipboard } - // Switch to the next item in the list when the user presses up - if (IsKeyPressed(KEY_UP)) + if (btnPastePressed) { - // Reset animation - copyAnim = animMaxTime; - copyAnimMult = 1; + // Paste text from clipboard + clipboardText = GetClipboardText(); + if (clipboardText != NULL) TextCopy(inputBuffer, clipboardText); + } - textIndex += 1; + if (btnClearPressed) + { + inputBuffer[0] = '\0'; // Quick solution to clear text + //memset(inputBuffer, 0, 256); // Clear full buffer properly + } - if (textIndex >= sizeof(copyableText) / sizeof(const char*)) // Length of array - { - // Loop back to the other end - textIndex = 0; - } + if (btnRandomPressed) + { + // Get random text from sample list + TextCopy(inputBuffer, sampleTexts[GetRandomValue(0, MAX_TEXT_SAMPLES - 1)]); } - // Switch to the previous item in the list when the user presses down - if (IsKeyPressed(KEY_DOWN)) + // Quick cut/copy/paste with keyboard shortcuts + if (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL)) { - // Reset animation - copyAnim = animMaxTime; - copyAnimMult = -1; + if (IsKeyPressed(KEY_X)) + { + SetClipboardText(inputBuffer); + inputBuffer[0] = '\0'; // Quick solution to clear text + } - if (textIndex == 0) textIndex = (sizeof(copyableText)/sizeof(const char*)) - 1; - else textIndex -= 1; + if (IsKeyPressed(KEY_C)) SetClipboardText(inputBuffer); + + if (IsKeyPressed(KEY_V)) + { + clipboardText = GetClipboardText(); + if (clipboardText != NULL) TextCopy(inputBuffer, clipboardText); + } } //---------------------------------------------------------------------------------- @@ -146,40 +122,32 @@ int main(void) //---------------------------------------------------------------------------------- BeginDrawing(); - ClearBackground(RAYWHITE); - - // Draw the user's pasted text, if there is any yet - if (clipboardText) - { - // Offset animation - int offset = 0; - if (pasteAnim > 0) offset = offsetAmount; - - // Draw the pasted text - DrawText("pasted clipboard:", 10, 10 + offset, 20, DARKGREEN); - DrawText(clipboardText, 10, 30 + offset, 20, DARKGRAY); - } - - // Offset animation - int textOffset = 0; - if (copyAnim > 0) textOffset = offsetAmount; - - // Draw copyable text and controls - DrawText(copyableText[textIndex], 10, 330 + (textOffset * copyAnimMult), 20, MAROON); - DrawText("up/down to change string, ctrl-c to copy, ctrl-v to paste", 10, 355, 20, DARKGRAY); - - // Alpha / Offset animation - if (textAlpha > 0) - { - // Offset animation - int offset = 0; - if (textAnim > 0) offset = offsetAmount; - // Draw pop up text - DrawText(popupText, 10, 425 + offset, 20, ColorAlpha(DARKGREEN, textAlpha)); - - // Fade-out animation - if (textTimer < 0) textAlpha -= GetFrameTime(); - } + ClearBackground(RAYWHITE); + + // Draw instructions + GuiLabel((Rectangle){ 50, 20, 700, 36 }, "Use the BUTTONS or KEY SHORTCUTS:"); + DrawText("[CTRL+X] - CUT | [CTRL+C] COPY | [CTRL+V] | PASTE", 50, 60, 20, MAROON); + + // Draw text box + if (GuiTextBox((Rectangle){ 50, 120, 652, 40 }, inputBuffer, 256, textBoxEditMode)) textBoxEditMode = !textBoxEditMode; + + // Random text button + btnRandomPressed = GuiButton((Rectangle){ 50 + 652 + 8, 120, 40, 40 }, "#77#"); + + // Draw buttons + btnCutPressed = GuiButton((Rectangle){ 50, 180, 158, 40 }, "#17#CUT"); + btnCopyPressed = GuiButton((Rectangle){ 50 + 165, 180, 158, 40 }, "#16#COPY"); + btnPastePressed = GuiButton((Rectangle){ 50 + 165*2, 180, 158, 40 }, "#18#PASTE"); + btnClearPressed = GuiButton((Rectangle){ 50 + 165*3, 180, 158, 40 }, "#143#CLEAR"); + + // Draw clipboard status + GuiSetState(STATE_DISABLED); + GuiLabel((Rectangle){ 50, 260, 700, 40 }, "Clipboard current text data:"); + GuiSetStyle(TEXTBOX, TEXT_READONLY, 1); + GuiTextBox((Rectangle){ 50, 300, 700, 40 }, clipboardText, 256, false); + GuiSetStyle(TEXTBOX, TEXT_READONLY, 0); + GuiLabel((Rectangle){ 50, 360, 700, 40 }, "Try copying text from other applications and pasting here!"); + GuiSetState(STATE_NORMAL); EndDrawing(); //---------------------------------------------------------------------------------- @@ -191,4 +159,4 @@ int main(void) //-------------------------------------------------------------------------------------- return 0; -} \ No newline at end of file +} diff --git a/examples/core/core_clipboard_text.png b/examples/core/core_clipboard_text.png index caa9b314a694bdb9316f9f8d07161887d53887e6..96a7379c7d956fad97ce1a17eeec7df011d5f422 100644 GIT binary patch literal 17783 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 literal 15878 zcmeHOX;c&E8cu*hRDuX7B&-q9%4G=<6~Radn6QI@%SEIpTTB!YNnKb3ia~1-tQHky zYgj}?!2)6w3j{4iu%w`PKvWbd3Ix0oSp@AQ<8qHorakALd+ND&{>%w8Wajyv?|q-| zdo#~_*vo^CosFN3LZPtEPLAFvl)M27g|5da0%tUXN*hrqa*MO0z3<+Dps7jmzyZ!$ zB3_P1ka38@pbLdwde{V^sutt{z5ie>Ln)Y4n!>4NV7L$mBKKISE2s zn$VFf3kKz~s@70EcX5?W415qnxl9Za2yHU(0T4z&2)=(W1cI%6eRtq(RQ>2tHNUPS zw_;p|bkC0buwhDh&)bv**JsX=KQ%CF)?J35%<0M9gel{4#I2Zwi`XS}9+RX%a|oPq z;KX3Kw*h`1!|;m|S{XEmF2|>|xA~Dxl3IuCbC%|QZ+j?(;63znh*`5vq(F1S-n=gQ z#c>|{T5fU&u+*&KYBUH~#o=0_8`avO}An zq>6l~lZ{!<1|4MHwqw;mls^=nfPzkOld@EJ9FC=yVRW8YPj0INb5svInZJ}doJHuk z!z&6*N&jIcP-_P%86mJ_WTOe}QoHi!#Wi6Hv5T_XYmC|-v{5chCxwPH=IfVfII&(j zyFY8-heh3FRcPqWNYXkS$i;3LE^5cc108Q0?k(pR#zhn~3CFcejUXdsE670?3Iv~8IR%1>;)?H>HPwDgF9@;`ZQd zUolaiH{hWEOn-ad<8PNTuc&v&jE)$sxb_SCA>)A#Bmrm_@DbC}bb&g&PoZJ-g?Vgd zaq>Y-Ud`NmzC1bKnQfkTY9afgV!T+gQ6tW z_A56s_}Y+^1CIfelo&TXDYmnys-rd2J=fsR6z?X*(OgrYz~rfd(G&#}O~g(#&V4)d zNF|H0ZkmuJV^IdaG)0Z?CmZmN*~y|6`05ExZNJ)iAqkfH|A&QDvc345*LDQLXR^sc zCIXoV=?d_9?D>&!M8XjX#}B_7AW12q0$~AR;eBC;!~zlvNG$yOuZ2iPAQ^#V1db_1hi>ggubkWmDscZJ82TFZ;KfxrS*7;UI)gmc@@

Tcf=}BV3J))r^4wjd0XKJ%z3Gk!MeR zs8;_t!4En+*pkb(=Js_%lKW>Tnu3@>XjF39_sXX=RK=h zUwD*^XkU0?>0QqveT5aRuVdKg{Ij%5IAz`GqK`#4fzH_ZaL(9`9KVf%P_o3xn&BoL z^C2L(rYtjjKOsfY6-?zD(5dn{O5 z$Ky+XXSR|X`N|8*`Dn(D)r381+WPHB!(3i2scf5nAwt`vXU(=*ZY3l5!HJxJ3EYMn z`?F^X*G&_>o?4YZom(kji5lXV8q1FG_7Q$<0ejWlyCa4x$d8)BMw`s@(;2SL_n)lUcHQ7^ zY!Yo;*j;|2Df$j))0-ug*K+rC1y<)fFq69iU6YeSgIlLPnKe}Ag!A^5?t|POM&@1s zT@Xmw01Ud?T=Ex3{8;)fW_87{?sGl1tJkURLiU(mN@% zjCdz$XV)Fg>nJfS$Tq49$YZZ0+XOAkI7xRvy-VU7Fo7H2i&ORPuv9C__A|7sh}1Ws zwYC(Eb$a-}%1bR%t|Tj0sL+{3bGFhe8pWFBFWiPNeRn@%5nCZGjoeVU$Azx9)bym2 zSSfE@$9N*Aa{^2Dr?nBbt<+DS`=$G@)z9rujZ-=tdJEP4PPVn1Dbczbfi(Lo5~>9V z)nv|ssQBBWqB`&5(;*a{OK=EEeMpMD9a3$7l6ekJ z0!?^Z0L2xoRA}7XWt(B_F!=a)p5dN(pwWIG?7{(>Lml5EkCIlp(S3zY_~UlTuGOF$~p{ppsbk zScRD^piHo;IlnWuEQ4CTB&}>fD`FFL&l1=`Bkcq2lC`;z_Kjg>)^f@}sRk16xc0xM zTwi|1(IW9)>_TEJQQY5Gt9--Avr#u`YRv`PS*MSP%(vd*z1F;0w0`_(=mQy>Fl7Rf zufQVd!gXmmWuxns`6P(8Qmybradjva)5299P@xi>&)M!eoy?*g^xfla8zU6px~ISC z3I0(y1zAEzg7se|T>ZC^5u#pfIM5)Pg*#heFLFZ@Vta4*a&P-{)77BL3;NIFsM)p&ixHjItIWuXAULcT3Apw1^TOgRn^J@s;iyQmx1y&Y7Y9_ zVRXWk6YZ~!F+&pui#$txik!M#?a%LL4&w+bVz#`n;)exS_(JyX0jx_ZP8GQA7Fcnr z38KqH7C86UGLW1Bi=0?EQvbBe@J|}BqUI#by9zWmr^v3P-qo7jFw+qDU#~S$6bs&s VXD-Jt1O447=QSRV7pQ@We*is``VRmA diff --git a/examples/examples_list.txt b/examples/examples_list.txt index e5e82fbd4..7ce5cf2dd 100644 --- a/examples/examples_list.txt +++ b/examples/examples_list.txt @@ -51,7 +51,7 @@ core;core_input_actions;★★☆☆;5.5;5.6;2025;2025;"Jett";@JettMonstersGoBoo core;core_directory_files;★☆☆☆;5.5;5.6;2025;2025;"Hugo ARNAL";@hugoarnal core;core_highdpi_testbed;★☆☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 core;core_screen_recording;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 -core;core_clipboard_text;★☆☆☆;5.6-dev;5.6-dev;2025;2025;"Robin";@RobinsAviary +core;core_clipboard_text;★☆☆☆;5.6-dev;5.6-dev;2025;2025;"Ananth S";@Ananth1839 core;core_text_file_loading;★☆☆☆;5.5;5.6;0;0;"Aanjishnu Bhattacharyya";@NimComPoo-04 core;core_compute_hash;★★☆☆;5.6-dev;5.6-dev;2025;2025;"Ramon Santamaria";@raysan5 shapes;shapes_basic_shapes;★☆☆☆;1.0;4.2;2014;2025;"Ramon Santamaria";@raysan5