示例#1
0
 void SelectWhiteBrush() {
   brush = Brush(COLOR_WHITE);
 }
示例#2
0
 void SelectBlackBrush() {
   brush = Brush(COLOR_BLACK);
 }
示例#3
0
LRESULT CALLBACK
SettingsWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_VSCROLL:
            zoomTo(125 << SendMessage(hTrackbarZoom, TBM_GETPOS, 0, 0), 0, 0);
            break;
        case WM_PAINT:
        {
            HDC hdc = GetDC(hwnd);
            RECT rect1 = { 0, 0, 42, 66 };
            RECT rect2 = { 0, 70, 42, 136 };

            DefWindowProc(hwnd, message, wParam, lParam);

            DrawEdge(hdc, &rect1, BDR_SUNKENOUTER, (activeTool == TOOL_ZOOM) ? BF_RECT : BF_RECT | BF_MIDDLE);
            DrawEdge(hdc, &rect2, (activeTool >= TOOL_RECT) ? BDR_SUNKENOUTER : 0, BF_RECT | BF_MIDDLE);
            switch (activeTool)
            {
                case TOOL_FREESEL:
                case TOOL_RECTSEL:
                case TOOL_TEXT:
                {
                    HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
                    SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                    Rectangle(hdc, 2, transpBg * 31 + 2, 41, transpBg * 31 + 33);
                    DeleteObject(SelectObject(hdc, oldPen));
                    DrawIconEx(hdc, 1, 2, hNontranspIcon, 40, 30, 0, NULL, DI_NORMAL);
                    DrawIconEx(hdc, 1, 33, hTranspIcon, 40, 30, 0, NULL, DI_NORMAL);
                    break;
                }
                case TOOL_RUBBER:
                {
                    int i;
                    HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
                    for(i = 0; i < 4; i++)
                    {
                        if (rubberRadius == i + 2)
                        {
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                            Rectangle(hdc, 14, i * 15 + 2, 29, i * 15 + 17);
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHTTEXT));
                        }
                        else
                            SelectObject(hdc, GetSysColorBrush(COLOR_WINDOWTEXT));
                        Rectangle(hdc, 19 - i, i * 14 + 7, 24 + i, i * 16 + 12);
                    }
                    DeleteObject(SelectObject(hdc, oldPen));
                    break;
                }
                case TOOL_BRUSH:
                {
                    int i;
                    HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
                    SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                    Rectangle(hdc, brushStyle % 3 * 13 + 2, brushStyle / 3 * 15 + 2, brushStyle % 3 * 13 + 15,
                              brushStyle / 3 * 15 + 17);
                    DeleteObject(SelectObject(hdc, oldPen));
                    for(i = 0; i < 12; i++)
                        Brush(hdc, i % 3 * 13 + 7, i / 3 * 15 + 8, i % 3 * 13 + 7, i / 3 * 15 + 8,
                              GetSysColor((i == brushStyle) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), i);
                    break;
                }
                case TOOL_AIRBRUSH:
                {
                    HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
                    SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                    switch (airBrushWidth)
                    {
                        case 5:
                            Rectangle(hdc, 2, 2, 21, 31);
                            break;
                        case 8:
                            Rectangle(hdc, 20, 2, 41, 31);
                            break;
                        case 3:
                            Rectangle(hdc, 2, 30, 16, 61);
                            break;
                        case 12:
                            Rectangle(hdc, 15, 30, 41, 61);
                            break;
                    }
                    Airbrush(hdc, 10, 15,
                             GetSysColor((airBrushWidth == 5) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 5);
                    Airbrush(hdc, 30, 15,
                             GetSysColor((airBrushWidth == 8) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 8);
                    Airbrush(hdc, 8, 45,
                             GetSysColor((airBrushWidth == 3) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 3);
                    Airbrush(hdc, 27, 45,
                             GetSysColor((airBrushWidth == 12) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT), 12);
                    DeleteObject(SelectObject(hdc, oldPen));
                    break;
                }
                case TOOL_LINE:
                case TOOL_BEZIER:
                {
                    int i;
                    HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
                    for(i = 0; i < 5; i++)
                    {
                        if (lineWidth == i + 1)
                        {
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                            Rectangle(hdc, 2, i * 12 + 2, 41, i * 12 + 14);
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHTTEXT));
                        }
                        else
                            SelectObject(hdc, GetSysColorBrush(COLOR_WINDOWTEXT));
                        Rectangle(hdc, 5, i * 12 + 6, 38, i * 12 + 8 + i);
                    }
                    DeleteObject(SelectObject(hdc, oldPen));
                    break;
                }
                case TOOL_RECT:
                case TOOL_SHAPE:
                case TOOL_ELLIPSE:
                case TOOL_RRECT:
                {
                    int i;
                    HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
                    for(i = 0; i < 3; i++)
                    {
                        if (shapeStyle == i)
                        {
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                            Rectangle(hdc, 2, i * 20 + 2, 41, i * 20 + 22);
                        }
                    }
                    Rect(hdc, 5, 6, 37, 16,
                         GetSysColor((shapeStyle == 0) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT),
                         GetSysColor(COLOR_APPWORKSPACE), 1, 0);
                    Rect(hdc, 5, 26, 37, 36,
                         GetSysColor((shapeStyle == 1) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT),
                         GetSysColor(COLOR_APPWORKSPACE), 1, 1);
                    Rect(hdc, 5, 46, 37, 56, GetSysColor(COLOR_APPWORKSPACE), GetSysColor(COLOR_APPWORKSPACE),
                         1, 1);
                    for(i = 0; i < 5; i++)
                    {
                        if (lineWidth == i + 1)
                        {
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
                            Rectangle(hdc, 2, i * 12 + 72, 41, i * 12 + 84);
                            SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHTTEXT));
                        }
                        else
                            SelectObject(hdc, GetSysColorBrush(COLOR_WINDOWTEXT));
                        Rectangle(hdc, 5, i * 12 + 76, 38, i * 12 + 78 + i);
                    }
                    DeleteObject(SelectObject(hdc, oldPen));
                    break;
                }
            }
            ReleaseDC(hwnd, hdc);
            break;
        }
        case WM_LBUTTONDOWN:
        {
            int x = GET_X_LPARAM(lParam);
            int y = GET_Y_LPARAM(lParam);
            switch (activeTool)
            {
                case TOOL_FREESEL:
                case TOOL_RECTSEL:
                case TOOL_TEXT:
                    if ((y > 1) && (y < 64))
                    {
                        transpBg = (y - 2) / 31;
                        InvalidateRect(hwnd, NULL, TRUE);

                        ForceRefreshSelectionContents();
                    }
                    break;
                case TOOL_RUBBER:
                    if ((y > 1) && (y < 62))
                    {
                        rubberRadius = (y - 2) / 15 + 2;
                        InvalidateRect(hwnd, NULL, TRUE);
                    }
                    break;
                case TOOL_BRUSH:
                    if ((x > 1) && (x < 40) && (y > 1)
                        && (y < 62))
                    {
                        brushStyle = (y - 2) / 15 * 3 + (x - 2) / 13;
                        InvalidateRect(hwnd, NULL, TRUE);
                    }
                    break;
                case TOOL_AIRBRUSH:
                    if (y < 62)
                    {
                        if (y < 30)
                        {
                            if (x < 20)
                                airBrushWidth = 5;
                            else
                                airBrushWidth = 8;
                        }
                        else
                        {
                            if (x < 15)
                                airBrushWidth = 3;
                            else
                                airBrushWidth = 12;
                        }
                        InvalidateRect(hwnd, NULL, TRUE);
                    }
                    break;
                case TOOL_LINE:
                case TOOL_BEZIER:
                    if (y <= 62)
                    {
                        lineWidth = (y - 2) / 12 + 1;
                        InvalidateRect(hwnd, NULL, TRUE);
                    }
                    break;
                case TOOL_RECT:
                case TOOL_SHAPE:
                case TOOL_ELLIPSE:
                case TOOL_RRECT:
                    if (y <= 60)
                    {
                        shapeStyle = (y - 2) / 20;
                        InvalidateRect(hwnd, NULL, TRUE);
                    }
                    if ((y >= 70) && (y <= 132))
                    {
                        lineWidth = (y - 72) / 12 + 1;
                        InvalidateRect(hwnd, NULL, TRUE);
                    }
                    break;
            }
            break;
        }

        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }

    return 0;
}
示例#4
0
void
PaintTask(Canvas &canvas, const WindowProjection &projection,
          const OrderedTask &task,
          const GeoPoint &location,
          const MapSettings &settings_map,
          const TaskLook &task_look,
          const AirspaceLook &airspace_look,
          const RasterTerrain *terrain, const Airspaces *airspaces,
          bool fai_sectors,
          int highlight_index)
{
    BackgroundRenderer background;
    background.SetTerrain(terrain);
    background.Draw(canvas, projection, settings_map.terrain);

    if (airspaces != NULL) {
        AirspaceRenderer airspace_renderer(airspace_look);
        airspace_renderer.SetAirspaces(airspaces);

#ifndef ENABLE_OPENGL
        BufferCanvas stencil_canvas;
        stencil_canvas.Create(canvas);
#endif

        airspace_renderer.Draw(canvas,
#ifndef ENABLE_OPENGL
                               stencil_canvas,
#endif
                               projection, settings_map.airspace);
    }

#ifdef ENABLE_OPENGL
    /* desaturate the map background, to focus on the task */
    canvas.FadeToWhite(0xc0);
#endif

    if (fai_sectors && IsFAITriangleApplicable(task)) {
        static constexpr Color fill_color = COLOR_YELLOW;
#if defined(ENABLE_OPENGL) || defined(USE_MEMORY_CANVAS)
#ifdef ENABLE_OPENGL
        const GLBlend blend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
#endif

        canvas.Select(Brush(fill_color.WithAlpha(40)));
        canvas.Select(Pen(1, COLOR_BLACK.WithAlpha(80)));
        RenderFAISectors(canvas, projection, task);
#else
        BufferCanvas buffer_canvas;
        buffer_canvas.Create(canvas);
        buffer_canvas.ClearWhite();
#ifdef HAVE_HATCHED_BRUSH
        buffer_canvas.Select(airspace_look.brushes[3]);
        buffer_canvas.SetTextColor(fill_color);
        buffer_canvas.SetBackgroundColor(COLOR_WHITE);
#else
        buffer_canvas.Select(Brush(fill_color));
#endif
        buffer_canvas.SelectNullPen();
        RenderFAISectors(buffer_canvas, projection, task);
        canvas.CopyAnd(buffer_canvas);

        canvas.SelectHollowBrush();
        canvas.SelectBlackPen();
        RenderFAISectors(canvas, projection, task);
#endif
    }

    OZRenderer ozv(task_look, airspace_look, settings_map.airspace);
    TaskPointRenderer tpv(canvas, projection, task_look,
                          task.GetTaskProjection(),
                          ozv, false, TaskPointRenderer::NONE,
                          location);
    TaskRenderer dv(tpv, projection.GetScreenBounds());
    dv.Draw(task);

    // highlight a task point
    if (highlight_index >= 0 && highlight_index < (int) task.TaskSize()) {
        /* TODO: clumsy way of highlighting. maybe it should be done by
         *       painting the task point with a different pen and brush,
         *       e.g. red, 4px wide
         */
        RasterPoint pt = projection.GeoToScreen(task.GetPoint(highlight_index).
                                                GetLocation());
        canvas.Select(task_look.highlight_pen);
        canvas.DrawLine(pt.x - 7, pt.y - 7, pt.x + 7, pt.y + 7);
        canvas.DrawLine(pt.x + 7, pt.y - 7, pt.x - 7, pt.y + 7);
    }
}
示例#5
0
文件: brush.cpp 项目: Flexlay/flexlay
Brush
Brush::clone() const
{
  return Brush(std::shared_ptr<BrushImpl>(impl->clone()));
}
示例#6
0
 void SetupInterior(const AbstractAirspace &airspace) {
   Color color = settings.classes[airspace.GetType()].fill_color;
   canvas.Select(Brush(color.WithAlpha(48)));
   canvas.SelectNullPen();
 }
示例#7
0
// Set the brush color, using an enum value (e.g. ScrollView::ORANGE)
void ScrollView::Brush(Color color) {
  Brush(table_colors[color][0],
        table_colors[color][1],
        table_colors[color][2],
        table_colors[color][3]);
}