mirror of
https://github.com/reactos/reactos.git
synced 2024-08-19 18:02:55 +00:00
93 lines
2.9 KiB
C
93 lines
2.9 KiB
C
/* -------------- button.c -------------- */
|
|
|
|
#include "dflat.h"
|
|
|
|
void PaintMsg(DFWINDOW wnd, DF_CTLWINDOW *ct, DFRECT *rc)
|
|
{
|
|
if (DfIsVisible(wnd))
|
|
{
|
|
if (DfTestAttribute(wnd, DF_SHADOW))
|
|
{
|
|
/* -------- draw the button's shadow ------- */
|
|
int x;
|
|
DfBackground = DfWndBackground(DfGetParent(wnd));
|
|
DfForeground = BLACK;
|
|
for (x = 1; x <= DfWindowWidth(wnd); x++)
|
|
DfWPutch(wnd, (char)223, x, 1);
|
|
DfWPutch(wnd, (char)220, DfWindowWidth(wnd), 0);
|
|
}
|
|
if (ct->itext != NULL)
|
|
{
|
|
char *txt;
|
|
txt = DfCalloc(1, strlen(ct->itext)+10);
|
|
if (ct->setting == DF_OFF) {
|
|
txt[0] = DF_CHANGECOLOR;
|
|
txt[1] = wnd->WindowColors
|
|
[DF_HILITE_COLOR] [DF_FG] | 0x80;
|
|
txt[2] = wnd->WindowColors
|
|
[DF_STD_COLOR] [DF_BG] | 0x80;
|
|
}
|
|
DfCopyCommand(txt+strlen(txt),ct->itext,!ct->setting,
|
|
DfWndBackground(wnd));
|
|
DfSendMessage(wnd, DFM_CLEARTEXT, 0, 0);
|
|
DfSendMessage(wnd, DFM_ADDTEXT, (DF_PARAM) txt, 0);
|
|
free(txt);
|
|
}
|
|
/* --------- write the button's text ------- */
|
|
DfWriteTextLine(wnd, rc, 0, wnd == DfInFocus);
|
|
}
|
|
}
|
|
|
|
void LeftButtonMsg(DFWINDOW wnd, DFMESSAGE msg, DF_CTLWINDOW *ct)
|
|
{
|
|
/* --------- draw a pushed button -------- */
|
|
int x;
|
|
DfBackground = DfWndBackground(DfGetParent(wnd));
|
|
DfForeground = DfWndBackground(wnd);
|
|
DfWPutch(wnd, ' ', 0, 0);
|
|
for (x = 0; x < DfWindowWidth(wnd); x++)
|
|
{
|
|
DfWPutch(wnd, (char)220, x+1, 0);
|
|
DfWPutch(wnd, (char)223, x+1, 1);
|
|
}
|
|
if (msg == DFM_LEFT_BUTTON)
|
|
DfSendMessage(NULL, DFM_WAITMOUSE, 0, 0);
|
|
else
|
|
DfSendMessage(NULL, DFM_WAITKEYBOARD, 0, 0);
|
|
DfSendMessage(wnd, DFM_PAINT, 0, 0);
|
|
if (ct->setting == DF_ON)
|
|
DfPostMessage(DfGetParent(wnd), DFM_COMMAND, ct->command, 0);
|
|
else
|
|
DfBeep();
|
|
}
|
|
|
|
int DfButtonProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
|
|
{
|
|
DF_CTLWINDOW *ct = DfGetControl(wnd);
|
|
if (ct != NULL) {
|
|
switch (msg) {
|
|
case DFM_SETFOCUS:
|
|
DfBaseWndProc(DF_BUTTON, wnd, msg, p1, p2);
|
|
p1 = 0;
|
|
/* ------- fall through ------- */
|
|
case DFM_PAINT:
|
|
PaintMsg(wnd, ct, (DFRECT*)p1);
|
|
return TRUE;
|
|
case DFM_KEYBOARD:
|
|
if (p1 != '\r')
|
|
break;
|
|
/* ---- fall through ---- */
|
|
case DFM_LEFT_BUTTON:
|
|
LeftButtonMsg(wnd, msg, ct);
|
|
return TRUE;
|
|
case DFM_HORIZSCROLL:
|
|
return TRUE;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return DfBaseWndProc(DF_BUTTON, wnd, msg, p1, p2);
|
|
}
|
|
|
|
/* EOF */
|