From 0967de74dbfd452a7d2599e1e32655a4d5b567d8 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Wed, 19 Oct 2011 12:41:51 +0100 Subject: [PATCH] gdi32: Introduce a unified function to perform COLORREF to pixel color mapping. --- dlls/gdi32/dibdrv/dc.c | 8 ++++---- dlls/gdi32/dibdrv/dibdrv.h | 2 +- dlls/gdi32/dibdrv/objects.c | 22 +++++++++++----------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c index 2331e7cb57a..e832a20ca75 100644 --- a/dlls/gdi32/dibdrv/dc.c +++ b/dlls/gdi32/dibdrv/dc.c @@ -323,8 +323,8 @@ DWORD convert_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struct bit static void update_fg_colors( dibdrv_physdev *pdev ) { - pdev->pen_color = get_fg_color( pdev, pdev->pen_colorref ); - pdev->brush_color = get_fg_color( pdev, pdev->brush_colorref ); + pdev->pen_color = get_pixel_color( pdev, pdev->pen_colorref, TRUE ); + pdev->brush_color = get_pixel_color( pdev, pdev->brush_colorref, TRUE ); } static void update_masks( dibdrv_physdev *pdev, INT rop ) @@ -427,7 +427,7 @@ static COLORREF dibdrv_SetBkColor( PHYSDEV dev, COLORREF color ) PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetBkColor ); dibdrv_physdev *pdev = get_dibdrv_pdev(dev); - pdev->bkgnd_color = pdev->dib.funcs->colorref_to_pixel( &pdev->dib, color ); + pdev->bkgnd_color = get_pixel_color( pdev, color, FALSE ); if( GetBkMode(dev->hdc) == OPAQUE ) calc_and_xor_masks( GetROP2(dev->hdc), pdev->bkgnd_color, &pdev->bkgnd_and, &pdev->bkgnd_xor ); @@ -488,7 +488,7 @@ static UINT dibdrv_SetDIBColorTable( PHYSDEV dev, UINT pos, UINT count, const RG if( pos + count > pdev->dib.color_table_size ) count = pdev->dib.color_table_size - pos; memcpy( pdev->dib.color_table + pos, colors, count * sizeof(RGBQUAD) ); - pdev->bkgnd_color = pdev->dib.funcs->colorref_to_pixel( &pdev->dib, GetBkColor( dev->hdc ) ); + pdev->bkgnd_color = get_pixel_color( pdev, GetBkColor( dev->hdc ), FALSE ); update_fg_colors( pdev ); update_masks( pdev, GetROP2( dev->hdc ) ); diff --git a/dlls/gdi32/dibdrv/dibdrv.h b/dlls/gdi32/dibdrv/dibdrv.h index 60b24eed867..6d96e77edc0 100644 --- a/dlls/gdi32/dibdrv/dibdrv.h +++ b/dlls/gdi32/dibdrv/dibdrv.h @@ -198,7 +198,7 @@ extern void free_dib_info(dib_info *dib) DECLSPEC_HIDDEN; extern void free_pattern_brush(dibdrv_physdev *pdev) DECLSPEC_HIDDEN; extern void copy_dib_color_info(dib_info *dst, const dib_info *src) DECLSPEC_HIDDEN; extern BOOL convert_dib(dib_info *dst, const dib_info *src) DECLSPEC_HIDDEN; -extern DWORD get_fg_color(dibdrv_physdev *pdev, COLORREF color) DECLSPEC_HIDDEN; +extern DWORD get_pixel_color(dibdrv_physdev *pdev, COLORREF color, BOOL mono_fixup) DECLSPEC_HIDDEN; extern BOOL brush_rects( dibdrv_physdev *pdev, int num, const RECT *rects ) DECLSPEC_HIDDEN; extern HRGN add_extra_clipping_region( dibdrv_physdev *pdev, HRGN rgn ) DECLSPEC_HIDDEN; extern void restore_clipping_region( dibdrv_physdev *pdev, HRGN rgn ) DECLSPEC_HIDDEN; diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c index 67eda57ac73..6b278c8b678 100644 --- a/dlls/gdi32/dibdrv/objects.c +++ b/dlls/gdi32/dibdrv/objects.c @@ -124,7 +124,7 @@ static inline BOOL rgbquad_equal(const RGBQUAD *a, const RGBQUAD *b) } /****************************************************************** - * get_fg_color + * get_pixel_color * * 1 bit bitmaps map the fg/bg colors as follows: * If the fg colorref exactly matches one of the color table entries then @@ -132,20 +132,20 @@ static inline BOOL rgbquad_equal(const RGBQUAD *a, const RGBQUAD *b) * Otherwise the bg color is mapped to the closest entry in the table and * the fg takes the other one. */ -DWORD get_fg_color( dibdrv_physdev *pdev, COLORREF fg ) +DWORD get_pixel_color( dibdrv_physdev *pdev, COLORREF color, BOOL mono_fixup ) { RGBQUAD fg_quad; - if(pdev->dib.bit_count != 1) - return pdev->dib.funcs->colorref_to_pixel( &pdev->dib, fg ); + if (pdev->dib.bit_count != 1 || !mono_fixup) + return pdev->dib.funcs->colorref_to_pixel( &pdev->dib, color ); - fg_quad = rgbquad_from_colorref( fg ); + fg_quad = rgbquad_from_colorref( color ); if(rgbquad_equal(&fg_quad, pdev->dib.color_table)) return 0; if(rgbquad_equal(&fg_quad, pdev->dib.color_table + 1)) return 1; - if(fg == GetBkColor(pdev->dev.hdc)) return pdev->bkgnd_color; + if(color == GetBkColor(pdev->dev.hdc)) return pdev->bkgnd_color; else return pdev->bkgnd_color ? 0 : 1; } @@ -987,7 +987,7 @@ HPEN dibdrv_SelectPen( PHYSDEV dev, HPEN hpen ) logpen.lopnColor = GetDCPenColor( dev->hdc ); pdev->pen_colorref = logpen.lopnColor; - pdev->pen_color = get_fg_color( pdev, pdev->pen_colorref ); + pdev->pen_color = get_pixel_color( pdev, pdev->pen_colorref, TRUE ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->pen_color, &pdev->pen_and, &pdev->pen_xor); pdev->pen_pattern = dash_patterns[PS_SOLID]; @@ -1039,7 +1039,7 @@ COLORREF dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color ) if (GetCurrentObject(dev->hdc, OBJ_PEN) == GetStockObject( DC_PEN )) { pdev->pen_colorref = color; - pdev->pen_color = get_fg_color( pdev, pdev->pen_colorref ); + pdev->pen_color = get_pixel_color( pdev, pdev->pen_colorref, TRUE ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->pen_color, &pdev->pen_and, &pdev->pen_xor); } @@ -1311,7 +1311,7 @@ HBRUSH dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush ) { case BS_SOLID: pdev->brush_colorref = logbrush.lbColor; - pdev->brush_color = get_fg_color( pdev, pdev->brush_colorref ); + pdev->brush_color = get_pixel_color( pdev, pdev->brush_colorref, TRUE ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->brush_color, &pdev->brush_and, &pdev->brush_xor); pdev->brush_rects = solid_brush; pdev->defer &= ~DEFER_BRUSH; @@ -1363,7 +1363,7 @@ HBRUSH dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush ) if(logbrush.lbHatch > HS_DIAGCROSS) return 0; pdev->brush_hatch = logbrush.lbHatch; pdev->brush_colorref = logbrush.lbColor; - pdev->brush_color = get_fg_color( pdev, pdev->brush_colorref ); + pdev->brush_color = get_pixel_color( pdev, pdev->brush_colorref, TRUE ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->brush_color, &pdev->brush_and, &pdev->brush_xor); pdev->brush_rects = pattern_brush; pdev->defer &= ~DEFER_BRUSH; @@ -1388,7 +1388,7 @@ COLORREF dibdrv_SetDCBrushColor( PHYSDEV dev, COLORREF color ) if (GetCurrentObject(dev->hdc, OBJ_BRUSH) == GetStockObject( DC_BRUSH )) { pdev->brush_colorref = color; - pdev->brush_color = get_fg_color( pdev, pdev->brush_colorref ); + pdev->brush_color = get_pixel_color( pdev, pdev->brush_colorref, TRUE ); calc_and_xor_masks(GetROP2(dev->hdc), pdev->brush_color, &pdev->brush_and, &pdev->brush_xor); } -- 2.11.4.GIT