mirror of
https://github.com/id-Software/DOOM-3.git
synced 2026-03-20 00:49:31 +01:00
hello world
This commit is contained in:
206
neo/tools/common/ColorButton.cpp
Normal file
206
neo/tools/common/ColorButton.cpp
Normal file
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
===========================================================================
|
||||
|
||||
Doom 3 GPL Source Code
|
||||
Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company.
|
||||
|
||||
This file is part of the Doom 3 GPL Source Code (?Doom 3 Source Code?).
|
||||
|
||||
Doom 3 Source Code is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Doom 3 Source Code is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Doom 3 Source Code. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below.
|
||||
|
||||
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
||||
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
#include "../../idlib/precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ColorButton.h"
|
||||
|
||||
static const int ARROW_SIZE_CX = 4 ;
|
||||
static const int ARROW_SIZE_CY = 2 ;
|
||||
|
||||
/*
|
||||
================
|
||||
ColorButton_SetColor
|
||||
|
||||
Sets the current color button color
|
||||
================
|
||||
*/
|
||||
void ColorButton_SetColor ( HWND hWnd, COLORREF color )
|
||||
{
|
||||
if ( NULL == hWnd )
|
||||
{
|
||||
return;
|
||||
}
|
||||
SetWindowLong ( hWnd, GWL_USERDATA, color );
|
||||
InvalidateRect ( hWnd, NULL, FALSE );
|
||||
}
|
||||
|
||||
void ColorButton_SetColor ( HWND hWnd, const char* color )
|
||||
{
|
||||
float red;
|
||||
float green;
|
||||
float blue;
|
||||
float alpha;
|
||||
|
||||
if ( NULL == hWnd )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
sscanf ( color, "%f,%f,%f,%f", &red, &green, &blue, &alpha );
|
||||
|
||||
ColorButton_SetColor ( hWnd, RGB(red*255.0f, green*255.0f, blue*255.0f) );
|
||||
}
|
||||
|
||||
void AlphaButton_SetColor ( HWND hWnd, const char* color )
|
||||
{
|
||||
float red;
|
||||
float green;
|
||||
float blue;
|
||||
float alpha;
|
||||
|
||||
if ( NULL == hWnd )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
sscanf ( color, "%f,%f,%f,%f", &red, &green, &blue, &alpha );
|
||||
|
||||
ColorButton_SetColor ( hWnd, RGB(alpha*255.0f, alpha*255.0f, alpha*255.0f) );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
ColorButton_GetColor
|
||||
|
||||
Retrieves the current color button color
|
||||
================
|
||||
*/
|
||||
COLORREF ColorButton_GetColor ( HWND hWnd )
|
||||
{
|
||||
return (COLORREF) GetWindowLong ( hWnd, GWL_USERDATA );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
ColorButton_DrawArrow
|
||||
|
||||
Draws the arrow on the color button
|
||||
================
|
||||
*/
|
||||
static void ColorButton_DrawArrow ( HDC hDC, RECT* pRect, COLORREF color )
|
||||
{
|
||||
POINT ptsArrow[3];
|
||||
|
||||
ptsArrow[0].x = pRect->left;
|
||||
ptsArrow[0].y = pRect->top;
|
||||
ptsArrow[1].x = pRect->right;
|
||||
ptsArrow[1].y = pRect->top;
|
||||
ptsArrow[2].x = (pRect->left + pRect->right)/2;
|
||||
ptsArrow[2].y = pRect->bottom;
|
||||
|
||||
HBRUSH arrowBrush = CreateSolidBrush ( color );
|
||||
HPEN arrowPen = CreatePen ( PS_SOLID, 1, color );
|
||||
|
||||
HGDIOBJ oldBrush = SelectObject ( hDC, arrowBrush );
|
||||
HGDIOBJ oldPen = SelectObject ( hDC, arrowPen );
|
||||
|
||||
SetPolyFillMode(hDC, WINDING);
|
||||
Polygon(hDC, ptsArrow, 3);
|
||||
|
||||
SelectObject ( hDC, oldBrush );
|
||||
SelectObject ( hDC, oldPen );
|
||||
|
||||
DeleteObject ( arrowBrush );
|
||||
DeleteObject ( arrowPen );
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
ColorButton_DrawItem
|
||||
|
||||
Draws the actual color button as as reponse to a WM_DRAWITEM message
|
||||
================
|
||||
*/
|
||||
void ColorButton_DrawItem ( HWND hWnd, LPDRAWITEMSTRUCT dis )
|
||||
{
|
||||
assert ( dis );
|
||||
|
||||
HDC hDC = dis->hDC;
|
||||
UINT state = dis->itemState;
|
||||
RECT rDraw = dis->rcItem;
|
||||
RECT rArrow;
|
||||
|
||||
// Draw outter edge
|
||||
UINT uFrameState = DFCS_BUTTONPUSH|DFCS_ADJUSTRECT;
|
||||
|
||||
if (state & ODS_SELECTED)
|
||||
{
|
||||
uFrameState |= DFCS_PUSHED;
|
||||
}
|
||||
|
||||
if (state & ODS_DISABLED)
|
||||
{
|
||||
uFrameState |= DFCS_INACTIVE;
|
||||
}
|
||||
|
||||
DrawFrameControl ( hDC, &rDraw, DFC_BUTTON, uFrameState );
|
||||
|
||||
// Draw Focus
|
||||
if (state & ODS_SELECTED)
|
||||
{
|
||||
OffsetRect(&rDraw, 1,1);
|
||||
}
|
||||
|
||||
if (state & ODS_FOCUS)
|
||||
{
|
||||
RECT rFocus = {rDraw.left,
|
||||
rDraw.top,
|
||||
rDraw.right - 1,
|
||||
rDraw.bottom};
|
||||
|
||||
DrawFocusRect ( hDC, &rFocus );
|
||||
}
|
||||
|
||||
InflateRect ( &rDraw, -GetSystemMetrics(SM_CXEDGE), -GetSystemMetrics(SM_CYEDGE) );
|
||||
|
||||
// Draw the arrow
|
||||
rArrow.left = rDraw.right - ARROW_SIZE_CX - GetSystemMetrics(SM_CXEDGE) /2;
|
||||
rArrow.right = rArrow.left + ARROW_SIZE_CX;
|
||||
rArrow.top = (rDraw.bottom + rDraw.top)/2 - ARROW_SIZE_CY / 2;
|
||||
rArrow.bottom = (rDraw.bottom + rDraw.top)/2 + ARROW_SIZE_CY / 2;
|
||||
|
||||
ColorButton_DrawArrow ( hDC, &rArrow, (state & ODS_DISABLED) ? ::GetSysColor(COLOR_GRAYTEXT) : RGB(0,0,0) );
|
||||
|
||||
rDraw.right = rArrow.left - GetSystemMetrics(SM_CXEDGE)/2;
|
||||
|
||||
// Draw separator
|
||||
DrawEdge ( hDC, &rDraw, EDGE_ETCHED, BF_RIGHT);
|
||||
|
||||
rDraw.right -= (GetSystemMetrics(SM_CXEDGE) * 2) + 1 ;
|
||||
|
||||
// Draw Color
|
||||
if ((state & ODS_DISABLED) == 0)
|
||||
{
|
||||
HBRUSH color = CreateSolidBrush ( (COLORREF)GetWindowLong ( hWnd, GWL_USERDATA ) );
|
||||
FillRect ( hDC, &rDraw, color );
|
||||
FrameRect ( hDC, &rDraw, (HBRUSH)::GetStockObject(BLACK_BRUSH));
|
||||
DeleteObject( color );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user