디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

귀욤 GUI 툴킷에서 Button 실제 코드

나르시갤로그로 이동합니다. 2025.11.08 02:12:04
조회 122 추천 0 댓글 4

두둥....

이 코드는 실험 버전이고 추후 새로 작성할 것이다.ㅋㅋㅋ


/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
/*
* g-button.c
* Copyright (C) 2023 Hodong Kim, All rights reserved.
* Unauthorized copying of this software, via any medium is strictly prohibited.
* Proprietary and confidential.
* Written by Hodong Kim <hodong@nimfsoft.art>
*/
#include "g-button.h"
#include "c-mem.h"
#include <stdlib.h>
#include "c-str.h"
#include <string.h>
#include "guiyom.h"
#include "g-graphics.h"

void g_button_free (GButton* button)
{
GWidget* widget = (GWidget*) button;

if (widget->window)
XDestroyWindow (g_display, widget->window);

g_surface_free (button->surface);
free (button->text);
free (button);
g_fini ();
}

void cb_button_expose (GWidget* widget, XEvent* event)
{
GButton* button = (GButton*) widget;
c_log_info ("cb_button_expose: %s", button->text);

if (!button->surface)
{
c_log_info ("g_surface_new");
button->surface = g_surface_new (g_display, widget->window);
}

GCanvas* canvas = g_canvas_new (button->surface);

g_canvas_clear (canvas, SK_COLOR_WHITE);

if (event->type == ButtonPress)
g_canvas_set_color (canvas, sk_color_set_argb (0xff, 0x88, 0x88, 0x88));
else
g_canvas_set_color (canvas, sk_color_set_argb (0xff, 0xcc, 0xcc, 0xcc));

sk_rect_t rect = { 0, 0, button->widget.width, button->widget.height };
g_canvas_draw_rect (canvas, &rect);

GFont font = { 0 };
font.size = 14;

g_canvas_set_color (canvas, sk_color_set_argb (0xff, 0x00, 0x00, 0x00));
g_canvas_draw_simple_text (canvas, button->text, strlen (button->text),
kUTF8, 10, 20, &font);

g_canvas_free (canvas);
g_surface_flush (button->surface);

XFlush (g_display);
}

static void cb_button_realize (GWidget* widget)
{
c_log_info ("cb_button_realize");
Window parent_window;
GWidget* parent = widget->parent;

while (parent && !parent->window)
{
c_log_info ("parent: %p", parent);
parent = parent->parent;
}

if (parent)
{
parent_window = parent->window;
c_log_info ("parent_window: %lu", (unsigned long) parent_window);
}
else
{
parent_window = DefaultRootWindow (g_display);
}

widget->window = XCreateSimpleWindow (g_display,
parent_window, widget->x, widget->y,
widget->width, widget->height, 0,
BlackPixel (g_display, DefaultScreen (g_display)),
WhitePixel (g_display, DefaultScreen (g_display)));
XSelectInput (g_display, widget->window,
ExposureMask | ButtonPressMask | ButtonReleaseMask);
c_hash_map_insert (g_windows, C_UINT_TO_VOIDP (widget->window), widget);
XMapWindow (g_display, widget->window);
}

GButton* g_button_new (const char* text)
{
c_log_info ("g_button_new");
g_init ();
GButton* button = c_calloc (1, sizeof (GButton));
button->text = c_strdup (text);
button->widget.x = 0;
button->widget.y = 0;
button->widget.width = 100;
button->widget.height = 30;

button->widget.realize = cb_button_realize;
button->widget.expose = cb_button_expose;
button->widget.free_func = (GWidgetFreeFunc) g_button_free;

return button;
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 이성 보는 눈 없어서 걱정되는 스타는? 운영자 25/11/10 - -
AD 겨울가전 SALE! 쿨한 겨울 HOT세일 운영자 25/11/12 - -
2902506 샤워했더니 졸리구나 [1] 발명도둑잡기(118.216) 11.14 30 0
2902505 글 5천개 이상 쓴 정신병자들은 사회와 영구격리 해야한당 By 나님 [3] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 74 0
2902504 점심 저녁 [1] 발명도둑잡기(118.216) 11.14 27 0
2902503 모기 갑자기 없어진둣? [1] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 45 0
2902501 확실히 뛰뛰하면 소화력 ㅆㅅㅌㅊ됨 ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 24 0
2902499 스텔라장 콘써트 하네 발명도둑잡기(118.216) 11.14 22 0
2902496 MS 코파일러 무료 버전에 대용량 파일 올릴 수 있다 나르시갤로그로 이동합니다. 11.14 26 0
2902495 빌리 아일리시 일론 머스크 비난 발명도둑잡기(118.216) 11.14 17 0
2902487 ㅋㅅㅋ [1] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 34 0
2902486 비트코인 창시자 죽엇넹 [8] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 147 1
2902485 주말인데 내가 관심있는 여성들 [2] 발명도둑잡기(118.216) 11.14 54 0
2902484 신입 4800이면 ㄱㅊ은거냐? [2] 프갤러(220.94) 11.14 87 0
2902483 보안걸려있는 컴으로 웹으로 코딩할수있는데 있냐 [1] 미카앨갤로그로 이동합니다. 11.14 56 0
2902482 주 4일 반대하는 이유 ㅇ ㅅㅇ [2] 프갤러(60.196) 11.14 55 0
2902481 자체 솔루션 가진 솔루션 엔지니어 괜찮음? 프갤러(106.102) 11.14 35 0
2902480 님들 저 대학교때 플래시게임만들던 기억삼아서 코딩다시배우는데 프갤러(175.117) 11.14 41 0
2902479 감기기운.. [2] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 72 0
2902478 FreeBSD 비공식 포트: gcc14-ada 나르시갤로그로 이동합니다. 11.14 29 0
2902477 고닉달고 글 1만개 이상 쓴 새끼들은 뭐하는 새끼들임? [3] 프갤러(112.171) 11.14 76 0
2902476 Guiyom 아키텍처 분석: 독창성 및 특허 가능성 검토 [2] 나르시갤로그로 이동합니다. 11.14 52 0
2902475 [대한민국] [대통령 관련 재판 문서정리]법관윤리강령과 판사 선서문 프갤러(121.172) 11.14 21 0
2902474 팀노바 빛을 발할때다 [9] 개멍청한유라갤로그로 이동합니다. 11.14 110 0
2902473 공공데이터포털 안되는데 저만 그런가요? 프갤러(121.146) 11.14 32 0
2902472 내가 10년전부터 전쟁나야한다할때는 재벌기득권들웃고자빠져 살더니 타이밍뒷.통수한방(1.213) 11.14 28 1
2902471 선생님 운전면허증 동안양경찰서에 습득물 신고 하였습니다. 넥도리아(223.38) 11.14 24 0
2902470 동안양경찰서 방문 [2] 넥도리아(223.38) 11.14 36 0
2902468 vs2019 테마 추천 좀 XEON갤로그로 이동합니다. 11.14 23 0
2902467 6년차 6천찍었다 [3] 프갤러(202.8) 11.14 94 0
2902466 여기 sap하는 형들도 있나 [3] 프갤러(118.235) 11.14 68 0
2902464 국비 수료했는데 취업할 수 있을까 [9] 쿠웩갤로그로 이동합니다. 11.14 180 0
2902463 흑흑.. ㅠㅠ [1] 헤르 미온느갤로그로 이동합니다. 11.14 37 0
2902462 파이썬 인생 40 년 갈아 넣었습니다. [1] 프갤러(59.16) 11.14 69 0
2902461 곧 경제적 자유 달성 프갤러(218.154) 11.14 53 0
2902460 금요일은 출근 하기 싫다 ㅇㅅㅇ [4] 류류(210.105) 11.14 44 1
2902459 요즘에도 이클립스 쓰네 ㄷㄷ [3] ㅇㅇ(14.5) 11.14 70 0
2902458 ‘우크라 재건 주가조작’ 웰바이오텍 회장 체포 발명도둑잡기(118.216) 11.14 32 0
2902457 단풍 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 11.14 32 0
2902456 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 11.14 22 0
2902455 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 11.14 49 0
2902454 [발명품] 화장품 회사가 만든 '노크 만년필' 발명도둑잡기(118.216) 11.14 29 0
2902453 방금 전 인스타그램 자동 추천 사진 검색 발명도둑잡기(118.216) 11.14 60 0
2902451 즐거운 목요일 아침입니다~ [2] 가연아갤로그로 이동합니다. 11.14 59 0
2902450 윈도우즈 '지뢰찾기' 게임의 원조 [1] 발명도둑잡기(118.216) 11.14 47 0
2902449 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ [2] ♥KiTTY냥덩♥갤로그로 이동합니다. 11.14 61 0
2902448 [단독]트럼프 “中에 100% 추가관세” 경고한 날, 국내코인 616억 [1] 발명도둑잡기(118.216) 11.14 46 0
2902447 “돈 내고 재미로 저격”… 보스니아 내전 ‘인간사냥 관광’ 수사 개시 발명도둑잡기(118.216) 11.14 26 0
2902446 “보안 뚫리면 국가안보까지 위험… 대규모 투자 시급” 발명도둑잡기(118.216) 11.14 41 0
2902445 자본과 검열의 관계 발명도둑잡기(118.216) 11.14 127 0
2902444 고졸의 덕담 발명도둑잡기(118.216) 11.14 28 0
2902443 리눅스 러시아인 차단 분쟁 후 포크 cinux 등장 발명도둑잡기(118.216) 11.14 31 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2