Ananth S 1 일 전
committed by GitHub
부모
커밋
864dff18ce
No known key found for this signature in database GPG 키 ID: B5690EEEBB952194
2개의 변경된 파일219개의 추가작업 그리고 0개의 파일을 삭제
  1. +219
    -0
      examples/core/core_clipboard_text.c
  2. BIN
      examples/core/core_clipboard_text.png

+ 219
- 0
examples/core/core_clipboard_text.c 파일 보기

@ -0,0 +1,219 @@
/*******************************************************************************************
*
* raylib [core] example - Clipboard Text Operations
*
* Example originally created with raylib 5.0, last time updated with raylib 5.0
*
* Example contributed by [Your Name] and reviewed by the raylib community
*
* 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) 2024 [ANANTH S] (@Ananth1836)
*
********************************************************************************************/
#include "raylib.h"
#include <cstddef>
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main(void)
{
// Initialization
//--------------------------------------------------------------------------------------
const int screenWidth = 800;
const int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "raylib [core] example - clipboard text");
// Define some sample texts
const char *sampleTexts[] = {
"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!"
};
const int sampleTextsCount = sizeof(sampleTexts) / sizeof(sampleTexts[0]);
int currentTextIndex = 0;
char inputBuffer[256] = "Type here to copy to clipboard...";
bool textEdited = false;
// UI state
Rectangle copyButton = { 50, 350, 150, 40 };
Rectangle pasteButton = { 220, 350, 150, 40 };
Rectangle clearButton = { 390, 350, 150, 40 };
Rectangle cycleButton = { 560, 350, 150, 40 };
Rectangle textBox = { 50, 250, 700, 40 };
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
Vector2 mousePoint = GetMousePosition();
// Handle text input
if (CheckCollisionPointRec(mousePoint, textBox) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
if (TextIsEqual(inputBuffer, "Type here to copy to clipboard..."))
{
inputBuffer[0] = '\0'; // Clear the default text
}
}
// Get key presses and update input buffer
if (textEdited) textEdited = false;
int key = GetCharPressed();
while (key > 0)
{
if ((key >= 32) && (key <= 125))
{
int length = TextLength(inputBuffer);
if (length < 255)
{
inputBuffer[length] = (char)key;
inputBuffer[length + 1] = '\0';
textEdited = true;
}
}
key = GetCharPressed();
}
// Handle backspace
if (IsKeyPressed(KEY_BACKSPACE))
{
int length = TextLength(inputBuffer);
if (length > 0)
{
inputBuffer[length - 1] = '\0';
textEdited = true;
}
}
// Handle button interactions
if (CheckCollisionPointRec(mousePoint, copyButton))
{
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
// Copy text to clipboard
SetClipboardText(inputBuffer);
}
}
if (CheckCollisionPointRec(mousePoint, pasteButton))
{
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
// Paste text from clipboard
const char *clipboardText = GetClipboardText();
if (clipboardText != NULL)
{
TextCopy(inputBuffer, clipboardText);
}
}
}
if (CheckCollisionPointRec(mousePoint, clearButton))
{
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
// Clear input buffer
inputBuffer[0] = '\0';
}
}
if (CheckCollisionPointRec(mousePoint, cycleButton))
{
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{
// Cycle through sample texts
currentTextIndex = (currentTextIndex + 1) % sampleTextsCount;
TextCopy(inputBuffer, sampleTexts[currentTextIndex]);
}
}
// Quick copy/paste with keyboard shortcuts
if (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL))
{
if (IsKeyPressed(KEY_C))
{
SetClipboardText(inputBuffer);
}
if (IsKeyPressed(KEY_V))
{
const char *clipboardText = GetClipboardText();
if (clipboardText != NULL)
{
TextCopy(inputBuffer, clipboardText);
}
}
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
DrawText("Clipboard Text Operations", 20, 20, 32, DARKBLUE);
// Draw instructions
DrawText("Use the buttons below or keyboard shortcuts:", 20, 70, 20, DARKGRAY);
DrawText("CTRL+C to copy, CTRL+V to paste", 20, 100, 20, DARKGRAY);
// Draw text box
DrawRectangleRec(textBox, LIGHTGRAY);
DrawRectangleLines((int)textBox.x, (int)textBox.y, (int)textBox.width, (int)textBox.height, DARKGRAY);
DrawText(inputBuffer, (int)textBox.x + 5, (int)textBox.y + 10, 20, MAROON);
// Draw cursor in text box
if (((int)(GetTime() * 2) % 2) == 0 && textEdited)
{
DrawText("_", (int)textBox.x + 5 + MeasureText(inputBuffer, 20), (int)textBox.y + 10, 20, MAROON);
}
// Draw buttons
DrawRectangleRec(copyButton, CheckCollisionPointRec(mousePoint, copyButton) ? SKYBLUE : BLUE);
DrawRectangleLines((int)copyButton.x, (int)copyButton.y, (int)copyButton.width, (int)copyButton.height, DARKBLUE);
DrawText("Copy", (int)copyButton.x + 45, (int)copyButton.y + 10, 20, WHITE);
DrawRectangleRec(pasteButton, CheckCollisionPointRec(mousePoint, pasteButton) ? SKYBLUE : BLUE);
DrawRectangleLines((int)pasteButton.x, (int)pasteButton.y, (int)pasteButton.width, (int)pasteButton.height, DARKBLUE);
DrawText("Paste", (int)pasteButton.x + 40, (int)pasteButton.y + 10, 20, WHITE);
DrawRectangleRec(clearButton, CheckCollisionPointRec(mousePoint, clearButton) ? SKYBLUE : BLUE);
DrawRectangleLines((int)clearButton.x, (int)clearButton.y, (int)clearButton.width, (int)clearButton.height, DARKBLUE);
DrawText("Clear", (int)clearButton.x + 40, (int)clearButton.y + 10, 20, WHITE);
DrawRectangleRec(cycleButton, CheckCollisionPointRec(mousePoint, cycleButton) ? SKYBLUE : BLUE);
DrawRectangleLines((int)cycleButton.x, (int)cycleButton.y, (int)cycleButton.width, (int)cycleButton.height, DARKBLUE);
DrawText("Sample Text", (int)cycleButton.x + 15, (int)cycleButton.y + 10, 20, WHITE);
// Draw clipboard status
DrawText("Try copying text from other applications and pasting here!", 50, 420, 18, DARKGREEN);
// Draw current sample text info
DrawText(TextFormat("Sample Text %d/%d", currentTextIndex + 1, sampleTextsCount),
600, 300, 18, DARKGRAY);
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}

BIN
examples/core/core_clipboard_text.png 파일 보기

Before After
Width: 796  |  Height: 444  |  Size: 110 KiB

불러오는 중...
취소
저장